快速移动的机体有时会在Box2d,AndEngine中错过碰撞

Kha*_*war 4 android box2d andengine

我有一个动态的快速移动体(A).它应该与另一个身体(B)发生碰撞.A与B碰撞,但有时它会在没有碰撞的情况下通过B体.这是完全随机的行为.我必须有这种碰撞.请随意指导它为什么这样做.

Pau*_*Jan 8

由于在单个时间步长中的大运动,一个物体穿过另一个物体的效果被称为隧道效应.

Box2D使用动态和静态对象之间的连续碰撞检测来解决此问题.但是,您的情况(动态与动态)不会自动处理,因此在碰撞评估的确切时刻,您的对象是否恰好处于碰撞位置,这只是一个随机骰子.

来自Box2d手册:

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

Box2D中的快速移动物体可以标记为子弹.子弹将使用静态和动态物体执行CCD.你应该根据你的游戏设计决定哪些机构应该是子弹.如果您决定将身体视为子弹,请使用以下设置.

bodyDef.bullet = true;

子弹标志仅影响动态物体.

Box2D按顺序执行连续碰撞,因此子弹可能会错过快速移动的物体.