2017-10-17 23 views
0

に私は(ビューへ:SKView)didMoveでSKSPriteNodeアレイで数SKSpriteNodeを入れて、私は私のボタン画像SKSpriteNodeが配列変化画像

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") 
        } 
       } 
      } 
     } 
    } 
を変更たい

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からの結果を使用してを使用して

arrayのすべてのノードがletで、私のSKSpritNodeボタンの画像を変更できないようです。

どうすればいいですか?

私を助けてもらえますか?

答えて

1

コレクション(for node in arrayなど)を列挙するたびに、列挙に使用されるプロパティは自動的にletになります。コレクション全体を列挙しながらコレクションを変更すると予期しない結果が生じる可能性があるため、コレクション全体も不変です。

ノードを新しいアレイにコピーし、必要に応じてノードのプロパティを変更し、その後にアレイをスワップします。

enumeratechildNodes(withName:でノードの画像を変更できないのはなぜですか?

+0

ありがとうございます。新しい配列は私の問題のためのスーパーソリューションのようです。 enumarateildについてはspriteNodeを試しましたか? SKSpriteNodeも同様です。あなたはenumarateでそれをどうやってやるの?すべての助けてくれてありがとう – mamaz

+0

'var myNode = spriteNode'(' spriteNode'が列挙変数であると仮定します)のようなものを入れて、自分自身に可変なスプライトノードを与えることができます。 –

+0

すごい!魅力のように働く。スーパー。どうもありがとうございました – mamaz

関連する問題