#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