Swift SKShapeNode не принимает инициализатор

Я не могу заставить подкласс SKShapeNode принимать инициализатор. Чтобы обойти это, я попытался использовать пример, размещенный здесь. Удобные инициализаторы в подклассе Swift. Код, который я использую, приведен ниже.

class Ground1 : SKShapeNode {

override init() {
    super.init()
    print("Hello1")
}

convenience init(width: CGFloat, point: CGPoint) {
    var points = [CGPoint(x: -900, y: -300),
                  CGPoint(x: -600, y: -100),
                  CGPoint(x: -100, y: -300),
                  CGPoint(x: 2, y: 150),
                  CGPoint(x: 100, y: -300),
                  CGPoint(x: 600, y: -100),
                  CGPoint(x: 900, y: -300)]
    self.init(splinePoints: &points, count: points.count)
    lineWidth = 5
    strokeColor = UIColor.orange
    physicsBody = SKPhysicsBody(edgeChainFrom: path!)
    physicsBody?.restitution = 0.75
    physicsBody?.isDynamic = false
    print("Hello2")
}

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

}

При инициализации функция init() игнорируется и не используется. В результате никакая фигура не добавляется к сцене. Что я делаю не так ?


person hoboBob    schedule 29.12.2017    source источник
comment
Какой код вы использовали для добавления земли?   -  person Sweeper    schedule 30.12.2017
comment
Я создаю его экземпляр в gameScene, задаю землю = Ground1(), затем добавляю экземпляр на сцену. Добавить ребенка (земля). Я получаю в консоли print hello1, но не печатаю hello2   -  person hoboBob    schedule 30.12.2017
comment
Попробуйте это let ground = Ground1(width: 10, point: CGPoint.zero) и addChild(ground). Вы можете удалить override init() {...} и required init {...}.   -  person 0x141E    schedule 30.12.2017


Ответы (1)


Спасибо 0x141E, который указал мне правильное направление. Я обнаружил, что это работает, но код выглядит грязным. Причины такой инициализации подробно объясняются здесь Инициализаторы в подклассе Swift. Хотя меня выкинули из поиска решения из-за использования splinePoints и назначения пути.

class Ground1 : SKShapeNode {

    override init() {
        super.init()
    }

    convenience init(name: String) {
        var points = [CGPoint(x: -900, y: -300),
                      CGPoint(x: -600, y: -100),
                      CGPoint(x: -100, y: -300),
                      CGPoint(x: 2, y: 150),
                      CGPoint(x: 100, y: -300),
                      CGPoint(x: 600, y: -100),
                      CGPoint(x: 900, y: -300)]
        self.init(splinePoints: &points, count: points.count)
        lineWidth = 5
        strokeColor = UIColor.orange
        physicsBody = SKPhysicsBody(edgeChainFrom: self.path!)
        physicsBody?.restitution = 0.75
        physicsBody?.isDynamic = false
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
}
person hoboBob    schedule 30.12.2017