如何等待所有组动作?
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
})
节点 child1
和 child2
是场景的子节点。当我在 iPhone 5s (iOS 8.4) 模拟器上 运行 应用程序时,我看到完成块不会等待组操作完成并立即开始。
所以我的两个问题:
是bug吗?如果不是,我可以在 SKAction
文档中找到对此行为的解释。
这个怎么做对?我知道我可以使用计数器并使用完成块启动每个操作 a1
和 a2
并检查计数器何时变为 0 但它看起来像我的样板代码。
根据 Apple 的文档,SKAction.runAction
returns 瞬时持续时间(即 0 持续时间)的动作。
因此在您的代码中 SKActions
、a1
和 a2
都具有瞬时持续时间。这就是立即调用完成块的原因。
来自 Apple 文档
SKAction.runAction
: This action has an instantaneous duration,
although the action executed on the child may have a duration of its
own.
设置完成处理程序的一种方法是将其设置为其中一个子节点,因为这两个操作具有相同的持续时间。
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
}
我等不及 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) 模拟器上 运行 应用程序时,我看到完成块不会等待组操作完成并立即开始。
所以我的两个问题:
是bug吗?如果不是,我可以在
SKAction
文档中找到对此行为的解释。这个怎么做对?我知道我可以使用计数器并使用完成块启动每个操作
a1
和a2
并检查计数器何时变为 0 但它看起来像我的样板代码。
根据 Apple 的文档,SKAction.runAction
returns 瞬时持续时间(即 0 持续时间)的动作。
因此在您的代码中 SKActions
、a1
和 a2
都具有瞬时持续时间。这就是立即调用完成块的原因。
来自 Apple 文档
SKAction.runAction
: This action has an instantaneous duration, although the action executed on the child may have a duration of its own.
设置完成处理程序的一种方法是将其设置为其中一个子节点,因为这两个操作具有相同的持续时间。
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
}