9

你如何检查 2 个物体(两个都有 1 个夹具)是否碰撞(重叠)?

我知道当它们开始碰撞和停止时会触发方法的 ContactListener。但是有没有办法在任何给定的时刻检查它?喜欢:

if(body1.overlaps(body2))...

其他细节,其中之一是传感器。这是在 libgdx 中。

4

3 回答 3

5

您可以将其应用于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()获取有关身体的信息, 例如如果您想对它们做某事。当它们彼此分离时,将调用方法。contactcontact.getFixtureA().getBody().getUserData();EndContact()

希望这可以帮助。

于 2013-06-27T16:54:11.453 回答
2

只需检查您要查找的联系人是否在联系人列表中:

for (ContactEdge ce = body1.getContactList(); ce != null; ce = ce.next)
{
     if (ce.other == body2 && ce.contact.isTouching())
     {
         // Do what you want here

         break;
     }
}
于 2013-06-26T09:58:44.770 回答
-4

可以创建变量collision:当等于0时,collision等于false;当等于1时,碰撞为真;

所以:

if(body1.overlaps(body2)==true)
{collision=1}
else
{collision=0}
于 2017-12-22T03:28:21.780 回答