【问题标题】:Use a contact listener between bodies who has filter in LibGDX box2D在 LibGDX box2D 中具有过滤器的主体之间使用联系侦听器
【发布时间】:2019-04-18 13:29:55
【问题描述】:

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

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

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

有办法吗?

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

如果你能帮助我,谢谢!

【问题讨论】:

  • 感谢您的回复,但我无法将其设置为传感器,因为我不想仅仅在这两个身体之间发生碰撞。如果我放置传感器,身体不会与没有身体发生碰撞,我不希望那样。正如我所说,我只是想避免这两个机构之间的碰撞。没有别的了。

标签: java libgdx box2d collision


【解决方案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;

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

希望有所帮助。

【讨论】:

  • 哇!问题解决了!。让我看看我是否理解这个条件的作用,使用 preSolve 我检测哪种过滤器正在发生冲突。如果我没记错的话,我使用 categoryBits 和 maskBits 设置了应该相互碰撞的物体类型。我不确定,但是,将接触设置为 false,preSolve 检测到的两个主体夹具不应该发生碰撞,请告诉我是否适合。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多