问题 没有指定的SKShapeNode初始化(circleOfRadius:radius)


我正在尝试在swift中创建一个SKShapeNode的子类作为SKShapeNode(circleOfRadius:radius),但是没有指定的init。

任何人有任何变通办法或有关原因的信息?我不确定这是一个错误还是故意的。我发现这个视频演示了SKSpriteNode的解决方法,但它不适用于我。 https://skillsmatter.com/skillscasts/5695-how-to-subclass-a-skspritenode

总的来说,我正在尝试为SKShapeNode创建一个子类,然后我可以再次从子类中使用不同的版本来更轻松地管理我的代码。 TIA

谢谢马丁我之前发现了这个例子。它可以工作,但我怎么会把它变成一个圆而不是一个矩形?

import Foundation
import SpriteKit


    class Player : SKShapeNode {

        override init() {
            super.init()
            self.name = "Player"
            self.fillColor = UIColor.blackColor()

        }

        init(rectOfSize: CGSize) {
            super.init()

            var rect = CGRect(origin: CGPointZero, size: rectOfSize)
            self.path = CGPathCreateWithRect(rect, nil)
        }

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

在主要代码中

let playerOne = Player(rectOfSize: CGSize(width: 100, height: 100))

12529
2018-01-29 19:58


起源

这有用吗: 使用Swift对SKShapeNode进行子类化 ? - Martin R
如果编译器对缺少的init进行了修改,通常会建议插入一个(带正方形的红点)。让它做到这一点。 - Thomas Kilian
马丁。我之前使用过那个例子并且现在正在使用它,但是我怎样才能使它成为圆形而不是矩形? - Chris
如果你展示你的代码,它会更清楚...... - sergio


答案:


这个怎么样?

class Player: SKShapeNode {

    init(circleOfRadius: CGFloat){
        super.init()

        let diameter = circleOfRadius * 2
        self.path = CGPathCreateWithEllipseInRect(CGRect(origin: CGPointZero, size: CGSize(width: diameter, height: diameter)), nil)
    }

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

}

14
2018-01-30 01:01



这样可行!非常感谢你! - Chris
这是如何对子类SKShapeNode(circleOfRadius:....)进行的?精灵工具包真的没有内置的初始化器吗? - Confused


这对我们有用。

它允许您使用其他便利初始化器 SKShapeNode,但它在这里解释了奇怪的语法: https://stackoverflow.com/a/24536826/144088

class CircleNode : SKShapeNode {

    override init() {
        super.init()
    }

    convenience init(width: CGFloat, point: CGPoint) {
        self.init()
        self.init(circleOfRadius: width/2)
        // Do stuff
     }

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

0
2018-02-22 09:12