2016-11-15 16 views
0

我需要將某種選擇器或活動類添加到SKSpriteNode。因此,當用戶點擊其中一個SKSpriteNode時,它會告訴用戶將其Texture設置爲選定的圖像,但也會告訴其他人爲未選擇的圖像。按下時將選擇器添加到SKSpriteNode

下面是我的觸摸功能,當選擇SKSpriteNode時,它將紋理設置爲選定的圖像「1選擇」。說字符1被按下我需要告訴字符2,3,4,x將圖像設置爲「1未選擇」。要做到這一點

 if Character1.contains(location) { 

      Character1.texture = SKTexture(imageNamed: "1-selected") 
      run(ButtonPressed) 

     } 

     if Character2.contains(location) { 

      Character2.texture = SKTexture(imageNamed: "2-selected") 
      run(ButtonPressed) 

     }` 
+0

你將需要某種形式的所有你的精靈(即數組)的集合,你將循環並將圖像設置爲none爲每個精靈 –

回答

0

一種方法是將有一組或陣列中的所有精靈,一旦有人按下了按鈕,遍歷這個數組並運行每個精靈要執行的操作,同時篩選出一個剛剛感動。這也意味着,一旦你的遊戲完成,你應該注意從陣列中添加和移除這些精靈來保留這些內存。

var mySpriteArray = [Sprite1, Sprite2, Sprite3] 

if Character1.contains(location) { 

     Character1.texture = SKTexture(imageNamed: "1-selected") 
     for loopSprite in mySpirteArray{ 
     if (loopSprite != Character1){ 
loopSprite.texture = "1-not-selected.png" 
} 

     }} 

你甚至可以擴展這個讓你for循環的每個字符做了,看看它是否包含你的位置,所以你不必如果做一個聲明爲每個字符(即如果character1.contains (位置),如果是char2,如果是char3等)。

+0

謝謝我會試試看看會發生什麼 –

+0

這很好,但工作每個角色都有不同的未選擇圖像。所以1會有1個非選擇,2個會有2個非選擇等等。對此有什麼想法? –

+0

每個SKSpriteNode都有一個名稱變量,當你第一次初始化它們時,在每一個變量上設置名字變量,然後在設置紋理時把它作爲字符串傳遞。所以它會像... loopSprite.texture =「\(loopSprite.name)-not-selected.png」。如果您收到意想不到的結果,您應該嘗試在控制檯中打印出來 – DreamerNo56