Подклассификация SKNode или SKSpriteNode для сложных кнопок

#button #sprite-kit #skspritenode #subclassing #sknode

#кнопка #sprite-kit #skspritenode #создание подклассов #sknode

Вопрос:

Я создаю сложные кнопки с различными состояниями и анимациями между состояниями, а также зацикливаю анимации «привлечения». Из-за природы теней, бликов, свечения и внутренних визуальных изменений кнопки довольно сложные.

Каждая кнопка имеет несколько SKSpriteNode для рисования и анимации, несколько SKLabelNodes и несколько SKEffectNodes, а также действия, переходящие между состояниями на основе состояния self и others, и события касания для self.

В настоящее время эти кнопки создаются и создаются из подкласса SKSpriteNode.

Но мне приходит в голову, что я, возможно, делаю это «неправильно», и вместо этого я должен подклассифицировать SKNode.

Каковы преимущества и недостатки объединения элементов в подкласс SKNode против 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 .

Также нет никаких трудностей с добавлением новых элементов в качестве дочерних элементов, as SKLabelNode или других SKSpriteNode