也许你可以帮助我。
我有一个名为GameScene.sks的主场景。在这个场景中,当玩家输掉游戏时,我会尝试在场景中显示游戏。出于这个原因,我创建了一个带有GameOver标签和Color Sprite背景图像的GameOverScene.sks。
要在场景中显示游戏,请使用以下命令:
var secondScene = GameOverScene(size: self.size)
var transition = SKTransition.flipVerticalWithDuration(1.0)
secondScene.scaleMode = SKSceneScaleMode.AspectFill
self.scene!.view?.presentScene(secondScene, transition: transition)
显示一个场景,但不显示我在sks中定义的节点。我不知道为什么,能帮帮我吗?在Xcode Editor中显示GameOverScene.sks的所有节点。
谢谢!
答案 0 :(得分:1)
你没有从文件加载GameOverScene,只是初始化一个空对象,它不会因为它具有相同的名称而神奇地加载:)
要从文件加载它,请使用在新的sprite工具包项目中作为样板代码提供的unarchivefromFile:方法。
extension SKNode {
class func unarchiveFromFile(file : NSString) -> 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 SKScene
archiver.finishDecoding()
return scene
} else {
return nil
}
}
}
并像这样使用它:
var secondScene = GameOverScene.unarchiveFromFile("<sks file name here>") as GameOverScene
注意:新场景的大小将是sks文件中设置的大小(默认值:1024x768),因此您可能需要将其更改为适合设备。
当你取消归档场景时,调用init方法是init?(coder aDecoder: NSCoder)
,以防你需要覆盖它(记得调用super.init(coder: aDecoder)
以确保你的场景的内容实际被加载来自档案。
编辑:在您自己的场景中使用此功能
在您想要取消归档的场景中:
override class func unarchiveFromFile(file : NSString) -> 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 ***YourSceneNameHere***
archiver.finishDecoding()
return scene
} else {
return nil
}
}
并将***YourSceneNameHere***
替换为例如:GameOverScene
修改:解释
此方法从应用程序包中的sks文件加载SKScene。它采取的步骤是:
***YourSceneName***
的实例。***YourSceneName***
self.classForNSKeyedUnarchiver
返回场景的正确类。