【问题标题】:Fast moving bodies miss the collision sometimes in Box2d, AndEngine在 Box2d、AndEngine 中,快速移动的物体有时会错过碰撞
【发布时间】:2012-01-08 14:52:57
【问题描述】:

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

【问题讨论】:

  • 检查 Box2D 中的 CCD(连续碰撞检测)选项(如果有)。

标签: android box2d andengine


【解决方案1】:

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

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

来自Box2d Manual

通常动态物体之间不使用 CCD。这样做是为了保持 性能合理。在某些游戏场景中,您需要动态物体 使用CCD。例如,您可能想在 一堆动态砖。没有CCD,子弹可能会隧道 穿过砖块。

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

bodyDef.bullet = true;

子弹标志只影响动态物体。

Box2D 顺序执行连续碰撞,所以子弹可能会错过 快速移动的物体。

【讨论】:

  • 感谢 Paul,提供了一个很好的答案。嗯,我用过,上面提到的。它工作正常。我已经多次测试了我的应用程序,并且没有再次遇到问题。看来“子弹”是朝正确的方向发射的。 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多