我不能等待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
})
节点child1
和child2
是场景的子节点。当我在iPhone 5s(iOS 8.4)模拟器上运行应用程序时,我看到完成块不会在组操作完成并立即启动时等待。
所以我的两个问题:
这是虫子吗?如果不是,SKAction
文档中的位置我可以找到对此行为的解释。
如何做到这一点?我知道我可以使用计数器并使用完成块启动每个操作a1
和a2
,只检查计数器何时变为0但它看起来像是一个样板代码。
答案 0 :(得分:0)
根据Apple的文档,SKAction.runAction
返回瞬时持续时间(持续时间为0)的动作。
因此,在您的代码中,SKActions
,a1
和a2
都有即时持续时间。这就是立即调用完成块的原因。
来自Apple文档
SKAction.runAction
:此动作有一个瞬时持续时间, 虽然对孩子执行的动作可能有其持续时间 自己的。
设置完成处理程序的一种方法是将其设置为其中一个子节点,因为两个操作的持续时间相同。
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
}