Javascript 物体之间的碰撞问题取决于物体的速度

Javascript 物体之间的碰撞问题取决于物体的速度,javascript,three.js,game-physics,cannon.js,Javascript,Three.js,Game Physics,Cannon.js,我需要让一个球进入我的世界里有多个管子的管子。我通过创建多个长方体形状创建了一个管,然后移动和旋转这些长方体以完成管的漫游。到目前为止还不错 我现在正在努力解决这些管子和一个球(一个基于单个球体形状的物体)之间的碰撞问题。根据我对球施加的速度,有时球只是穿过管子,就像没有物体一样。如果应用较小的“速度”值,碰撞将按预期进行 我尝试了很多修复方法,比如提高解算器的迭代次数,改变世界的步长,改变contactMaterial的不同选项,但似乎没有任何效果。一般来说,我对Cannon.js和physi

我需要让一个球进入我的世界里有多个管子的管子。我通过创建多个长方体形状创建了一个管,然后移动和旋转这些长方体以完成管的漫游。到目前为止还不错

我现在正在努力解决这些管子和一个球(一个基于单个球体形状的物体)之间的碰撞问题。根据我对球施加的速度,有时球只是穿过管子,就像没有物体一样。如果应用较小的“速度”值,碰撞将按预期进行

我尝试了很多修复方法,比如提高解算器的迭代次数,改变世界的步长,改变contactMaterial的不同选项,但似乎没有任何效果。一般来说,我对Cannon.js和physic引擎还比较陌生,我想知道我是否只是缺少了我的世界的一个特殊配置或类似的配置

我创建了两个快速GIF,以显示基于三个fps示例的碰撞速度影响:

  • 10点时用shootVelo:

  • 60岁的shootVelo:


欢迎任何帮助!谢谢:)

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

这修复了与非常薄的对象以及快速精灵的碰撞,如果精灵速度快(大位置增量),则薄对象被视为厚对象,如果速度慢,则保持薄对象

这可能很难解释,如果你想查看代码,它就在这里。
阅读有关隧道问题的更多信息。请注意,Cannon.js没有连续碰撞检测(CCD),因此可能的修复方法有:

  • 使用较小的时间步长
  • 使管壁变厚,或
  • 把枪放小