如何在SpriteKit中转换回GameScene?

时间:2014-11-23 23:10:04

标签: 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)

错误消息:无法转换表达式的类型'(大小:@lvalue CGSize)'输入' GameScene?'

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

以前我可以在没有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)
    }

1 个答案:

答案 0 :(得分:1)

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

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

试一试!