Ios 暂停精灵套件中的某些操作

Ios 暂停精灵套件中的某些操作,ios,xcode,ios7,sprite-kit,Ios,Xcode,Ios7,Sprite Kit,我最近开始开发我的第一款iPhone应用程序,它将是一款2D游戏。 到目前为止,一切进展顺利,该项目已经包含了一千多行代码 然而,我只是遇到了一个小问题。就像很多游戏一样,有必要暂停。我的第一次尝试是在代码中简单地使用它,在代码中必须发生暂停 self.view.paused = true; 工作正常,直到有人按下暂停按钮后我需要一些动画。想象一个新的精灵节点从屏幕底部向上滑动,其中包含一些关于当前分数等的细节。使用上面的代码,当然所有的动画都会停止 我的新想法是简单地停止所有必须单独停止的节

我最近开始开发我的第一款iPhone应用程序,它将是一款2D游戏。 到目前为止,一切进展顺利,该项目已经包含了一千多行代码

然而,我只是遇到了一个小问题。就像很多游戏一样,有必要暂停。我的第一次尝试是在代码中简单地使用它,在代码中必须发生暂停

self.view.paused = true;
工作正常,直到有人按下暂停按钮后我需要一些动画。想象一个新的精灵节点从屏幕底部向上滑动,其中包含一些关于当前分数等的细节。使用上面的代码,当然所有的动画都会停止

我的新想法是简单地停止所有必须单独停止的节点。我通过使用这段代码实现了这一点

[self enumerateChildNodesWithName:@"name" usingBlock:^(SKNode* node, BOOL* stop) {
            node.paused = true;
            node.speed = 0.0;
}];
尝试了几次跑步,当我遇到另一个问题时,我认为我终于找到了解决办法。游戏中需要停止的一些精灵节点会在一段时间后定期创建。以下代码对此行为负责

SKAction* createPeriodically = [SKAction repeatActionForever:[SKAction sequence:@[[SKAction performSelector:@selector(create) onTarget:self],[SKAction waitForDuration:15.0]]]];
[self runAction:createPeriodically];
如您所见,我使用waitForDuration在创建精灵节点之间有一个延迟。现在,当我暂停所有节点时,时间仍在继续,因此waitForDuration在设置的时间量之后完成,并且正在创建一个精灵节点,尽管所有其他节点都已暂停且未移动


我希望你们能理解我的问题。我正在寻找一种方法来暂停定期创建精灵节点的机制,同时仍然能够在之后创建新的精灵节点并对新节点执行操作。感谢您的帮助。谢谢。

如果在节点上设置了“暂停”,则会暂停节点及其子节点的所有操作。因此,您可以通过设置场景的
paused
属性来暂停整个场景中的所有动作(包括
createperiodic
),但随后您将回到暂停视图的相同场景中


但您可以利用节点及其子部分的这一点来组织场景。不要让组成游戏的所有节点都是场景的直接子节点,而是创建一个单独的节点来包含它们。不要在场景中全局运行影响游戏内容的操作(如
createperiodic
),而是在此单独的节点上运行它们。现在,当您想暂停游戏时,请在此节点上设置
暂停
——所有游戏内容动作都将暂停,但仍有空间在场景本身上运行动作或添加其他未暂停的节点作为场景的直接子节点。

啊,我明白了,非常感谢!我现在一定要试试。我还可以保留旧方法,即运行所有节点并分别暂停它们,然后在其中一个节点上运行
createperiodic
。我将尝试这两种方法,看看哪一种最适合。再次感谢。只是要小心暂停子节点,因为父精灵在其自身未暂停时会取消所有子节点的暂停。因此,当应用程序处于非活动状态或进入后台,然后未启动时,您会出现意外状态。您必须覆盖场景中的暂停或创建一个检查系统。@rickster谢谢,但我有一个问题。我已经像你建议的那样设置了“父”节点,所有我想暂停的节点都添加到其中,还有
SKFieldNode
,它负责对节点应用特殊力量。如果我只是在“父”节点上使用
paused
,游戏会暂停,但受
SKFieldNode
影响的节点不会停止。为了实现这一点,我不得不将
physicsWorld.speed
设置为0,这是我不想要的,因为它也会停止覆盖层中节点的物理,这不应该受到暂停游戏的影响。你对如何解决这个问题有什么建议吗?谢谢