sprite-kit - 错误 : "Property ' self. gameArea' 未在 super.init 调用中初始化”

标签 sprite-kit swift3 init

我收到标题中写的错误。我对这一切都很陌生。任何帮助表示赞赏。

这是 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 常量,则不可能进行进一步的修改。

关于sprite-kit - 错误 : "Property ' self. gameArea' 未在 super.init 调用中初始化”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40437051/

相关文章:

sprite-kit - 检查 SKNode 是否正在运行 SKAction

swift - 如何在 Sprite Kit 中使用 SKAction 永远重复缩放对象

swift - 如何查看编译器对我的 Swift 代码应用的优化?

ios - swift 3 : If let statement crashes instead of executing else block

python - 在 __main__.py 中使用模块自己的对象

swift - 为什么我不能在 SKScene 上调用下标?

swift - 使用 SpriteKit (Swift) 在 Xcode Playgrounds 中创建按钮

ios - 无法在 iOS 沙箱中的文档文件夹中创建文件或目录

linux - 我如何以另一个用户的 .bash_profile 而不是当前用户的身份执行命令?

python - __init__ 方法获取一个值,但没有传递任何值