【发布时间】:2012-01-08 14:52:57
【问题描述】:
我有一个快速移动的身体 (A),它是动态的。它应该与另一个 Body(B) 发生碰撞。 A 与 B 发生碰撞,但有时它会通过 Body B 而不会发生碰撞。这是完全随机的行为。我一定有那个碰撞。请指导它为什么会这样,随机的。
【问题讨论】:
-
检查 Box2D 中的 CCD(连续碰撞检测)选项(如果有)。
我有一个快速移动的身体 (A),它是动态的。它应该与另一个 Body(B) 发生碰撞。 A 与 B 发生碰撞,但有时它会通过 Body B 而不会发生碰撞。这是完全随机的行为。我一定有那个碰撞。请指导它为什么会这样,随机的。
【问题讨论】:
一个物体由于在单个时间步长内的大运动而穿过另一个物体的效果称为隧道效应。
Box2D 使用动态和静态 对象之间的连续碰撞检测来解决这个问题。但是,您的情况(动态与动态)不会自动处理,因此无论您的对象在评估碰撞的确切时刻是否恰好处于碰撞位置,这只是随机掷骰子。
来自Box2d Manual:
通常动态物体之间不使用 CCD。这样做是为了保持 性能合理。在某些游戏场景中,您需要动态物体 使用CCD。例如,您可能想在 一堆动态砖。没有CCD,子弹可能会隧道 穿过砖块。
Box2D 中快速移动的对象可以标记为子弹。子弹会 对静态和动态物体执行 CCD。你应该决定 根据您的游戏设计,哪些身体应该是子弹。如果你决定 身体应该被视为子弹,使用以下设置。
bodyDef.bullet = true;
子弹标志只影响动态物体。
Box2D 顺序执行连续碰撞,所以子弹可能会错过 快速移动的物体。
【讨论】: