如何检查两个带有一个 Fixture 的物体是否发生碰撞(重叠)?
我知道可以使用 ContactListener,当它们开始碰撞和停止碰撞时会触发一个方法。但是有没有一种方法在任何给定的时刻检查它们是否发生碰撞?例如:
if(body1.overlaps(body2))...
附加细节之一是传感器。这在libgdx中。
如何检查两个带有一个 Fixture 的物体是否发生碰撞(重叠)?
我知道可以使用 ContactListener,当它们开始碰撞和停止碰撞时会触发一个方法。但是有没有一种方法在任何给定的时刻检查它们是否发生碰撞?例如:
if(body1.overlaps(body2))...
附加细节之一是传感器。这在libgdx中。
您可以将 setContactlistener
应用于您的世界对象,如下:
world.setContactListener(new ContactListener() {
@Override
public void beginContact(Contact contact) {
if(contact.getfixtureA.getBody().getUserData()=="body1"&&
contact.getfixtureB.getBody().getUserData()=="body2")
Colliding = true;
System.out.println("Contact detected");
}
@Override
public void endContact(Contact contact) {
Colliding = false;
System.out.println("Contact removed");
}
@Override
public void postSolve(Contact arg0, ContactImpulse arg1) {
// TODO Auto-generated method stub
}
@Override
public void preSolve(Contact arg0, Manifold arg1) {
// TODO Auto-generated method stub
}
});
beginContact()
方法在任何物体重叠或接触其他物体时都会调用。您还可以通过contact
对象获取有关物体的信息,例如contact.getFixtureA().getBody().getUserData()
,如果您想对它们进行一些操作。当它们相互分离时,将调用EndContact()
方法。希望这有所帮助。只需检查您要查找的联系人是否在联系人列表中:
for (ContactEdge ce = body1.getContactList(); ce != null; ce = ce.next)
{
if (ce.other == body2 && ce.contact.isTouching())
{
// Do what you want here
break;
}
}
if(body1.overlaps(body2)==true)
{collision=1}
else
{collision=0}