【问题标题】:Subclassing SKNode, or SKSpriteNode for complex buttons为复杂按钮子类化 SKNode 或 SKSpriteNode
【发布时间】:2016-10-17 22:35:10
【问题描述】:

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

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

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

但我突然想到我可能做错了,我应该继承一个 SKNode。

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

【问题讨论】:

    标签: button sprite-kit skspritenode subclassing sknode


    【解决方案1】:

    根据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

    添加新元素作为子元素也没有困难,如SKLabelNode 或其他SKSpriteNode

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多