ios - 我如何转换回 SpriteKit 中的 GameScene?

标签 ios swift sprite-kit

我有一个包含两个场景的 SpriteKit 游戏。一个 GameScene 和一个 PlayScene。我在两个场景之间转换。最近 Xcode 提示我将这段代码添加到我的 GameScene 中,尽管我以前在游戏运行流畅时并不需要它。

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

当我编写这段代码以从 GameScene 过渡到 PlayScene 时,Xcode 没有提示:

var scene = PlayScene(size: self.size)
let skView = self.view as SKView!
skView.ignoresSiblingOrder = true
scene.scaleMode = .AspectFill
scene.size = CGSizeMake(1536, 2048)
skView.presentScene(scene)

然而,当我使用这段几乎相同的代码转换回 GameScene 时,我收到一条错误消息:

var scene = GameScene(size: self.size)
let skView = self.view as SKView!
skView.ignoresSiblingOrder = true
scene.scaleMode = .AspectFill
scene.size = CGSizeMake(1536, 2048)
skView.presentScene(scene)

错误消息:无法将表达式的类型“(size: @lvalue CGSize)”转换为类型“GameScene?”

我从 GameScene 中删除了 required init? 并且错误消失了,但是 Xcode 给了我另一个错误,除非我把 required init? 放回去。

以前我可以在没有 required init? 但有其他代码块的情况下运行我的游戏。

编辑:这是 GameScene 构造函数代码。

//called in viewDidLoad()
if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene {
        let skView = self.view as SKView
        scene.size = CGSizeMake(1536, 2048)
        skView.showsFPS = true
        skView.showsNodeCount = true
        skView.ignoresSiblingOrder = true
        scene.scaleMode = .AspectFill
        skView.presentScene(scene)
    }

最佳答案

有趣的是,我刚刚遇到了和你一样的问题。我花了一段时间,但我通过将此添加到 GameScene 解决了这个问题:

override init(size: CGSize) {
    super.init(size: size)
}

试试吧!

关于ios - 我如何转换回 SpriteKit 中的 GameScene?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27095529/

相关文章:

ios - Firebase Phone Auth 验证码的超时时间是多少?以及如何设置一个?

ios - 如何设置 CATextLayer 文本垂直位置?

ios - 由于仅变换层而在 UIView 中发出警告

ios - 无法将 UIImage 添加到 UIImageView (Swift)

ios - 从 SKShapeNode 创建 SKTexture

ios - 从侧面生成敌人

ios - 如何在 Swift 5 和 iOS 13 中使用 CIFilter sunbeamsGenerator?

swift - 从分段控件返回值

ios - 旋转设备时将按钮保持在同一位置

swift 1.2 : Method does not override any method from its superclass