SKAction 在碰撞后强制节点相互通过

SKAction forces nodes through each other after collision

这个问题有点 discussed here,但我想听听其他人对物理世界迫使节点不可预测地相互通过的经验。

我正在使用 SKAction 移动一个节点。这个节点需要在场景中匀速滑动,直到到达某个位置。第二个节点通过重力下落,直到它接触到场景框架。

当两个节点发生碰撞时,我会假设下落的节点是克服重力被抬起的。相反,有时,第二个节点会重新定位在第一个节点的另一侧。在 didBeginContact 中正确检测到碰撞。

这似乎取决于 SKAction 的速度。如果我减慢使第一个节点滑动 20% 的 SKAction,碰撞将按预期提升第二个节点。

解决此类行为的最佳方法是什么?

link 中的一切都得到了很好的解释。如果您对物理模拟感兴趣,唯一认可的方法是通过施加力或脉冲,或通过直接改变速度矢量来移动所有物体。

如果您查看 SpriteKit 中每一帧的处理方式,您会发现:

  • 首先执行操作
  • 物理在
  • 之后模拟

因此,如果您手动移动节点,则不会让物理模拟将其移动到它认为合适的位置。您正在使 object 与实际物理模拟不同步。此外,这样,节点将被动作和物理引擎移动,从而产生意想不到的结果。

不过接触检测会起作用。但不要混淆术语 "contact" 和 "collision" 。即使您使用 SKActions 移动身体,接触也会被正确触发。但是,碰撞可能无法正确模拟等。因此,只要您对联系人感兴趣,就可以开始了。如果对任何类型的物理模拟感兴趣,请使用适当的方式与物理世界进行交互。