2012-06-16 102 views
12

如何检测身体是否碰撞其他身体,但不会对此碰撞做出反应。如何检测碰撞,但不会在box2d中碰撞?

通过默认我 - 检测碰撞和车身碰撞。

如果我设置了fixtureDef过滤器 - 物体不会相互碰撞,但我无法检测到碰撞。

请帮忙!

+3

尝试阅读有关传感器的更多信息http://www.box2d.org/manual.html – Cyclonecode

回答

18

如果夹具永远不需要与任何物体碰撞,您可以将其制成传感器。如果您需要它碰撞某些事物,但不碰其他人,则可以在碰撞监听器的PreSolve中进行联系 - > SetEnabled(false),具体取决于它碰撞的内容。

+0

附录:您也可以使用碰撞掩码和/或碰撞组来控制夹具应该也不应该碰撞。 – Thomas

+0

他仍然想要检测碰撞发生时,他只是不想要任何碰撞响应。更改碰撞掩码将完全防止碰撞检测。 – iforce2d

+0

是的。这需要与传感器灯具结合使用。 – Thomas

8

你想要的是一个身体上的传感器夹具。从box2d手册:

有时游戏逻辑需要知道两个固定装置重叠的时间,但应该没有碰撞响应。这是通过使用传感器完成的。传感器是检测碰撞但不产生响应的固定装置。

您可以将任何灯具标记为传感器。传感器可能是静态的或动态的。请记住,你可能有多个固定装置,你可以有任何混合的传感器和固体装置。

传感器不生成接触点。有两种方法可以得到一个传感器的状态:

  1. b2Contact :: IsTouching
  2. b2ContactListener :: BeginContact和EndContact

您可以设置一个固定的传感器,然后写它进入你的联系监听器。如果夹具的传感器标志设置为真,它将提供碰撞数据,而不物理模拟碰撞(即,允许您测试任何其他碰撞夹具之间的重叠)。

这是一个有用的教程,开始使用传感器Ray Wenderlich sensor tutorial