【问题标题】:How do I transition back to the GameScene in SpriteKit?如何转换回 SpriteKit 中的 GameScene?
【发布时间】:2014-12-29 07:30:20
【问题描述】:

我有一个有两个场景的 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? 并且错误消失了,但是 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)
    }

【问题讨论】:

  • 转换代码在哪里调用?
  • 在更新函数if player.position.y <= -1000 中调用转换。我对两种转换都使用了类似的调用。
  • 首先,重新添加初始化程序。您所做的只是通过在错误报告之前放置另一个错误来阻止报告错误。
  • 是的,我想那么多。但我仍然在过渡方面遇到问题。
  • 你能发布你的GameScene(size:)构造函数代码吗?

标签: ios swift sprite-kit


【解决方案1】:

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

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

试一试!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    • 2020-12-07
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 2015-09-14
    相关资源
    最近更新 更多