如何等待所有组动作?

How to wait for all group actions?

我等不及 SKAction 组了,因为完成处理程序会立即执行。这是基本示例:

let a1 = SKAction.runAction(SKAction.fadeAlphaTo(0.5, duration: duration), onChildWithName: child1.name!)
let a2 = SKAction.runAction(SKAction.fadeAlphaTo(1, duration: duration), onChildWithName: child2.name!)

runAction(SKAction.group([a1, a2]), completion: { () -> Void in
    // do something
})

节点 child1child2 是场景的子节点。当我在 iPhone 5s (iOS 8.4) 模拟器上 运行 应用程序时,我看到完成块不会等待组操作完成并立即开始。

所以我的两个问题:

  1. 是bug吗?如果不是,我可以在 SKAction 文档中找到对此行为的解释。

  2. 这个怎么做对?我知道我可以使用计数器并使用完成块启动每个操作 a1a2 并检查计数器何时变为 0 但它看起来像我的样板代码。

根据 Apple 的文档,SKAction.runAction returns 瞬时持续时间(即 0 持续时间)的动作。

因此在您的代码中 SKActionsa1a2 都具有瞬时持续时间。这就是立即调用完成块的原因。

来自 Apple 文档

SKAction.runAction : This action has an instantaneous duration, although the action executed on the child may have a duration of its own.

https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKAction_Ref/#//apple_ref/occ/clm/SKAction/runAction:onChildWithName:

设置完成处理程序的一种方法是将其设置为其中一个子节点,因为这两个操作具有相同的持续时间。

let a1 = SKAction.fadeAlphaTo(0.5, duration: 1);
let a2 = SKAction.fadeAlphaTo(1, duration: 1);

child1.runAction(a1)
child2.runAction(a2) { () -> Void in
    //completion code
}