如何等待所有小组行动?

时间:2015-09-22 14:11:46

标签: ios sprite-kit skaction

我不能等待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. 这是虫子吗?如果不是,SKAction文档中的位置我可以找到对此行为的解释。

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

1 个答案:

答案 0 :(得分:0)

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

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

来自Apple文档

  

SKAction.runAction:此动作有一个瞬时持续时间,   虽然对孩子执行的动作可能有其持续时间   自己的。

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
}