2013-04-05 3 views
6

저는 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);

감사

+0

시체와의 접촉이 확실한가요? Box2dDebugRenderer를 사용하여 확인하십시오. –

+0

예, TouchPad 좌표로 하나의 몸체 (동적)를 움직이기 때문에 접촉이 끊깁니다. 신체가 다른 몸체 (정적)를 지나갈 때마다 'endContact()'가 매번 호출되지 않습니다. –

+0

충분히 공정합니다. 내가 디버그 렌더러를 사용하도록 제안한 이유는 드로잉을 할 때 몸체와 일치하지 않을 수도있는 것보다는 몸체 자체를 드로잉한다는 것입니다. 또한 콜백 내부에서 setEnabled (true)를 호출하는 이유가 무엇입니까? –

답변

0

개체를 이동 setTranform()를 사용하고있을 수 있습니다 .. . Box2d는 set transform을 사용할 때 콜백을주지 않는다.

+0

아니요 body.setLinearVelocity()를 사용하여 이동합니다. –

+1

System.out.println ("endcontacr")을 사용하여 코드를 디버깅 했습니까? in endContact 내가 볼 수있는 부울 변수를 충돌로 정적 및 연락처 및 endcontact 시작 콜백을 줄 수 있지만 그것은 box2d의 동일한 단계주기에있을 수 있으므로 그것을 감지하지 못했습니다. system.out.println을 사용하여 디버깅 해보십시오. –