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

时间:2012-06-16 09:24:32

标签: c++ box2d collision

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

通过默认 i - 检测碰撞和物体碰撞。

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

请帮忙!

2 个答案:

答案 0 :(得分:19)

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

答案 1 :(得分:8)

你想要的是身体上的传感器固定装置。从box2d手册:

  

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

     

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

     

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

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

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

这是有关如何开始使用传感器Ray Wenderlich sensor tutorial

的有用教程