Error: "Property 'self.gameArea' not initialised at super.init call"
Error: "Property 'self.gameArea' not initialised at super.init call"
我得到标题中写的错误。我是这一切的新手。任何帮助表示赞赏。
这是 GameScene.swift 文件:
class GameScene: SKScene {
let player = SKSpriteNode(imageNamed: "shuttle")
let bulletSound = SKAction.playSoundFileNamed("torpedo.mp3", waitForCompletion: false)
let gameArea: CGRect
override init(size: CGSize) {
let maxRatio: CGFloat = 16.0/9.0
let playableWidth = size.height / maxRatio
let margin = (size.width - playableWidth) / 2
gameArea = CGRect(x: margin - size.width / 2, y: size.height / 2, width: playableWidth, height: size.height)
super.init(size: size)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
我建议您阅读有关 initialization process 的内容。 Swift 执行两步初始化。第一阶段是初始化所有存储的属性。此外 Swift 编译器执行少量安全检查以确保正确执行两阶段初始化。这是来自文档:
Safety check 1
A designated initializer must ensure that all of the properties introduced by its class are initialized before it delegates up to a
superclass initializer.
因此您可以在初始化程序中初始化您的 属性:
required init?(coder aDecoder: NSCoder) {
self.gameArea = CGRect()
super.init(coder: aDecoder)
}
或在 属性 声明(并可选择将其声明为 var):
var gameArea = CGRect()
如果您不将其设置为 var,则在初始化(声明时)之后您将无法在以后更改它。在初始化程序中初始化 属性 时也是如此。如果是let常量,则不能进一步修改。
我得到标题中写的错误。我是这一切的新手。任何帮助表示赞赏。
这是 GameScene.swift 文件:
class GameScene: SKScene {
let player = SKSpriteNode(imageNamed: "shuttle")
let bulletSound = SKAction.playSoundFileNamed("torpedo.mp3", waitForCompletion: false)
let gameArea: CGRect
override init(size: CGSize) {
let maxRatio: CGFloat = 16.0/9.0
let playableWidth = size.height / maxRatio
let margin = (size.width - playableWidth) / 2
gameArea = CGRect(x: margin - size.width / 2, y: size.height / 2, width: playableWidth, height: size.height)
super.init(size: size)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
我建议您阅读有关 initialization process 的内容。 Swift 执行两步初始化。第一阶段是初始化所有存储的属性。此外 Swift 编译器执行少量安全检查以确保正确执行两阶段初始化。这是来自文档:
Safety check 1
A designated initializer must ensure that all of the properties introduced by its class are initialized before it delegates up to a superclass initializer.
因此您可以在初始化程序中初始化您的 属性:
required init?(coder aDecoder: NSCoder) {
self.gameArea = CGRect()
super.init(coder: aDecoder)
}
或在 属性 声明(并可选择将其声明为 var):
var gameArea = CGRect()
如果您不将其设置为 var,则在初始化(声明时)之后您将无法在以后更改它。在初始化程序中初始化 属性 时也是如此。如果是let常量,则不能进一步修改。