Java 如何检查两个Box2d实体是否随时发生碰撞/重叠?
如何检查两个实体(两个都有一个夹具)是否碰撞(重叠) 我知道ContactListener在开始碰撞和停止时会触发一个方法。但有没有办法在任何特定时刻检查它?比如:Java 如何检查两个Box2d实体是否随时发生碰撞/重叠?,java,android,box2d,libgdx,Java,Android,Box2d,Libgdx,如何检查两个实体(两个都有一个夹具)是否碰撞(重叠) 我知道ContactListener在开始碰撞和停止时会触发一个方法。但有没有办法在任何特定时刻检查它?比如: if(body1.overlaps(body2))... 其他细节,其中之一是传感器。这在libgdx中。只需检查您要查找的联系人是否在联系人列表中: for (ContactEdge ce = body1.getContactList(); ce != null; ce = ce.next) { if (ce.othe
if(body1.overlaps(body2))...
其他细节,其中之一是传感器。这在libgdx中。只需检查您要查找的联系人是否在联系人列表中:
for (ContactEdge ce = body1.getContactList(); ce != null; ce = ce.next)
{
if (ce.other == body2 && ce.contact.isTouching())
{
// Do what you want here
break;
}
}
您可以将
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()
方法
希望这有帮助。您可以创建变量冲突:
当等于0时,碰撞等于false;
当等于1时,碰撞等于真
因此:
不要忘记检查触点是否接触:ce->contact->iTouch()。当AABB重叠时创建的联系人。虽然我标记了libgdx,但我忘了告诉你。它在libgdx中,body u中没有getContactList或其他方法。你没有理解/阅读我的问题,我知道ContactListener。正如我所说,你可以获得正在碰撞的body的用户数据,因此,在两个实体的用户数据的帮助下,您可以获取一个布尔值或其他值,并在渲染中检查它,如果该布尔值为真,则执行您的工作方法。我不知道目前这是否是一个bug,但endContact并不总是会触发。您甚至不理解与此相关的问题:完全在另一个体内:
if(body1.overlaps(body2)==true)
{collision=1}
else
{collision=0}