2010-06-30 5 views
1

Voici mon problème imageBOX2D Contact (isTouching) Problème

alt text

Je veux vérifier si les balles se touchent, qui fonctionne parfaitement. Parfois, cependant, cette balle avec la flèche n'est pas ramassée, ce qui bien sûr est logique car elle ne touche à rien. Cependant, je veux donner un peu de marge de manœuvre afin que si une balle est à 4 pixels/0,001 m de distance, cela devrait être considéré comme touchant. Alors quelle idée/comment pourrais-je l'appliquer? J'ai regardé le code isTouching et voici ce que je peux trouver.

 var b1 = body1; 
var b2 = body2; 

Transform xf; 
Transform xf2; 

    b1.GetTransform(out xf); 
b2.GetTransform(out xf2); 


var touching = AABB.TestOverlap(b1.GetFixtureList().GetShape(), b2.GetFixtureList().GetShape(), ref xf, ref xf2); 

if (!touching) 
continue; 

Je dois encore vérifier s'il y a une balle de loin, et je suis désemparés à ce que je peux faire.

Répondre

1

Sans savoir ce que tous vos cours sont, il est difficile de donner une réponse exacte. Mais, le principe général serait d'augmenter les limites que vous vérifiez. Par exemple, si vos formes sont des cercles de rayon n, lors de la vérification des collisions, vous pouvez utiliser un rayon de n + 2. Notez que vous dessinez toujours le cercle en utilisant un rayon de n. Vous utilisez simplement le rayon accru pour la détection de collision. De même, avec l'AABB, vous devez augmenter les limites de quelques pixels. Ce que vous ferez dépendra de la façon dont vos cours fonctionneront.

+0

Si vous augmentez le rayon des formes de cercle, leurs AABB doivent également être mis à jour. Pas besoin d'augmenter leur taille manuellement. –