swift - 在 Swift 中保存/存档 SKSpriteNode

标签 swift sprite archive

有一段时间我一直在互联网上搜寻,试图找到一种将 SpriteNode(以及该节点的所有子节点)保存到“磁盘”的方法,因此当我退出 GameScene 然后返回时, Sprite 完全正确我是如何离开他们的。

我不需要存档整个场景,只需存档一个节点(及其拥有的许多子节点)

我使用 SpriteKit 和 Swift 工作。

任何人都可以向我指出一个教程或一些解释如何执行此操作的文档吗?

非常感谢您的帮助!!!

问候 亚当。

最佳答案

您可以使用 NSArchiverUserDefaults 保存 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/

相关文章:

ios - swift 数组在循环时不追加

swift - 无法从 UIPickerView 保存数据

android - 对同一对象使用多个 Sprite 表 AndEnginge

javascript - 如何将存档 (zip) 通过管道传输到 S3 存储桶

mysql 从日期时间字段中获取所有可能的月份

swift - 理解 UIViewRepresentable

swift - 如何将 Property<Int> 转换为 SignalProducer<Int, PossibleError>?

ios - 使用枚举在 Sprite Kit 中组织 zPosition 值

python - 与敌人碰撞时减去生命不工作pygame

perl - 我的 Perl 脚本末尾的 'do' 语句永远不会运行