init var with swift using SpriteKit?



如何使用SpriteKit正确初始化swift ?

这编译,但我得到一个错误,一旦模拟器开始运行。"swift_reportUnimplementedInitializer"

import SpriteKit
class GameScene: SKScene {
    var paddlePositionUpdate:CGPoint
    init(paddlePositionUpdate:CGPoint){
    self.paddlePositionUpdate = CGPoint.zeroPoint
    super.init()
}
}

SKScene的指定初始化器是init(size),其中size是您的场景大小。您试图使用不存在的init()

你可以看到确切的方法签名,如果你Cmd+点击SKScene

编辑:试试

class GameScene: SKScene {
    var paddlePositionUpdate: CGPoint
    init(size: CGSize, paddlePosition: CGPoint = CGPoint.zeroPoint){
        paddlePositionUpdate = paddlePosition
        super.init(size)
    }
}

我在使用

用另一个场景替换场景时遇到了类似的问题
let gameScene = GameScene(size: self.size)
self.view.presentScene(gameScene)

和我一直得到两个错误关于初始化:

// Error #1
'GameScene' is not constructible with '(size: @lvalue CGSize)'
// Error #2
Class 'GameScene' has no initializers

要修复错误#1,只需将GameScene(size: self.size)替换为GameScene.sceneWithSize(self.size)

错误#2似乎受到属性初始化方式的影响。例如,如果我写:

class GameScene: SKScene {
var test: CGPoint
// ...
}

错误#2仍然存在。但是,如果我将var test: CGPoint替换为var test: CGPoint!, var test = CGPoint(0,0)或任何其他行,可能会给test一个特定的值,错误#2就消失了。我搜索了指南书,但发现很多类使用像var test: CGPoint这样的行。这里我有点困惑了。

这可能是Swift初学者的一个常见问题,我希望我的临时解决方案可以帮助。

最新更新