未显示 SKS 的内容
Content of SKS not displayed
也许你能帮我。
我有一个主场景叫GameScene.sks。在这个场景中,我尝试展示玩家输掉游戏时的游戏结束场景。为此,我创建了一个带有 GameOver 标签和彩色精灵背景图像的 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 编辑器中显示 GameOverScene.sks 的所有节点。
谢谢!
您没有从文件加载 GameOverScene,只是初始化一个空对象,它不会因为同名而神奇地加载 :)
要从文件加载它,请使用 unarchivefromFile: 方法,该方法在新的 sprite 工具包项目中作为样板代码提供。
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。它采取的步骤是:
- 在您的应用程序包中查找 sks 文件的路径(如果存在)。
- 将该文件中的字节加载到 NSData 对象中。
- 初始化 Unarchiver,这将读取 NSData 中的字节并从中加载+配置对象。
- 告诉解压器在读取文件中的 SKScene 时创建
***YourSceneName***
的实例。
- 解码数据并将 returned 对象转换为
***YourSceneName***
- 告诉存档器我们已完成读取文件数据
- Return未存档场景
- 如果找不到sks文件,return无
需要覆盖该方法,以便
self.classForNSKeyedUnarchiver
return 适合您的场景 class。
也许你能帮我。
我有一个主场景叫GameScene.sks。在这个场景中,我尝试展示玩家输掉游戏时的游戏结束场景。为此,我创建了一个带有 GameOver 标签和彩色精灵背景图像的 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 编辑器中显示 GameOverScene.sks 的所有节点。
谢谢!
您没有从文件加载 GameOverScene,只是初始化一个空对象,它不会因为同名而神奇地加载 :)
要从文件加载它,请使用 unarchivefromFile: 方法,该方法在新的 sprite 工具包项目中作为样板代码提供。
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。它采取的步骤是:
- 在您的应用程序包中查找 sks 文件的路径(如果存在)。
- 将该文件中的字节加载到 NSData 对象中。
- 初始化 Unarchiver,这将读取 NSData 中的字节并从中加载+配置对象。
- 告诉解压器在读取文件中的 SKScene 时创建
***YourSceneName***
的实例。 - 解码数据并将 returned 对象转换为
***YourSceneName***
- 告诉存档器我们已完成读取文件数据
- Return未存档场景
- 如果找不到sks文件,return无
需要覆盖该方法,以便
self.classForNSKeyedUnarchiver
return 适合您的场景 class。