我正在尝试弄清楚如何在 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
这是它不断突破的路线。如果有人对如何解决此问题有任何见解,将不胜感激。
最佳答案
这是我通常制作场景的方式:
- 转到文件 -> 新建 -> 文件...
- 点击Cocoa类,点击下一步
- 随便命名,让它成为SKScene的子类,选择swift
在新类中,让它看起来像这样:
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
,并将其放在所有let scene = GameScene 之前。 ..等等
和viewDidLoad中的东西。然后,如果您想从不同的 SKScene 而非 View Controller 呈现场景,请执行以下操作:
let scene = GameScene(size: self.frame.size) self.view?.presentScene(scene)
关于ios - SpriteKit 场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30043006/