Подтвердить что ты не робот

Нет назначенного init для SKShapeNode (circleOfRadius: radius)

Я пытаюсь создать подкласс SKShapeNode в swift как SKShapeNode (circleOfRadius: radius), но для него нет назначенного init.

У кого-нибудь есть обходные пути или информация о том, почему? Я не уверен, что это ошибка или намеренная. Я нашел это видео, демонстрирующее обходное решение для SKSpriteNode, но оно не работает для меня. https://skillsmatter.com/skillscasts/5695-how-to-subclass-a-skspritenode

В общем, я пытаюсь сделать подкласс для SKShapeNode, чтобы потом подклассы, чтобы иметь разные версии, чтобы легче управлять моим кодом. ТИА

Спасибо Мартину, я нашел этот пример раньше. Он работает, но как бы сделать это в круг вместо прямоугольника?

import Foundation
import SpriteKit


    class Player : SKShapeNode {

        override init() {
            super.init()
            self.name = "Player"
            self.fillColor = UIColor.blackColor()

        }

        init(rectOfSize: CGSize) {
            super.init()

            var rect = CGRect(origin: CGPointZero, size: rectOfSize)
            self.path = CGPathCreateWithRect(rect, nil)
        }

        required init?(coder aDecoder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
    }

В главном коде

let playerOne = Player(rectOfSize: CGSize(width: 100, height: 100))
4b9b3361

Ответ 1

как это?

class Player: SKShapeNode {

    init(circleOfRadius: CGFloat){
        super.init()

        let diameter = circleOfRadius * 2
        self.path = CGPathCreateWithEllipseInRect(CGRect(origin: CGPointZero, size: CGSize(width: diameter, height: diameter)), nil)
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

}

Ответ 2

Это сработало для нас.

Он позволяет использовать другие инициализаторы удобства из SKShapeNode, но здесь есть странный синтаксис: fooobar.com/info/263353/...

class CircleNode : SKShapeNode {

    override init() {
        super.init()
    }

    convenience init(width: CGFloat, point: CGPoint) {
        self.init()
        self.init(circleOfRadius: width/2)
        // Do stuff
     }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}