【发布时间】:2016-03-29 19:50:47
【问题描述】:
我的应用是一款 SpriteKit 游戏,具有应用状态保存和恢复功能。当应用程序状态被保留时,我当前SKScene 中的大部分节点都被编码了。
当运行SKAction 的节点被编码和解码时,动作将从头开始。这似乎是标准的SpriteKit 行为。
对我来说,这种行为对于SKAction sequence 最为明显。在解码时,序列重新开始,无论它的组件操作已经完成了多少。例如,假设运行序列的代码如下所示:
[self runAction:[SKAction sequence:@[ [SKAction fadeOutWithDuration:1.0],
[SKAction fadeInWithDuration:1.0],
[SKAction waitForDuration:10.0],
[SKAction removeFromParent] ]]];
如果在 10 秒等待期间保留应用程序状态,然后恢复,SKAction 序列将从头重新开始,并带有第二个可见的淡出和淡入。
SKAction sequence 应该显示与其他操作一致的解码行为是有道理的。但是,创建一个例外是有用的,这样任何已经完成的操作都不会再次运行。如何防止序列在解码后重新启动?
【问题讨论】:
-
除了在更多的模型视图控制器设计模式中处理这个之外,我不知道你是否能够实现你想要的。我怀疑 SKAction 实际上并不知道它有多远,因为场景决定了这一点。正如我所说的猜测。因此,保存时不会保存进度。如果您不使用 SKActions 而是在模型中保存/更新这些状态,您可以控制保存进度,但您必须在每个更新循环中更新精灵的状态。
-
你不能按照你的想法去做,但是你可以记录每个 SKAction 开始的时间,捕捉暂停时间,用它来确定你的动作还剩下多少时间,并且通过提高速度进行快进
-
谢谢@SkylerLauren 和@KnightOfDragon!根据进一步的实验,我编辑了问题以确认 所有 SKActions(不仅仅是序列)在解码时重新开始;显然,这是标准的。那么问题有两种解决方法:1)我们可以在解码时恢复部分完成的SKAction吗?或 2) 作为序列的特殊情况,我们能否让序列不重新运行任何已经完成的动作?您的 cmets 都可以处理 (1),这是一个更难的问题(可能太难了?),但我已将问题编辑为 (2)。我还有一些代码要展示。
标签: ios sprite-kit skaction uikit-state-preservation