我有一个动态的快速运动(A)。它应该与另一个身体碰撞(b)。 A与B发生碰撞,但有时它会通过B身体B,而不会发生碰撞。这是完全随机的行为。我一定有那个碰撞。请随机指导为什么它会这样。

有帮助吗?

解决方案

一个物体通过一个时间步中的大动作而通过另一个对象的效果称为 隧道.

Box2D使用动态和动态之间的连续碰撞检测 静止的 目的解决此问题。但是,您的情况(动态与动态)并未自动处理,因此,如果您的对象在评估碰撞时碰巧处于碰撞位置,则只是随机掷骰子。

来自 Box2D手册:

通常,CCD在动态体之间不使用。这样做是为了使绩效保持合理。在某些游戏场景中,您需要动态的身体才能使用CCD。例如,您可能想在一堆动态砖块上拍摄高速子弹。没有CCD,子弹可能会穿过砖块。

Box2D中的快速移动对象可以标记为子弹。子弹将用静态和动态身体执行CCD。您应该根据您的游戏设计来确定哪些尸体应该是子弹。如果您认为应该将身体视为子弹,请使用以下设置。

BodyDef.bullet = true;

子弹标志仅影响动态体。

Box2D依次执行连续的碰撞,因此子弹可能会错过快速移动的身体。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top