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