在LibGDX box2D中具有过滤器的物体之间使用接触侦听器

时间:2019-04-18 13:29:55

标签: java libgdx box2d collision

我将libGDX与box2D一起使用,并且我有两个具有碰撞过滤功能的物体,因此它们不会相互碰撞。

我正在为那些物体使用groupIndex过滤器,所以可以想像。

但是我想检测与接触听者的身体碰撞,即使他们无法相互碰撞。

有办法吗?。

我没有输入任何代码,因为这是一个问题,我认为没有必要,至少到目前为止。

如果可以帮助我,谢谢!。

1 个答案:

答案 0 :(得分:1)

使用联系人setEnabled方法。

在ContactListener中:

@Override // In preSolve method. Not beginContact, it matters
public void preSolve(Contact contact, Manifold manifold) {
       short firstBit = contact.getFixtureA().getFilterData().categoryBits;
       short secondBit = contact.getFixtureB().getFilterData().categoryBits;

       if ((firstBit | secondBit) == (BOX_BIT | GROUND_BIT)) {
            System.out.println("Contact " + firstBit + " " + secondBit);
            contact.setEnabled(false);
       }
  }

这些BOX_BITGROUND_BIT位是您身体上不应该碰撞的位,但是ContactListener会抓住它们之间的接触,将其设置为:

fixturedef.filter.categoryBits = GROUND_BIT;

为应该碰撞的物体设置其他位。

希望有帮助。