为复杂按钮

时间:2016-10-17 22:35:11

标签: button sprite-kit skspritenode subclassing sknode

我正在制作各种状态和状态之间动画的复杂按钮,并循环“吸引”动画。由于阴影,高光,发光和内部视觉变化的性质,按钮非常复杂。

每个按钮都有几个用于绘图和动画的SKSpriteNodes,多个SKLabelNodes和多个SKEffectNodes,以及基于自我状态和其他状态在状态之间转换的动作,以及自我触摸事件。

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

但是我觉得我可能会做这个“错误”,而且我应该改为继承SKNode。

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

1 个答案:

答案 0 :(得分:2)

根据SKNode定义:

  

SKNode类不会执行任何自己的绘图。

我完全同意认为使用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继承。

将{@ 1}}或其他SKLabelNode

作为子元素添加新元素也没有任何困难