我有一个动态的快速移动体(A)。它应该与另一个身体(B)发生碰撞。 A与B碰撞,但有时它会在没有碰撞的情况下通过B体。这是完全随机的行为。我必须有这种碰撞。请随意指导它为什么这样做。
答案 0 :(得分:8)
一个物体在一个时间步长内因大幅度移动而穿过另一个物体的效果称为隧道。
Box2D使用动态和静态对象之间的连续碰撞检测来解决此问题。但是,你的情况(动态v.s.动态)不是自动处理的,因此在碰撞被评估的确切时刻你的对象是否恰好处于碰撞位置只是一个随机骰子。
来自Box2d Manual:
通常情况下,动态物体之间不使用CCD。这样做是为了保持 表现合理。在某些游戏场景中,您需要动态的身体 使用CCD。例如,您可能想拍摄高速子弹 一堆动态砖。没有CCD,子弹可能会隧道 通过砖块。
Box2D中快速移动的物体可以标记为子弹。子弹会 用静态和动态物体执行CCD。你应该决定 什么身体应该是基于你的游戏设计的子弹。如果你决定 应将身体视为子弹,使用以下设置。
bodyDef.bullet = true;
子弹标志只影响动态物体。
Box2D按顺序执行连续碰撞,因此子弹可能会错过 快速移动的身体。