我对iOS上的原生编程很新。我的游戏场景中有一个函数可以移动SKSpriteNodes数组。每次移动完成后,应从场景中删除其节点。该函数还具有完成功能,应该在删除所有SKNode后调用。我的问题是,如果有一种更简洁的方法可以在moveAction的持续时间内添加一点额外的时间,直到调用完成函数(见下文)。我也玩过动作序列,但无法提出有效的解决方案......
每一个帮助都将受到赞赏!
func animateNodes(nodes: Array<SKSpriteNode>, completion:() -> ()) {
let duration = NSTimeInterval(0.5)
for (_, node) in nodes.enumerate() {
let point = CGPointMake(node.position.x - 80, node.position.y + 80)
let moveAction = SKAction.moveTo(point, duration: duration)
let fadeOutAction = SKAction.fadeAlphaTo(0, duration: duration)
node.runAction(SKAction.group([moveAction, fadeOutAction]), completion: {
node.removeFromParent()
})
}
runAction(SKAction.waitForDuration(duration + 0.1), completion:completion)
}
答案 0 :(得分:1)
添加一个变量count
,用于跟踪当前有多少节点存在。在每个节点的完成中,递减计数并检查它是否是最后一个(count == 0)
并运行完成操作,如果它是:
func animateNodes(nodes: Array<SKSpriteNode>, completion:() -> ()) {
var count = nodes.count
let duration = NSTimeInterval(0.5)
for (_, node) in nodes.enumerate() {
let point = CGPointMake(node.position.x - 80, node.position.y + 80)
let moveAction = SKAction.moveTo(point, duration: duration)
let fadeOutAction = SKAction.fadeAlphaTo(0, duration: duration)
node.runAction(SKAction.group([moveAction, fadeOutAction]), completion: {
node.removeFromParent()
count--
if count == 0 {
completion()
}
})
}
}
我没有编译或运行它,因此可能存在错误,但这应该有效