2011-08-01 3 views
0

J'ai un projectile et une tour. Quand je lance le projectile, il frappe la tour. Basé sur la force du projectile, la tour est cassée. Maintenant, j'ai besoin de savoir comment obtenir la force qui est appliquée à ces 2 objets lorsqu'ils entrent en collision (pas avant la collision, plutôt qu'après la collision). Je sais que dans la méthode suivante, ils sont calculated-Force appliquée dans un objet box2d après une collision

void MyContactListener::PostSolve(b2Contact* contact, const b2ContactImpulse *impulse) 
{ 
    force=impulse->normalImpulses[0]; 
} 

cela me donne la force globale appliquée, mais je veux savoir la force individuelle appliquée à 2 objet différent.

Et une autre question, cette méthode réside dans la sous-classe de la classe b2ContactListener. Comment passer cette valeur à gameScene où l'objet sera détruit.

Répondre

1
  1. La même impulsion est appliquée aux deux organes (dans des directions opposées, bien sûr).

  2. Vous devez avoir une variable visible à la fois pour le rappel PostSolve et partout où vous devez l'utiliser - une variable globale ou de classe peut être utilisée.

+0

Si plusieurs objets entrent en collision, alors comment identifier une impulsion distincte de cette variable? – russell

+0

Vous devrez vérifier quels appareils sont en collision - vous pouvez les obtenir à partir du contact comme contact-> GetFixtureA() et contact-> GetFixtureB(). Si cela vous aide, vous pouvez définir quelque chose dans les données utilisateur en tant que balise pour les différencier. Voir la mise en œuvre de BeginContact dans ce tutoriel, c'est un peu similaire: http://www.iforce2d.net/b2dtut/collision-callbacks – iforce2d

+0

Merci pour ce lien. Mais si l'objet A entre en collision avec l'objet B et l'objet C en même temps, j'obtiendrai 2 impulsions pour A. Donc l'objet A aura 2 impulsions, donc l'étiquette de données utilisateur pour l'objet A ne suffira pas. Une autre idée ?? – russell

Questions connexes