继承SKShapeNode
Inherit SKShapeNode
为什么可以像这样实例化 SKShapeNode
let circle = SKShapeNode(circleOfRadius: 10)
但是当我想创建一个继承形式 SKShapeNode
的 class 时,我不能这样做:
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]()
}
}
说这个init不是为SKShapeNode
设计的init,我搜索了一下,没有找到正确的创建这个该死的圆圈的方法。
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
的子类化,但考虑到 Apple 提供的 API 并考虑到您的代码将来可能需要如何更改,创建 API 可能更有意义=16=] 包含一个或多个 SKShapeNode
的子类。在此设置中,如果您想将玩家表示为不仅仅是一个简单的圆圈,您可以简单地向玩家节点添加额外的节点。
为什么可以像这样实例化 SKShapeNode
let circle = SKShapeNode(circleOfRadius: 10)
但是当我想创建一个继承形式 SKShapeNode
的 class 时,我不能这样做:
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]()
}
}
说这个init不是为SKShapeNode
设计的init,我搜索了一下,没有找到正确的创建这个该死的圆圈的方法。
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
的子类化,但考虑到 Apple 提供的 API 并考虑到您的代码将来可能需要如何更改,创建 API 可能更有意义=16=] 包含一个或多个 SKShapeNode
的子类。在此设置中,如果您想将玩家表示为不仅仅是一个简单的圆圈,您可以简单地向玩家节点添加额外的节点。