如何在box2d中检测碰撞但不碰撞?

B.S*_*.S. 12 c++ collision box2d

如何检测身体是否与其他身体发生碰撞但对此碰撞没有反应.

通过默认的 I -碰撞检测和机构碰撞.

如果我设置fixtureDef过滤器 - 主体不会发生碰撞,但我无法检测到碰撞.

请帮忙!

ifo*_*e2d 19

如果灯具永远不需要与任何东西发生碰撞,那么就可以将它变成传感器.如果你需要它与某些东西碰撞而不是其他东西你可以在碰撞监听器的PreSolve中联系 - > SetEnabled(false),具体取决于它碰撞的内容.


Emm*_*ler 8

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

有时候游戏逻辑需要知道两个灯具何时重叠但是应该没有碰撞响应.这是通过使用传感器完成的.传感器是检测碰撞但不产生响应的夹具.

您可以将任何夹具标记为传感器.传感器可以是静态的或动态的.请记住,每个身体可能有多个固定装置,您可以将传感器和固定装置混合在一起.

传感器不会生成接触点.有两种方法可以获得传感器的状态:

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

您可以将夹具设置为传感器,然后将其写入您的联系人监听器.如果夹具的传感器标志设置为true,它将提供碰撞数据而无需物理模拟碰撞(即允许您测试任何其他碰撞夹具之间的重叠).

这是一个有用的教程,介绍如何开始使用传感器Ray Wenderlich传感器教程