创建初始化器我一直在试图重写一个便利的初始化,让我来实例化一个SKSpriteNode孩子一些额外的属性SKSpriteNode初始化,但每次我试图,我不断收到编译器错误。据我所知,这是两大规则。为SKSpriteNode子类
规则:
- 一切便利初始化必须引用指定初始化,无论是从类本身或父类
- 子类属性必须初始化器委托给父母之前设置。
这里是我的代码,我相信如下的规则:
class WalkingMonster: SKSpriteNode {
var rangeOfMovement: CGFloat
var originalPosition: CGFloat
var platformNumber: Int
var imageName = "walkingAlien"
var sizes = [CGSize(width: CGFloat(30.0), height: CGFloat(30.0)), CGSize(width: CGFloat(30.0), height: CGFloat(15.0)), CGSize(width: CGFloat(30.0), height: CGFloat(7.0))]
override init(texture: SKTexture?, color: UIColor, size: CGSize) {
super.init(texture: texture!, color: color, size: size)
}
convenience init(texture: SKTexture, color: UIColor, size: CGSize, rangeOfMovement: CGFloat, originalPosition: CGFloat, platformNumber: Int) {
self.rangeOfMovement = rangeOfMovement
self.originalPosition = originalPosition
self.platformNumber = platformNumber
self.init(texture: texture, color: color, size: size)
}
}
我由编译器来实现以下所需的初始化告知,只会引发错误:
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
当我实现它,我获得()一个错误,指出self.rangeOfMovement不是在super.init初始化调用和self.init调用之前委托初始使用自我。当我将自己从初始化程序中取出时,它将每个成员变量作为函数的局部变量处理。
我曾尝试调换覆盖的init()调用和使用super.init()在子类中方便初始化。
class WalkingMonster: SKSpriteNode {
var rangeOfMovement: CGFloat
var originalPosition: CGFloat
var platformNumber: Int
var imageName = "walkingAlien"
var sizes = [CGSize(width: CGFloat(30.0), height: CGFloat(30.0)), CGSize(width: CGFloat(30.0), height: CGFloat(15.0)), CGSize(width: CGFloat(30.0), height: CGFloat(7.0))]
convenience init(texture: SKTexture, color: UIColor, size: CGSize, rangeOfMovement: CGFloat, originalPosition: CGFloat, platformNumber: Int) {
self.rangeOfMovement = rangeOfMovement
self.originalPosition = originalPosition
self.platformNumber = platformNumber
super.init(texture: texture, color: color, size: size)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
我得到一个错误说的WalkingMonster方便初始化必须self.init而不是链接委托给一个超类初始化用super.init(),我已经尝试没有成功实施之前。我觉得重写初始化属性应该是一件非常简单的事情,我必须错过一些东西。与往常一样,任何帮助,非常感谢
它仍然需要NSCoder初始化。是好的,还是会崩溃我的游戏与fatalError(“初始(编码:) :)尚未实施”)? –
只要你永远不会调用它,崩溃的实现就没有问题。如果你使用'NSCoding'来编码或解码你的子类,它将被调用。 – andyvn22