不使用SpriteKit中的便利初始化程序初始化圆形精灵节点

时间:2015-12-02 05:21:54

标签: xcode swift sprite-kit

我正在创建一个Circle SKShapeNode类,我正在尝试初始化一个圆圈,但它在super.init行上给出了一个错误。还有另一种方法可以初始化圆圈吗?谢谢!

class Circle : SKShapeNode {

    var radius : CGFloat!

    init (pos:CGPoint,rad:CGFloat,color:UIColor) {

        super.init(circleOfRadius: 30)


    }

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

1 个答案:

答案 0 :(得分:0)

我知道这有点老了,但我遇到了与SKScene相同的问题并且认为我可以翻译...

你在这里看到一个错误,因为你试图从超类中调用一个便利函数。规则声明您只能从子类调用超级指定的初始值设定项。为方便起见,您必须使用“自我”。如:

self.init( circleOfRadius: 30 )

但是,如果你还部分实现了init?(coder :)函数的覆盖。如果您实现全部或没有指定的初始值设定项,则子类仅继承超类便捷初始值设定项。那么,删除所需的init?(编码器:)功能。

这应该会给你带来(非常奇怪的)错误:

  在self.init电话之前使用

'self'。

疯狂地说,在方便函数self.init(circleOfRadius:)

的调用中发生了这个错误

答案可以在Darvydas的链接中找到,在第二个答案中:显然,SKxxxxx对象的构造有些破碎。在调用方便的之前,您需要直接调用指定的初始化程序init()。这应该适合你:

    class Circle : SKShapeNode {

    var radius : CGFloat!

    convenience init (pos:CGPoint,rad:CGFloat,color:UIColor) {
        self.init()
        self.init(circleOfRadius: 30)
    }

}

希望能帮助你(或某人......)