SKAction在碰撞后迫使节点彼此穿过

时间:2015-11-20 06:46:45

标签: objective-c sprite-kit collision-detection skspritenode skaction

这个问题有点discussed here,但我想听听其他人对物理世界的经历,迫使节点无法预测地相互传递。

我正在使用SKAction移动一个节点。此节点需要以恒定速度在场景中滑动,直到达到某个位置。第二个节点通过重力下降,直到它接触到场景帧。

当两个节点发生碰撞时,我会假设下降的节点在重力作用下被抬起。相反,偶尔,第二节点重新定位在第一节点的相对侧。在didBeginContact中正确检测到碰撞。

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

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

1 个答案:

答案 0 :(得分:1)

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

如果你看一下SpriteKit中每个帧的处理方式,你会看到:

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

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

接触检测虽然有效。但不要混淆术语"联系"和"碰撞" 。即使您使用SKActions移动身体,联系人也会被正确地交叉。但是,碰撞可能无法正确模拟等。所以只要你对联系人感兴趣,你就可以去了。如果对任何物理模拟感兴趣,那么使用适当的方式与物理世界互动。