swift - 如何对 Sprite 集合运行一个 Action ?

标签 swift sprite-kit

我尝试对 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/

相关文章:

ios - 相互交换 Sprite 位置

ios - 在 spritekit 中保存锁定和解锁的游戏关卡

ios - 在 tableview 单元格上执行 segue 时出现问题

swift - 如何在 swift 3 中使用 NSMutableArray 中的键删除 NSMutableDictionary

ios - 在 Xcode SpriteKit 中,使用 Swift 在一个方向上展开 SKSpritenode

ios - SpriteKit 中的 SKVideoNode 问题,模拟器只显示灰屏

ios - 错误 : init(type:style) is unavailable PKPaymentButton creation error in Swift 4

swift - 使用 MQTT 实现离线聊天

ios - 在尝试从 tableView 中分离出来时发现 nil

ios - SpriteKit Swift 中的 NSInvalidArgumentException