将多个节点分组以进行操作,并在完成后通知

时间:2014-08-31 12:00:18

标签: swift sprite-kit grouping skaction

我有一些孩子的SKNode。对于这些孩子,我想应用应该同时开始的动作(示例代码,k1000ms是常数):

let children = self.children        
for var i=0; i<children.count; i++ {
  children[i].runAction(SKAction.moveTo(CGPoint(x: 0.0, y: 0.), duration: k1000ms))
}

我不知道迭代需要多长时间,因此对于大量儿童的启动操作可能会导致第一次和最后一次启动操作之间的延迟。 该解决方案显然首先将操作应用于所有节点,然后通过单个调用启动操作(希望操作系统负责正确的同步,但这是另一个问题)。

问题1:如何将操作首先应用于所有节点,然后立即启动所有节点?

问题2:如何通知所有行动?

1 个答案:

答案 0 :(得分:3)

1:你不能也不需要。在具有相同持续时间的相同帧中开始(运行)的所有动作将在同一帧中结束。你的整个for循环是在一个帧中执行的(除非你是多线程的)。 The next frame won't process (evaluate) actions and render until your for loop has ended.

enter image description here

2:使用sequence操作runblock操作作为最后一个操作,或使用completion block