我有一个有两个场景的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)
}
答案 0 :(得分:1)
有趣的是,我遇到了和你一样的问题。我花了一段时间,但是通过将其添加到GameScene来解决它:
override init(size: CGSize) {
super.init(size: size)
}
试一试!