【发布时间】:2013-06-23 09:28:10
【问题描述】:
你如何检查 2 个物体(两个都有 1 个夹具)是否碰撞(重叠)?
我知道 ContactListener 在开始碰撞和停止时会触发一个方法。但是有没有办法在任何给定的时刻检查它?喜欢:
if(body1.overlaps(body2))...
其他细节,其中之一是传感器。这是在 libgdx 中。
【问题讨论】:
你如何检查 2 个物体(两个都有 1 个夹具)是否碰撞(重叠)?
我知道 ContactListener 在开始碰撞和停止时会触发一个方法。但是有没有办法在任何给定的时刻检查它?喜欢:
if(body1.overlaps(body2))...
其他细节,其中之一是传感器。这是在 libgdx 中。
【问题讨论】:
您可以创建变量碰撞: 当等于0时,碰撞等于假; 等于1时,碰撞为真;
所以:
if(body1.overlaps(body2)==true)
{collision=1}
else
{collision=0}
【讨论】:
您可以将setContactlistner 应用于您的世界对象,例如
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;
}
}
【讨论】: