如何在 sprite kit 项目中设置初始场景?
How do I set the initial scene in a sprite kit project?
我有两个 SKScenes GameScene
和 MenuScene
,当我打开应用程序时出现的默认场景是 GameScene
但我希望 MenuScene 先出现
我尝试更改 GameViewController 中的代码:
import UIKit
import SpriteKit
extension SKNode {
class func unarchiveFromFile(file : String) -> SKNode? {
if let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks") {
var sceneData = NSData(contentsOfFile: path, options: .DataReadingMappedIfSafe, error: nil)!
var archiver = NSKeyedUnarchiver(forReadingWithData: sceneData)
archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene")
let scene = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as! MenuScene
archiver.finishDecoding()
return scene
} else {
return nil
}
}
}
class GameViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
if let scene = MenuScene.unarchiveFromFile("MenuScene") as? MenuScene {
// Configure the view.
let skView = self.view as! SKView
skView.showsFPS = true
skView.showsNodeCount = true
/* Sprite Kit applies additional optimizations to improve rendering performance */
skView.ignoresSiblingOrder = true
/* Set the scale mode to scale to fit the window */
scene.scaleMode = .AspectFill
skView.presentScene(scene)
}
}
但它只显示灰屏而不是场景,我还需要做些什么吗?
您的 MenuScene
是 sks
文件吗?可能不是,您只有 swift
文件作为场景。
如果我没理解错的话,unarchiver 获取一个sks
文件并将其解压缩,查看"unarchiveFromFile" 方法,查看if 语句,else returns nil.
你或许可以这样做:
if let scene = new MenuScene() {
而不是取消存档。否则制作 MenuScene
文件的 sks
版本。
我有两个 SKScenes GameScene
和 MenuScene
,当我打开应用程序时出现的默认场景是 GameScene
但我希望 MenuScene 先出现
我尝试更改 GameViewController 中的代码:
import UIKit
import SpriteKit
extension SKNode {
class func unarchiveFromFile(file : String) -> SKNode? {
if let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks") {
var sceneData = NSData(contentsOfFile: path, options: .DataReadingMappedIfSafe, error: nil)!
var archiver = NSKeyedUnarchiver(forReadingWithData: sceneData)
archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene")
let scene = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as! MenuScene
archiver.finishDecoding()
return scene
} else {
return nil
}
}
}
class GameViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
if let scene = MenuScene.unarchiveFromFile("MenuScene") as? MenuScene {
// Configure the view.
let skView = self.view as! SKView
skView.showsFPS = true
skView.showsNodeCount = true
/* Sprite Kit applies additional optimizations to improve rendering performance */
skView.ignoresSiblingOrder = true
/* Set the scale mode to scale to fit the window */
scene.scaleMode = .AspectFill
skView.presentScene(scene)
}
}
但它只显示灰屏而不是场景,我还需要做些什么吗?
您的 MenuScene
是 sks
文件吗?可能不是,您只有 swift
文件作为场景。
如果我没理解错的话,unarchiver 获取一个sks
文件并将其解压缩,查看"unarchiveFromFile" 方法,查看if 语句,else returns nil.
你或许可以这样做:
if let scene = new MenuScene() {
而不是取消存档。否则制作 MenuScene
文件的 sks
版本。