在 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;

...其中selfSKScene

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

很遗憾,这并不能解决问题。

如何暂停 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 中控制视频的播放?

Sprite Kit:如何在运行场景之上添加场景

如何在 sprite kit 中引用多个同名的 sprite?

在 Sprite-Kit 中更改精灵图像

如何在Sprite-kit中画一条线

如何在 Sprite-kit 中画一条线