SKShapeNode的子类是否可以使用其中一个便利初始化器?

时间:2015-12-28 01:35:40

标签: swift sprite-kit subclass skshapenode designated-initializer

我有一个继承自SKShapeNode的类,因为我想添加其他属性。我遇到的问题是我希望能够创建一个"圈"通过使用SKShapeNode"方便"初始化程序SKShapeNode.init(circleOfRadius:CGFloat),但由于它是一个便利初始化程序,编译器会发出一条消息"必须调用SKShapeNode"类的指定初始值设定项,因为它只允许调用"指定的初始化程序"父类,但唯一的#34;指定" SKShapeNode的初始值设定项为SKShapeNode.init(),不会创建我想要的圆形。 下面是我的代码与编译器错误。 所以问题是,我可以继承SKShapeNode并且仍然可以以某种方式访问​​"方便"初始化器用圆形初始化它?在我看来,这是不可能的。那么有什么变通方法吗?

感谢

enter image description here

1 个答案:

答案 0 :(得分:0)

SKShapeNode的指定初始值设定项只是普通的init,因此我们必须在自定义初始化方法中调用它。要创建圆形,我们必须自己创建path。幸运的是,CGPath有一个方便的初始值设定项,可用于创建圆圈。你走了:

import SpriteKit

class CustomSKShapeNode:SKShapeNode{
    var groupName:String!

    init(groupName:String,radius:CGFloat){
        super.init()
        self.groupName = groupName
        let rect = CGRect(x:-radius,y:-radius,width:radius * 2,height:radius * 2)
        self.path = CGPath(ellipseIn: rect, transform: nil)
        self.fillColor = UIColor.yellow
    }

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

var node = CustomSKShapeNode(groupName:"group1",radius:40)

node.position = CGPoint(x:40,y:40) // bottom left corner

addChild(node)