在Sprite Kit中暂停SKPhysicsWorld

时间:2014-04-07 23:05:18

标签: sprite-kit skphysicsworld

这是我的pause方法:

- (void)togglePaused
{
    self.paused = !self.paused;
    self.physicsWorld.speed = !self.paused;
}

...其中selfSKScene

我加入第二行的原因是我注意到,在取消暂停时,所有启用物理功能的节点都会立即向前跳,就好像物理在后台继续运行,但场景暂停了。

不幸的是,这并没有解决问题。

如何暂停SKScene和SKPhysicsWorld,以便在取消暂停时,物理模拟从停止的地方开始?

1 个答案:

答案 0 :(得分:2)

事实证明第二行实际上没有必要。问题是didSimulatePhysics的文档不正确;它说:

  

每帧只调用一次,只要场景出现在视图中且未暂停

实际上,无论暂停状态如何,都会调用它。

因此,基本暂停方法是正确的。相反,如果您对物理模拟应用修改,例如我在每个更新周期,那么您应该首先检查暂停状态:

- (void)didSimulatePhysics
    if ( !self.paused ) {
        [parachute.physicsBody applyForce:CGVectorMake(0, 45) atPoint:CGPointMake(parachute.size.width/2, parachute.size.height)];
    }
}

(除非当然有更多的正典方法来应用连续物理,在这种情况下,不正确的文档仍然存在)