1

这是我的pause方法:

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

...在self哪里SKScene

我包含第二行的原因是我注意到当取消暂停时,我所有启用物理的节点都立即向前跳跃,就好像尽管场景暂停,物理仍然在后台继续运行。

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

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

4

1 回答 1

2

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

每帧只调用一次,只要场景呈现在视图中并且没有暂停

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

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

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

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

于 2014-04-07T23:24:30.973 回答