2016-11-21 24 views
2

我需要在我的世界中使球进入一个带有多个管的管。我通过创建多个盒子形状来创建一个管子,然后我移动并旋转以完成管子的巡视。到现在为止还挺好。根据一个人的速度在身体之间碰撞的问题

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

我尝试了许多修复方法,例如提高求解器的迭代次数,改变世界的步骤,改变contactMaterial的不同选项,但似乎没有任何工作。由于我对Cannon.js和物理引擎一般都比较陌生,所以我想知道我是否错过了我的世界的特殊配置或类似的东西。

我创建两个快速的GIF显示基于所述three_fps示例速度影响的碰撞:

欢迎任何帮助!谢谢:)

回答

0

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

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

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

1

了解更多关于隧道问题的信息here。需要注意的是Cannon.js不已经连续碰撞检测(CCD),因此可能的修补程序是:

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