如何使用Swift更改SpriteKit中特定名称的所有节点的颜色

时间:2016-01-09 21:24:42

标签: swift sprite-kit

我正在尝试更改SpriteKit中每个节点实例的颜色。当我尝试将它放在更新方法中时,它只会更改一个而不是全部。

override func update(currentTime: CFTimeInterval) {
    if changeColor {
        self.enumerateChildNodesWithName("blocks", usingBlock: { node, stop in
            block?.color = UIColor.orangeColor()
        })
    }
}

1 个答案:

答案 0 :(得分:4)

我认为您应该更改node的颜色,而不是某些block变量的颜色。您将检索具有该名称的所有SKNode。但是那些节点没有颜色属性。只有一些子类,例如SKSpriteNode具有color属性。因此,您必须添加一些额外的逻辑来更改颜色。例如,您可以尝试将node转换为SKSpriteNode,然后才能更改color

self.enumerateChildNodesWithName("blocks", usingBlock: { node, stop in
    if let sprite = node as? SKSpriteNode {
        sprite.color = UIColor.orangeColor()
    }
})

正如@appzYourLife正确提到的那样,代码可以简化/加速到

self.enumerateChildNodesWithName("blocks") { node, stop in
    if let sprite = node as? SKSpriteNode {
        sprite.color = .orangeColor()
    }
}