swift - SKShapeNode 的子类是否可以使用它的便利初始化程序之一?

标签 swift sprite-kit subclass skshapenode designated-initializer

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

谢谢

enter image description here

最佳答案

SKShapeNode 的指定初始化程序只是普通的旧 init,所以这就是我们必须在自定义 init 方法中调用的内容。然后要创建一个圆形,我们必须自己创建路径。幸运的是,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)

关于swift - SKShapeNode 的子类是否可以使用它的便利初始化程序之一?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34486714/

相关文章:

ios - 从 TabBar 弹出

ios - 如何将导航栏标题更改为图像?其他方法没有奏效

objective-c - Sprite Kit - iOS 7.1 更新后对象因缩放而发生碰撞

ios - 过渡前暂停场景并执行过渡

ios - Sprite Kit,使多个Sprite遵循相同的方法

javascript - javascript 子类是否需要与其父类具有相同的参数?

python - 迭代创建子类并将对象存储为类属性

swift - 无法从函数内更改全局变量

iphone - 为什么 Apple 不允许 UINavigationController 的子类化?除了子类化之外,我还有哪些选择?

ios - 音频播放有问题