2011-08-26 7 views
0

J'écris un jeu en utilisant la bibliothèque Cocos2d pour iOS. Jusqu'à présent, j'ai un sprite sur l'écran que je voudrais faire glisser. Fondamentalement, j'ai un CGPoint appelé End. Quand je traîne sur l'écran, il bouge. Je veux que le sprite détermine sur chaque image si End a bougé, et s'il a commencé à avancer vers lui à une vélocité donnée, et qu'il s'arrête juste au-dessus. La fin est comme une ancre. J'ai accompli les deux premières étapes en traçant le vecteur comme ceci:Comment détecter si un CCSprite a atteint un certain point?

-(void) update:(ccTime)deltaTime 
{ 
    CGPoint Pos = _player.position; 
    velocity = 15; 

    diff.x = End.x - _player.position.x; 
    diff.y = End.y - _player.position.y; 
    length = ccpLength(diff); 

    norm.x = diff.x/length * velocity; 
    norm.y = diff.y/length * velocity; 

    Pos.x += norm.x; 
    Pos.y += norm.y; 
} 

je déplace le point final autour comme ceci:

- (void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event 
{ 
CGPoint touchLocation = [self convertTouchToNodeSpace:touch]; 

CGPoint oldTouchLocation = [touch previousLocationInView:touch.view]; 
oldTouchLocation = [[CCDirector sharedDirector sharedDirector] convertToGL:oldTouchLocation]; 
oldTouchLocation = [self convertToNodespace:oldTouchLocation]; 

CGPoint diff = ccpSub(touchLocation, oldTouchLocation); 

End = ccpAdd(End, diff); 
} 

Quelle est la meilleure façon de détecter quand le _player a atteint c'est la destination? J'ai essayé cela de plusieurs façons, mais je ne peux vraiment pas être assez précis. J'ai essayé d'ajouter une minuterie qui chronomètre la durée de chaque mouvement, donc je pourrais tester si vitesse * durée> = longueur. Est-ce le moyen de le faire? Ça n'a pas très bien fonctionné. Les programmeurs principaux veulent me donner quelques conseils?

Répondre

1

À la fin de votre méthode de mise à jour, vérifiez la distance. Si la distance est sous vélocité, vous avez terminé, définissez la position sur le point de terminaison et déclenchez la méthode que vous souhaitez. Dans cocos2d, vous pouvez utiliser la méthode ccpDistance.

Questions connexes