Sono nuovo in box2d e sto provando ad implementarlo in un gioco LibGDX. Quello che voglio fare è rilevare la collisione tra i vari corpi. Quindi, ho creato una classe collisionDetection e implementato ContactListener
in esso che mi dà 4 metodi sovrascritti, ad esempio beginContact()
e endContact()
che devo affrontare. Inoltre sto passando l'oggetto della classe collisionDetection nello world.setcontactListner(collisionDet)
con il quale verranno chiamati i metodi sovrascritti della classe collisionDetection quando i corpi della classe mondiale si scontrano tra loro. Ma il problema si verifica quando i corpi si scontrano il metodo beginContact()
viene chiamato ogni volta ma il metodo endContact()
non viene chiamato ogni volta che i corpi perdono il contatto. Quindi, quali sono i possibili modi in cui possiamo rilevare il endContact()
ogni volta.EndContact di ContactListner (Box2d) non chiamato ogni volta in LibGDX
Il codice della classe di collisionDetection è la seguente:
public class CollisionDetection implements ContactListener {
static Fixture fixtureA;
static Fixture fixtureB;
public static boolean Colliding=false;
World world;
protected CollisionDetection(World world, long addr) {
this.world = world;
// TODO Auto-generated constructor stub
}
@Override
public void beginContact(Contact contact) {
// TODO Auto-generated method stub
fixtureA = contact.getFixtureA();
fixtureB = contact.getFixtureB();
Colliding=true;
}
@Override
public void endContact(Contact contact) {
// TODO Auto-generated method stub
Colliding=false;
}
@Override
public void preSolve(Contact contact, Manifold oldManifold) {
// TODO Auto-generated method stub
}
@Override
public void postSolve(Contact contact, ContactImpulse impulse) {
// TODO Auto-generated method stub
}
E World Class
collisionDet = new CollisionDetection(worldbox, 0);
worldbox.setContactListener(collisionDet);
Grazie
Sei sicuro che i corpi perdono contatto? Utilizzare Box2dDebugRenderer per verificare. –
Sì, stanno perdendo il contatto perché sto spostando un corpo (dinamico) con l'aiuto delle coordinate del TouchPad e quando il corpo attraversa un altro corpo (statico), 'endContact()' non viene chiamato ogni volta. –
Abbastanza giusto. Il motivo per cui ho suggerito di usare il renderer di debug è che disegna i corpi stessi, piuttosto che qualsiasi cosa tu possa disegnare che potrebbe o meno corrispondere ai corpi. Inoltre, c'è qualche ragione per cui stai chiamando setEnabled (true) all'interno dei callback? –