我有一个包含两个场景的 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/