2017-10-17 48 views
0

我把几SKSpriteNode在SKSPriteNode阵列didMove(查看:SKView)使用SKSpriteNode在阵列更改图像

enumerateChildNodes(withName: "//*") { (node, stop) in 
    if let spriteNode = node as? SKSpriteNode{ 
      if let nodeName = node.name{ 
       if nodeName.hasSuffix("Button"){ 
        self.buttons.append(spriteNode) 

       } 
      } 
     } 
    } 

和现在使用的从我的NSCoding我想改变我的按钮图像

for node in self.buttons{ 
     if let name = node.name{ 
      if name.hasSuffix("Button"){ 
       let letter = name.replacingOccurrences(of: "Button", with: "", options: .regularExpression) 
       if let number = self.gameResult[letter]{ 
        switch number{ 
        case 1: 
         node = SKSpriteNode(imageNamed: "\(letter)Button-Bronze") 
        case 2: 
         node = SKSpriteNode(imageNamed: "\(letter)Button-Silver") 
        case 3: 
         node = SKSpriteNode(imageNamed: "\(letter)Button-Gold") 
        default: 
         node = SKSpriteNode(imageNamed: "\(letter)Button-Bronze") 
        } 
       } 
      } 
     } 
    } 
结果

看起来阵列中的所有节点都是let,我无法更改我的SKSpritNode按钮中的图像。

我该怎么做?

你能帮我吗?

回答

1

任何时候你枚举集合(for node in array等),用于枚举的属性自动为let。整个集合本身也是不可改变的,因为在列举集合的同时改变集合可能会产生无法预料的后果。

将节点复制到新数组,根据需要更改节点的属性,然后再交换数组。

有没有理由不能通过enumeratechildNodes(withName:更改节点的图像?

+0

谢谢。新阵列似乎是我的问题的超级解决方案。关于enumaratechildNodes我试过,但spriteNode为? SKSpriteNode也可以。你会如何做到这一点在enumarate?感谢你的帮助 – mamaz

+0

你可以把'var myNode = spriteNode'(假设'spriteNode'是枚举变量)给你自己一个可变的spritenode。 –

+0

令人惊叹!像魅力一样工作。超。非常感谢你 – mamaz