继承SKShapeNode

3
为什么可以像这样实例化SKShapeNode
let circle = SKShapeNode(circleOfRadius: 10)

但是当我想创建一个继承自SKShapeNode的类时,我不能像这样做:

public class Player:SKShapeNode{

public var playerName : String
private var inventory: [enumObject]

init(nameOfPlayer:String, position:CGPoint, radious: CGFloat) {

super.init(circleOfRadius: radious)
self.position = position
self.fillColor = SKColor.white

playerName = nameOfPlayer

inventory = [enumObject]()
}

}

它说这个初始化不是为SKShapeNode设计的,我搜索了一下但是找不到正确的方法来创建这个该死的圆形。

1个回答

3

SKShapeNode.init(circleOfRadius:)SKShapeNode 上的一种便利初始化方法,因此您无法从 Swift 初始化程序调用它。Swift 比 Objective-C 更严格地执行指定初始化程序模式。

不幸的是,似乎 SKShapeNode 的指定初始化程序只是 init,因此您需要像这样做:

public class Player: SKShapeNode {
    public var playerName : String
    private var inventory: [enumObject]

    init(nameOfPlayer:String, position:CGPoint, radius: CGFloat) {
        playerName = nameOfPlayer
        inventory = [enumObject]()

        super.init()

        self.path = CGPath(ellipseIn: CGRect(origin: .zero, size: CGSize(width: radius, height: radius)), transform: nil)

        self.position = position
        self.fillColor = SKColor.white
    }

    // init?(coder:) is the other designated initializer that we have to support
    public required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

上面的代码适用于子类化SKShapeNode,但考虑到苹果提供的API以及您的代码将来可能需要如何更改,创建一个包含一个或多个SKShapeNodeSKNode子类可能更有意义。在这种设置中,如果您想要将玩家表示为不仅仅是一个简单的圆形,您可以简单地向玩家节点添加其他节点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接