【问题标题】:How to check if two Box2d bodies collision / overlap at any moment?如何随时检查两个 Box2d 物体是否发生碰撞/重叠?
【发布时间】:2013-06-23 09:28:10
【问题描述】:

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

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

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

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

【问题讨论】:

标签: java android box2d libgdx


【解决方案1】:

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

所以:

if(body1.overlaps(body2)==true)
{collision=1}
else
{collision=0}

【讨论】:

  • 你连问题都没看懂
【解决方案2】:

您可以将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()方法将被调用。

希望这会有所帮助。

【讨论】:

  • 你没有理解/阅读我的问题,我知道 ContactListener。
  • 正如我所说,您可以获得正在碰撞的物体的用户数据,因此在两个物体的用户数据的帮助下,您可以获取布尔值或其他东西并在渲染中检查它,如果布尔值为真,然后做你的工作。在 endContact() 方法中为假。
  • 我不知道这是否是当前的错误,但 endContact 并不总是触发。
【解决方案3】:

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

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

         break;
     }
}

【讨论】:

  • 不要忘记检查,如果接触接触:ce->contact->IsTouching()。 AABB 重叠时创建的联系人。
  • 虽然我标记了 libgdx,但我忘了告诉。它在 libgdx 中,并且在 body u.u 中没有 getContactList 或其他方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多