【发布时间】: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