Jestem nowy w Box2D i próbuje wdrożyć go w libgdx Game. To, co chcę zrobić, to wykryć kolizję między różnymi ciałami. Tak, zrobiłem wykrywanie kolizji klasy i wdrożenia ContactListener
w nim, co dało mi 4 metody przesłonięte tj beginContact()
i endContact()
którym mam do czynienia. Również jestem przechodzącej przedmiot wykrywanie kolizji klasy w world.setcontactListner(collisionDet)
przez który Zastępowana metody klasy wykrywanie kolizji zostanie wywołana, gdy organy w klasie światowej zderzają się ze sobą. Ale problem ma miejsce, gdy organy zderzają beginContact()
metoda jest wywoływana za każdym razem, ale endContact()
metoda nie jest wywoływana za każdym razem, kiedy organy stracił contact.So, jakie są możliwe sposoby możemy wykrywają endContact()
razem.EndContact z ContactListner (box2d) nie jest wywoływana za każdym razem w libgdx
Kod klasy wykrywanie kolizji jest następująca:
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
}
A World Class
collisionDet = new CollisionDetection(worldbox, 0);
worldbox.setContactListener(collisionDet);
Dzięki
Czy jesteś pewien, że ciała tracą kontakt? Użyj Box2dDebugRenderer, aby sprawdzić. –
Tak, tracą kontakt bo ruszam jedno ciało (dynamiczny) z pomocą współrzędnych touchpad i gdy organizm przechodzi przez kolejne podmioty (statyczny), 'endContact()' nie jest nazywany spędzaj. –
Wystarczająco fair. Powodem, dla którego zasugerowałem użycie renderera debugowania, jest to, że rysuje on same ciała, a nie cokolwiek, co rysowałeś, co może, ale nie musi pasować do ciał. Czy istnieje jakiś powód, dla którego wywołujesz setEnabled (true) wewnątrz callbacków? –