在 LibGDX box2D 中具有过滤器的机构之间使用联系人侦听器



我正在使用带有box2D的libGDX,我有两个具有碰撞过滤功能的物体,因此它们不会相互碰撞。

我正在为这些机构使用 groupIndex 过滤器,所以你可以想象。

但我想检测与接触侦听器的身体碰撞,即使它们不能相互碰撞。

有办法吗?

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

如果你能帮助我,谢谢!

使用联系人setEnabled方法。

在联系人侦听器中:

@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;

为它们应该碰撞的物体设置一些其他位。

希望有帮助。

最新更新