2013-06-26 2 views
0

de GLKVector2 J'ai des problèmes pour configurer des vecteurs pour un objet dans mon code. J'ai essayé de modéliser mon code de manière similaire à la réponse à cette question: Game enemy move towards player sauf que j'utilise GLKVector2. Je pensais que ma mise en œuvre semblait correcte, mais c'est vraiment la première fois que j'utilise des vecteurs avec GLKit et en général je ne les ai pas trop utilisés auparavant.Problème avec le fichier

Mon code actuel ressemble à:

GLKVector2 vector = GLKVector2Make(self.player.position.x - self.target.position.x, self.player.position.y - self.target.position.y); 

    float hypo = sqrt(vector.x*vector.x + vector.y*vector.y); 
    float speed = 0.25; 

    vector = GLKVector2Make(vector.x/hypo, vector.y/hypo); 
    vector = GLKVector2MultiplyScalar(vector, speed); 

    GLKVector2 sum = GLKVector2Add(vector, self.target.position); 

    self.target.moveVelocity = sum; 

Est-il possible que ma logique est tout simplement pas correcte ici? J'apprécierais toute aide ou suggestion. Merci!

EDIT: juste pour clarifier car je n'ai pas vraiment expliqué ce qui se passe .. Fondamentalement, l'ennemi "" forme soit bégaie/saut ou tout simplement coller. Ils ne se déplacent pas du tout vers l'autre objet.

EDIT 2:

Si j'essayer d'utiliser GLKVector2Normalize, alors rien ne bouge. Si je fais quelque chose comme:

GLKVector2 vector = GLKVector2Make(self.player.position.x - self.target.position.x, self.player.position.y - self.target.position.y); 

    float speed = 0.10; 
// float distance = GLKVector2Distance(self.player.position, self.target.position); 

// vector = GLKVector2Normalize(vector); 
    vector = GLKVector2MultiplyScalar(vector, speed); 
    self.target.moveVelocity = vector; 

Ensuite, le mouvement travaille vers l'objet de joueur, mais seulement met à jour le temps, même si elle doit être mise à jour chaque seconde.

Répondre

0

Deux choses:

  • Il n'y a pas besoin de calculer l'ampleur du vecteur et de vous diviser - GLKit a une fonction GLKVector2Normalize, qui prend un vecteur et renvoie le vecteur dans la même direction avec la longueur 1. Vous pouvez ensuite utiliser GLKVector2MultiplyScalar (comme vous le faites) pour changer la vitesse.
  • doit être réglé sur vecteur, somme non la vitesse de votre cible, en supposant que la méthode de mise à jour de la cible (que vous devez appeler une fois par timestep), vous ajoutez self.moveVelocity.x-self.position.x et self.moveVelocity.y à self.position.y chaque timestep. Comme il est maintenant, votre variable sum contiendra la position que votre cible devrait avoir un pas dans le futur, pas sa vitesse.
+0

J'ai mis à jour ma question. Quelque chose ne fonctionne toujours pas correctement. Je pense que mon code de mise à jour est bon, mais je ne suis pas trop sûr. – Josh

+0

Pouvez-vous poster votre code de mise à jour? Vous devriez incrémenter 'position.x' par' moveVelocity.x * timeSinceLastUpdate' et 'position.y' par' moveVelocity.y * timeSinceLastUpdate' avant de dessiner à l'écran à chaque pas de temps. Vous ne savez pas pourquoi GLKVector2Normalize ne fonctionnerait pas. –