我试图弄清楚如何在SpriteKit中添加更多场景。如果我在GameViewController中使用SpriteKit生成的行
if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene
这样可以正常工作,但是如果我创建的类也是SKScene类型并将其添加到SKView中。
let newscene = GameMenu()
skView.presentScene(newscene)
这不起作用。它只显示一个褪色的灰色,只有一小部分节点,但没有实际呈现。 SpriteKit使用unarchiveFromFile创建场景的方式是否有问题。我甚至没有使用Storyboard或GameScene.sks。整个游戏都是以编程方式创建的。还有一个问题,如果我尝试为菜单创建另一个ViewController并使用presentViewController。当它试图运行时,我也会收到一条错误,上面写着"无法转换类型' UIView'到' SKView。'"我用类似于GameViewController的同一行来构建它。
let skView = self.view as! SKView
这是它不断突破的路线。如果有人对如何解决这个问题有任何见解,将非常感激。
答案 0 :(得分:2)
以下是我通常制作场景的方法:
在新课程中,请将其设为:
import SpriteKit
class GameScene: SKScene {
override init(size: CGSize) {
super.init(size: size)
//Other init code
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
//Other functions like override func touchesBegan, update, etc. Whatever you want
}
如果要首先显示场景,GameViewController,请在viewDidLoad中键入:
let scene = GameScene(size: skView.bounds.size)
skView.presentScene(scene)
(skView应该已经为您制作,但如果不是,则为:let skView = self.view as! SKView
,并将其放在viewDidLoad中的所有let scene = GameScene... etc
之前。
然后,如果您想要从不同的SKScene而不是视图控制器呈现场景,请执行以下操作:
let scene = GameScene(size: self.frame.size)
self.view?.presentScene(scene)
答案 1 :(得分:1)
如果您以编程方式构建场景,请不要尝试从文件(可能存储不同场景)中对其进行单元化。请使用其初始化程序:例如GameMenu()
或GameMenu(size: whateverSize)
或您定义的自定义初始值设定项。