在 Sprite Kit 中暂停 SKPhysicsWorld
Posted
技术标签:
【中文标题】在 Sprite Kit 中暂停 SKPhysicsWorld【英文标题】:Pause SKPhysicsWorld in Sprite Kit 【发布时间】:2014-04-07 23:05:17 【问题描述】:这是我的pause
方法:
- (void)togglePaused
self.paused = !self.paused;
self.physicsWorld.speed = !self.paused;
...其中self
是SKScene
。
我包含第二行的原因是我注意到当取消暂停时,我所有启用物理的节点都立即向前跳跃,就好像尽管场景暂停,物理仍然在后台继续运行。
很遗憾,这并不能解决问题。
如何暂停 SKScene 和 SKPhysicsWorld,以便在取消暂停后,物理模拟从中断的地方开始?
【问题讨论】:
链接的答案***.com/questions/21593198/… 表明第二行甚至不是必需的,但根据我的经验,情况并非如此。 【参考方案1】:事实证明第二行实际上是不必要的。问题是didSimulatePhysics
的文档不正确;它指出:
每帧只调用一次,只要场景显示在视图中并且没有暂停
实际上,无论暂停状态如何,都会调用它。
因此,基本的暂停方法是正确的。相反,如果您正在对物理模拟应用修改,例如我在每个更新周期中,那么您应该首先检查暂停状态,如下所示:
- (void)didSimulatePhysics
if ( !self.paused )
[parachute.physicsBody applyForce:CGVectorMake(0, 45) atPoint:CGPointMake(parachute.size.width/2, parachute.size.height)];
(当然,除非有更规范的方法来应用连续物理学,在这种情况下,不正确的文档仍然存在)
【讨论】:
以上是关于在 Sprite Kit 中暂停 SKPhysicsWorld的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iOS Sprite Kit SKVideoNode 中控制视频的播放?