java - 在 LibGDX box2D 中具有过滤器的主体之间使用接触监听器

标签 java libgdx box2d collision

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

我正在对这些实体使用 groupIndex 过滤器,所以你可以想象。

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

有办法吗?

我没有放置任何代码,因为这是一个问题,我认为没有必要,至少现在......

如果您能帮助我,谢谢!

最佳答案

使用联系人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 是您 body 上不应发生碰撞的位,但 ContactListener 会捕获它们之间的接触,设置如下:

fixturedef.filter.categoryBits = GROUND_BIT;

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

希望有帮助。

关于java - 在 LibGDX box2D 中具有过滤器的主体之间使用接触监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55747109/

相关文章:

java - Hibernate 4 需要超过 1 分钟才能保留 80MB blob

ios - LIBGDX 游戏 iOS 版本中的所有图像资源是否都需要是 2 的倍数?

c++ - Box2D 不寻常的错误。为什么 +0 可以防止错误?

java - 从 JSOUP 解析的 HTML 中删除转义文本

java - 使用方法引用来调用静态方法

java - 获取实际触摸位置 LibGDX

Libgdx获取3D模型对象2D屏幕位置

mouse - Box2d:无惯性延迟的鼠标关节

box2d - 使用 Box2D 模拟门户

java - GridBagLayout 组件的位置不起作用