【问题标题】:How to detect collision but do not collide in box2d?如何在box2d中检测碰撞但不碰撞?
【发布时间】:2012-06-19 04:58:13
【问题描述】:

如何检测身体是否与其他身体发生碰撞但不对碰撞做出反应。

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

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

请帮忙!

【问题讨论】:

    标签: c++ box2d collision


    【解决方案1】:

    如果夹具永远不需要与任何物体发生碰撞,您可以将其设为传感器。如果您需要它与某些事物而不是其他事物发生碰撞,您可以在碰撞侦听器的 PreSolve 中执行 contact->SetEnabled(false),具体取决于它与什么碰撞。

    【讨论】:

    • 附录:除了使用 PreSolve,您还可以使用碰撞掩码和/或碰撞组来控制夹具应该和不应该碰撞的对象。
    • 他仍然想检测碰撞何时发生,他只是不想要任何碰撞响应。更改碰撞掩码将完全阻止碰撞检测。
    • 是的。这需要与传感器固定装置相结合。
    【解决方案2】:

    您需要的是身体上的传感器固定装置。来自 box2d 手册:

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

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

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

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

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

    这是一个关于如何开始使用传感器的有用教程Ray Wenderlich sensor tutorial

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多