我尝试对 Sprite 数组运行一些 Action ,并且需要为 Sprite 按顺序运行这些 Action ,问题是当我使用 for 循环时它立即应用 Action 并且它们之间没有时间间隔.
func setColors() {
for color in boyColors {
color.run(.wait(forDuration: 0.3))
color.run(.fadeIn(withDuration: 0.5))
}
}
当调用这个函数时,它应该淡入颜色 在它们之间有一段时间的 boyColors 数组,但它在所有颜色中的淡入淡出一次
最佳答案
如果您希望所有 4 个在延迟后同时淡入:
func setColors() {
let seq = [SKAction.wait(forDuration: 0.3),SKAction.fadeIn(withDuration: 0.5)]
for color in boyColors {
color.run(SKAction.sequence(seq))
}
}
如果您需要它们按顺序淡入:
func setColors() {
var seq = [SKAction]()
let wait3 = SKAction.wait(forDuration: 0.3)
let wait5 = SKAction.wait(forDuration: 0.5)
let fadeIn = SKAction.fadeIn(withDuration: 0.5)
for color in boyColors {
let colorFadeIn = SKAction.run({color?.run(fadeIn)})
let group = [wait5,colorFadeIn]
seq.append(wait3)
seq.append(SKAction.group(group))
}
scene.run(SKAction.sequence(seq))
}
这样做的目的是让您的场景(或您想要触发 Action 的任何节点)控制淡入淡出事件何时开始。这假设所有节点都以相同的速度运行。如果你需要节点以单独的速度运行,你将需要更复杂的东西,比如 SomaMen 建议将你的下一个颜色 Action 链接到你当前颜色的末尾。在这方面,您还必须检查颜色是否存在,因为如果您执行像 RGBY 这样的链,并且删除 G,唯一会触发的颜色是 R。
关于swift - 如何对 Sprite 集合运行一个 Action ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56024079/