2016-10-17 65 views
1

我在做複雜的按鈕,與各國和動畫狀態之間,並且循環「吸引」的動畫。由於陰影,高光,發光和內部視覺變化的性質,按鈕非常複雜。子類SKNode,或SKSpriteNode複雜的按鈕

每個按鈕都有多個用於繪製和動畫的SKSpriteNodes,多個SKLabelNodes和多個SKEffectNodes,以及基於自己和其他人的狀態在狀態之間轉換的動作以及自我觸摸事件。

目前這些按鈕是從SKSpriteNode子建,並實例化。

但它發生,我我可能會做這個「錯誤」的,而我應該繼承的SKNode代替。

什麼是堆疊元素融入SKNode在像上述情況的子類VS SKSpriteNode的優勢和劣勢?

回答

1

SKNode定義根據:

的SKNode類不執行任何自己的圖紙。

我很同意認爲這是更好地使用SKSpriteNode作爲一個按鈕的一個子類,因爲那裏也可能是在自定義按鈕的初始化方法大的優勢,這可以成爲創建一個按鈕時非常舒適。 我寫一些代碼,使一個例子:

class CoolButton: SKSpriteNode { 

    var isEnabled: Bool = true { 
     didSet { 
      if (disabledTexture != nil) { 
       texture = isEnabled ? defaultTexture : disabledTexture 
      } 
     } 
    } 
    var isSelected: Bool = false { 
     didSet { 
      texture = isSelected ? selectedTexture : defaultTexture 
     } 
    } 

    init(normalTexture defaultTexture: SKTexture!, selectedTexture:SKTexture!, disabledTexture: SKTexture?, size:CGSize) { 
     ... 
     super.init(texture: defaultTexture, color: UIColor.white, size: size) 
     ... 
    } 
    ... 
} 

我看不出有什麼缺點,因爲SKSpriteNode直接從SKNode繼承。

同樣也不難添加新元素作爲兒童,因爲SKLabelNode或其他SKSpriteNode