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

如何使用Swift更改SpriteKit中特定名称的所有节点的颜色,swift,sprite-kit,Swift,Sprite Kit,我正在尝试更改SpriteKit中每个节点实例的颜色。当我尝试将其放在update方法中时,它只更改其中一个,而不是全部 override func update(currentTime: CFTimeInterval) { if changeColor { self.enumerateChildNodesWithName("blocks", usingBlock: { node, stop in block?.color = UIColor.or

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

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

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

正如@appzyorlife正确地提到的,代码可以简化/快速简化

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

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

正如@appzyorlife正确地提到的,代码可以简化/快速简化

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

对我来说还是太快了!我只需要再花一分钟来完成我自己的回答:调整一些非常微小的改进。1在颜色指定中,可以省略UIColor部分sprite.color=.orangeColor。2您也可以使用尾随闭包语法从代码中删除更多的单词。@appzyorlife谢谢您的评论,我包括了它。对我来说还是太快了!我只需要再花一分钟来完成我自己的回答:调整一些非常微小的改进。1在颜色指定中,可以省略UIColor部分sprite.color=.orangeColor。2您也可以使用尾随闭包语法从代码中删除更多的单词。@appzyorlife谢谢您的评论,我包括了它。