有一段时间我一直在互联网上搜寻,试图找到一种将 SpriteNode(以及该节点的所有子节点)保存到“磁盘”的方法,因此当我退出 GameScene 然后返回时, Sprite 完全正确我是如何离开他们的。
我不需要存档整个场景,只需存档一个节点(及其拥有的许多子节点)
我使用 SpriteKit 和 Swift 工作。
任何人都可以向我指出一个教程或一些解释如何执行此操作的文档吗?
非常感谢您的帮助!!!
问候 亚当。
最佳答案
您可以使用 NSArchiver
和 UserDefaults
保存 SKSpriteNode
及其所有子节点。
func save(node: SKSpriteNode){
let key : String = "skspritenode"
//First create a key that can be used to encode and decode your node.
//Then reference NSKeyedArchiver, and UserDefaults.standard
let savedData = NSKeyedArchiver.archivedData(withRootObject: node)
//^This line turns the node into savable data^
let defaults = UserDefaults.standard
defaults.set(savedData, forKey: key)
//^This line saves your node^
}
因此,每当您想要保存节点时,只需调用函数save(node: SKSpriteNodeToBeSaved)
即可。然后,您可以稍后检索编码节点并在场景加载时加载它。
override func didMove(to view: SKView){
let key : String = "skspritenode"
let defaults = UserDefaults.standard
if let savedNode = defaults.object(forKey: key) as? Data {
let theNode = NSKeyedUnarchiver.unarchiveObject(with: savedNode) as! SKSpriteNode
theNode.size = CGSize(width: self.frame.width / 4, height: self.frame.height / 4)
self.addChild(theNode)
}
}
我希望这有帮助。我也花了一段时间才弄清楚。祝你好运!
关于swift - 在 Swift 中保存/存档 SKSpriteNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46388527/