Jeu de l'ennemi se déplacer vers le joueur
Je suis en train de créer un jeu en c++ et OpenGL et souhaitez un ennemi à se déplacer vers le joueur.
Quelle est la meilleure méthode pour faire des objets de jeu évoluer vers d'autres objets du jeu, qui fonctionne à la fois en 2D et en 3D des environnements de jeu?
Mise à JOUR:
wow merci à tous pour les réponses rapides!
assez étrangement, j'ai réussi à obtenir que cela fonctionne juste comme je l'ai posté il
bien que, pour une raison que j'ai de multiplier les valeurs de x en plus de les amener à se déplacer aussi vite que la direction y.
quelqu'un a une idée pourquoi? ou si ce que je fais est mauvais/mauvaise
float playerX = player.getXPos();
float playerY = player.getYPos();
float enemyX = XPos-*xscroll;
float enemyY = YPos-*yscroll;
glPushMatrix();
glTranslatef(enemyX, enemyY, 0.0);
glColor3f(1.0,0.0,0.0);
glBegin(GL_POLYGON);
glVertex2f(-40,40);
glVertex2f(-40,-40);
glVertex2f(40,-40);
glVertex2f(40,40);
glEnd();
glPopMatrix();
float xDistance = abs(playerX-enemyX);
float yDistance = abs(playerY-enemyY);
if((playerX - enemyX)*(playerX - enemyX)+(playerY - enemyY)*(playerY - enemyY) < 400*400){
float heading = asin(xDistance/yDistance);
if(playerY > enemyY){
YPos += timeFactor*(200*(sin((90+heading)*(PI/180.0f))));
}else{
YPos += -(timeFactor*(200*(sin((90+heading)*(PI/180.0f)))));
}
if(playerX > enemyX){
XPos += -(timeFactor*(10000*(cos((90+heading)*(PI/180.0f)))));
}else{
XPos += timeFactor*(10000*(cos((90+heading)*(PI/180.0f))));
}
}
+1. Dites à l'ennemi, "vous Voyez cette ligne? Déplacer vers le bas."
Application libérale de maths.
Comment faire de l'encodage de mouvement dans votre jeu de structures de données représentant la simulation de l'univers?
Il est beaucoup plus facile de tirer sur les ennemis qui viennent directement à vous...
Application libérale de maths.
Comment faire de l'encodage de mouvement dans votre jeu de structures de données représentant la simulation de l'univers?
Il est beaucoup plus facile de tirer sur les ennemis qui viennent directement à vous...
OriginalL'auteur Chris | 2010-04-12
Vous devez vous connecter pour publier un commentaire.
Créer un vecteur dans la direction que vous voulez l'ennemi à se déplacer. C'est simple:
Maintenant normaliser ce vecteur. Que signifie diviser les conditions de l'ampleur (l'hypoténuse) du vecteur.
Maintenant, vous avez juste besoin d'ajouter que le vecteur de la position de l'ennemi, multiplié par la vitesse que vous voulez l'ennemi à se déplacer:
Voici comment cela fonctionne - si vous ajoutez que le vecteur initial de la position de l'ennemi, il sera instantanément transporté vers le joueur. Manifestement, vous voulez ennemi à se déplacer à une vitesse plus lente. Lorsque vous normaliser le vecteur, vous faire de l'ampleur (essentiellement l'hypoténuse du triangle formes) égal à 1. Alors maintenant, en ajoutant le vecteur de direction se déplace à l'ennemi par une unité. Multipliez par 1 unité par l'ennemi de la vitesse, et maintenant il se déplace à la vitesse correcte.
Edit: tout cela s'étend à la 3D. Vous avez juste besoin d'un z-composant.
D'autres modifications à commenter votre code:
Vous faites beaucoup de travail supplémentaire. Vous avez suffisamment d'informations une fois que vous calculer l'hypoténuse pour déplacer l'ennemi vers le joueur. Vous n'avez pas besoin d'utiliser la trigo - voir mon code ci-dessus. Vous êtes également le calcul (sorte de) l'amplitude deux fois:
La deuxième fois, c'est le carré de la distance qui est une bonne optimisation, mais inutile ici parce que vous avez déjà calculé la distance et le carré de la distance.
Voici ce que je ferais:
Vous remarquerez que par la suppression de l'abs (), j'ai aussi réussi à enlever le si(playerY > enemyY), etc parties.
mon jeu crée un timefactor que tout mouvement est multiplié par se débarrasser de framerate différences
Merci!!!! une bien meilleure solution à la mienne, beaucoup plus simple aussi merci beaucoup
C'est toujours plus excitant quand les ennemis sont en mouvement et que vous essayez de prédire où l'ennemi sera quand vous arrivez dans la gamme. 🙂
C'était parfait! Merci pour cette explication! J'ai eu mon projet et en cours d'exécution dans le temps 🙂
OriginalL'auteur Niki Yoshiuchi
Utilisation vecteurs. C'est mort simple et exactement comment les jeux de ce faire.
Si votre lecteur est à la position 10, 10 (suppose que cela est un espace 2D) et votre ennemi a été à 20, 10. Le vecteur du joueur à l'ennemi:
ou
La normalisation de ce vecteur vous donne le vecteur unitaire, ou de la direction. Qui dans ce cas est de -1, 0. Plusieurs le vecteur unitaire (qui est la direction, rappelez-vous) par une valeur scalaire chaque image et l'ennemi va se déplacer vers le joueur. Ce qui se passe quand il arrive, il est à vous 😉
OriginalL'auteur Finglas
La position du joueur est point1. Position ennemie est point2. D'abord, vous aurez besoin de trouver la différence entre le x1 et x2 et y1 et y2 (je vais l'appeler ces xd et yd). Ensuite, vous pouvez obtenir l'angle entre les deux points en faisant des theta = atan(m/xd). Maintenant, vous devriez être en mesure d'obtenir le nouveau x et y (que j'appellerai x3 et y3) à l'aide de l'angle et de la distance que vous souhaitez parcourir, où x3 = (d)(cos(theta)) et y3 = (d)(sin(theta)). Déplacer l'ennemi (x3, y3).
d est la vitesse de l'ennemi est en mouvement par mise à jour. Vous pourriez avoir à jouer avec les signes pour obtenir les directions à droite (c'est à dire si l'ennemi se déplace dans la bonne direction x mais mauvaise direction y puis changer de signe y).
Espérons que cette aide!
OriginalL'auteur Peter
C'est là que vous avez besoin d'un "chemin algorithme de recherche". Sur un terrain de jeu, vous pourriez suivre une ligne droite vers la cible. Cependant, avec des obstacles dans le chemin, vous devez donner à l'IA de décider de la meilleure façon, ou si c'est encore possible.
Une recherche sur codeproject.com vous trouverez plusieurs articles sur la découverte de parcours.
OriginalL'auteur spoulson