为复杂按钮子类化 SKNode 或 SKSpriteNode

Subclassing SKNode, or SKSpriteNode for complex buttons

我正在制作具有各种状态和状态之间动画的复杂按钮,以及循环 "attract" 动画。由于阴影、高光、发光和内部视觉变化的性质,按钮非常复杂。

每个按钮都有几个用于绘制和动画的SKSpriteNodes,多个SKLabelNodes和多个SKEffectNodes,加上基于自己和他人状态的状态转换动作,以及对自己的触摸事件。

目前这些按钮是从 SKSpriteNode 子类构建和实例化的。

但我突然想到我可能正在这样做 "wrong",我应该改为子类化 SKNode。

在上述情况下,将元素堆叠到 SKNode 的子类与 SKSpriteNode 的优缺点是什么?

根据SKNode定义:

The SKNode class does not perform any drawing of its own.

我非常同意使用 SKSpriteNode 作为按钮的子类更好,因为自定义按钮的 init 方法也可能有很大的优势,这在创建过程中会变得非常舒服一个按钮。 我写了一些代码来做一个例子:

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

添加新元素作为子元素也没有困难,如[​​=15=]或其他SKSpriteNode