身体之间的碰撞问题取​​决于一个人的速度

时间:2016-11-21 19:33:53

标签: javascript three.js game-physics cannon.js

在我的世界里,我需要让球进入一个带有多个管子的管子。我通过创建多个盒子形状创建了一个管子,然后我移动并旋转以完成管子的巡视。到目前为止一切都很好。

我现在正在努力应对这些管子和一个球(一个基于单个球体形状的身体)之间的碰撞。根据我应用于球的速度,有时球只是穿过管子,就像没有身体一样。如果我应用较小的速度值,则碰撞按预期工作。

我尝试了许多修复,比如提高解算器的迭代次数,改变世界的步骤,改变contactMaterial的不同选项,但似乎没有任何效果。由于我对Cannon.js和物理引擎都很新,我想知道我是否只是错过了我的世界的特殊配置或类似的东西。

我根据three_fps示例创建了两个快速GIF来显示速度对碰撞的影响:

欢迎任何帮助!谢谢:))

2 个答案:

答案 0 :(得分:1)

详细了解隧道问题here。请注意,Cannon.js 具有连续碰撞检测(CCD),因此可能的修复方法是:

  • 使用较小的时间步,
  • 使管壁更厚,或
  • 保持shootVelo小。

答案 1 :(得分:0)

我认为这在很大程度上取决于计算碰撞的方式和方式。我不久前创建了一个小游戏,但我遇到了同样的问题。基本上解决方案是向对象的深度添加移动对象的当前位置差异(因此它将对象视为静止而另一个视为移动)。

这可以修复与非常薄的物体的碰撞,并且使用快速精灵,如果精灵快速(大位置增量),那么薄物体被认为是厚的,如果它很慢,它仍然很薄。

如果你想查看它的代码,可能很难解释。 https://github.com/Mc128k/SquaredBobble