2017-10-17 41 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