Инициализируйте пользовательский SKSpriteNode с его свойствами из редактора. - PullRequest
2 голосов
/ 20 февраля 2020

Я создал свой собственный простой класс под названием SKGlowNode в качестве подкласса SKSpriteNode. Первоначально я хотел иметь возможность создавать собственный класс и вводить все параметры инициализации в редакторе, как вы можете с помощью SKSpriteNode. Однако я обнаружил, что это пока невозможно, и мне пришлось попытаться сделать это с пользовательскими данными. Я установил свой узел в редакторе следующим образом:

enter image description here

И просто сделал пользовательский класс следующим образом:

enter image description here

Вот мой класс для SKGlowNode

import Foundation

import SpriteKit

class SKGlowNode: SKSpriteNode{

let colors = [UIColor.blue,UIColor.green,UIColor.red,UIColor.orange,UIColor.purple,UIColor.yellow,UIColor.white,UIColor.magenta]

required init?(coder aDecoder: NSCoder) {

    super.init(texture: texture, color: .black, size: size)//error here

    let glowIndex = self.userData?.value(forKey: "glowColorIndex") as? Int ?? 0
    let glowTexture = self.userData?.value(forKey: "glowTexture") as? String ?? "squareBg"
    addGlow(radius: 75, texture: SKTexture(imageNamed: glowTexture), color: colors[glowIndex])
    //This glow function works and is an extension from a SKSpriteNode where it creates a glow from a texture with certain color

   }

}

Очевидно, я получаю сообщение об ошибке в указанной строке, потому что я не могу инициализировать суперкласс, используя эти переменные, но у меня нет Идея, что нужно сделать, чтобы инициализировать его значениями, уже определенными в редакторе, как это будет работать, если бы не было пользовательского класса. Спасибо

1 Ответ

0 голосов
/ 23 февраля 2020

У вас должен быть соответствующий Super.init для вашего класса init.

Если вы создаете экземпляр SKSpriteNode с подклассами в init (), будь то стандартный или пользовательский init с пользовательскими параметрами, которые вы используете

super.init(texture: SKTexture, color: SKColor, size: CGSize)

если вы создаете его из файла сцены sks, тогда требуется init? (Кодер aDecoder: NSCoder), и вам нужно иметь

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}
...