如何检测身体是否与其他身体发生了碰撞但不对此碰撞做出反应。 默认情况下,我可以检测到碰撞并且身体会发生碰撞。 如果我设置fixtureDef过滤器,则身体不会发生碰撞,但我无法检测到碰撞。 请帮忙解决!
如果装置从未需要与任何东西碰撞,则可以将其设置为传感器。如果您需要它与某些东西发生碰撞,但不是其他东西,则可以在碰撞侦听器的PreSolve中根据其所碰撞的内容使用contact->SetEnabled(false)。
你需要的是身体上的传感器装置。从box2d手册中可以看到:有时游戏逻辑需要知道两个fixture何时重叠,但不应产生碰撞响应。这通过使用传感器来实现。传感器是一种检测碰撞但不产生响应的fixture。您可以将任何fixture标记为传感器。传感器可以是静态或动态的。请记住,每个body可能有多个fixture,并且可以具有任何混合的传感器和实体fixture。传感器不会生成接触点。有两种方法可以获取传感器的状态:1. b2Contact :: IsTouching 2. b2ContactListener :: BeginContact和EndContact您可以将fixture设置为传感器,然后将其写入contact listener中。如果fixture的sensor标志设置为true,则它将提供碰撞数据而不会在物理模拟碰撞(即允许您测试它与任何其他碰撞fixture之间的重叠)。这是一个关于如何开始使用传感器的有用教程 Ray Wenderlich传感器教程。