2

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

谢谢

在此处输入图像描述

4

1 回答 1

0

指定的初始化SKShapeNode器只是简单的 old init,所以这就是我们必须在我们的自定义 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)
于 2017-10-12T02:49:47.057 回答