2011-08-02 2 views
2

J'essaie toujours de comprendre comment créer une simulation de bombe. J'ai une balle et une bombe, quand la balle entre en collision avec la bombe, la bombe explose et force la balle dans la direction où la balle a été lancée.Créer une bombe - Cocos2d/Box2d

Maintenant j'utilise ApplyLinearImpulse, mais je suis obligé de choisir un direction spécifique. Je dois juste la balle d'être forcé dans lequel jamais la direction, il a été jeté dans.

Par exemple,

La balle a été lancée sur le côté en haut à gauche de la bombe, alors la balle est forcé et à la la gauche. La balle a été lancée sur le côté inférieur gauche de la bombe, puis la balle est forcée vers le bas et vers la gauche.

Fondamentalement, il suffit d'une bombe. Quelqu'un pourrait-il me dire comment faire cela? Je suis nouveau à Box2d.

C'est ce que j'utilise en ce moment.

-(void) explodeBomb 
{ 
    b2Vec2 force = b2Vec2(-20,20); // give the direction for the force. 

    _ballBody->ApplyLinearImpulse(force, _ballBody->GetWorldCenter()); 
} 
+0

Ne devrait pas la direction juste être dans la direction de ' pos (bombe) - pos (balle) '? – bdares

Répondre

4

Vous avez besoin de quelques maths. Si l'on suppose sont à bodyPosition les positions de l'organisme et la bombe et bombPosition respectivement:

double diffX = bodyPosition.x - bombPosition.x; 
double diffY = bodyPosition.y - bombPosition.y; 
double distance = sqrt(diffX * diffX + diffY * diffY); 
double normalizedX = diffX/distance; 
double normalizedY = diffY/distance; 

Maintenant, en supposant que vous souhaitez appliquer une force de 20 unités:

float factor = 20.0f; 
b2Vec2 force(normalizedX * factor, normalizedY * factor); 
_ballBody->ApplyLinearImpulse(force, _ballBody->GetWorldCenter()); 
+1

Ne prends pas ça bizarre mais je t'aime mdr. Pourriez-vous m'expliquer ce que vous venez de faire parce que c'est exactement ce dont je parlais? – Jonathan

+0

@Jon: Fondamentalement, le premier bloc de code ci-dessus calcule le vecteur normalisé pour la direction, tandis que le second bloc de code augmente le vecteur normalisé en fonction de la force que vous voulez appliquer. p/s: le vecteur normalisé est le vecteur d'une longueur de 1 unité – Lukman