Java 如何检查两个Box2d实体是否随时发生碰撞/重叠?

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

如何检查两个实体(两个都有一个夹具)是否碰撞(重叠)

我知道ContactListener在开始碰撞和停止时会触发一个方法。但有没有办法在任何特定时刻检查它?比如:

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}