저는 box2d에서 새로 왔으며 LibGDX 게임에서이를 구현하려고합니다. 내가하고 싶은 것은 다양한 시체들 사이의 충돌을 감지하는 것입니다. 그래서 collisionDetection 클래스를 작성하여 ContactListener
을 구현합니다.이 메소드는 오버라이드 된 4 가지 메소드 즉, beginContact()
과 endContact()
을 처리해야합니다. 또한 나는 collisionDetection 클래스의 객체를 world.setcontactListner(collisionDet)
에 전달합니다.이 클래스를 통해 world 클래스의 바디가 서로 충돌 할 때 collisionDetection 클래스의 재정의 된 메소드가 호출됩니다. 그러나 시체가 충돌 할 때마다 문제가 발생하는 경우가 있습니다. endContact()
메서드는 시체가 접촉을 잃을 때마다 호출되지 않습니다. 따라서 언제든지 endContact()
을 감지 할 수있는 방법은 무엇입니까?ContactListner (Box2d)의 EndContact가 LibGDX에서 매번 호출되지 않음
collisionDetection 클래스의 코드는 다음과 같다 :
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
}
그리고 월드 클래스
collisionDet = new CollisionDetection(worldbox, 0);
worldbox.setContactListener(collisionDet);
감사
시체와의 접촉이 확실한가요? Box2dDebugRenderer를 사용하여 확인하십시오. –
예, TouchPad 좌표로 하나의 몸체 (동적)를 움직이기 때문에 접촉이 끊깁니다. 신체가 다른 몸체 (정적)를 지나갈 때마다 'endContact()'가 매번 호출되지 않습니다. –
충분히 공정합니다. 내가 디버그 렌더러를 사용하도록 제안한 이유는 드로잉을 할 때 몸체와 일치하지 않을 수도있는 것보다는 몸체 자체를 드로잉한다는 것입니다. 또한 콜백 내부에서 setEnabled (true)를 호출하는 이유가 무엇입니까? –