这是我的pause
方法:
- (void)togglePaused
{
self.paused = !self.paused;
self.physicsWorld.speed = !self.paused;
}
...其中self
是SKScene
。
我加入第二行的原因是我注意到,在取消暂停时,所有启用物理功能的节点都会立即向前跳,就好像物理在后台继续运行,但场景暂停了。
不幸的是,这并没有解决问题。
如何暂停SKScene和SKPhysicsWorld,以便在取消暂停时,物理模拟从停止的地方开始?
答案 0 :(得分:2)
事实证明第二行实际上没有必要。问题是didSimulatePhysics
的文档不正确;它说:
每帧只调用一次,只要场景出现在视图中且未暂停
实际上,无论暂停状态如何,都会调用它。
因此,基本暂停方法是正确的。相反,如果您对物理模拟应用修改,例如我在每个更新周期,那么您应该首先检查暂停状态:
- (void)didSimulatePhysics
if ( !self.paused ) {
[parachute.physicsBody applyForce:CGVectorMake(0, 45) atPoint:CGPointMake(parachute.size.width/2, parachute.size.height)];
}
}
(除非当然有更多的正典方法来应用连续物理,在这种情况下,不正确的文档仍然存在)