在Swift中保存/归档SKSpriteNode
问题描述:
一段时间以来,我一直在试图找到一种方法将SpriteNode(以及节点的所有子节点)保存到'disk',所以当我退出GameScene时回来,精灵正是我如何离开他们。在Swift中保存/归档SKSpriteNode
我不需要存档整个场景,只是一个节点(和它有许多孩子)
我SpriteKit和斯威夫特工作。
任何人都可以请教我一个教程或一些文件,说明如何做到这一点?
非常感谢您的帮助!
关于 Adam。
答
SKSpriteNode
是一个非常复杂的对象。存储整个事情是很麻烦的。不要忘记它有很多属性,并且一些属性,如physicsBody
具有子属性。
所以你想要做的不是存储整个节点,而是存储一些可以完全代表节点的信息。例如,如果节点中唯一可以改变的是它的颜色,那么你只需要存储它的颜色。当你想重新创建你的节点时,你只需重新创建它,然后读取你存储的颜色并设置它。
最后,你需要用一个“属性列表”,这是只包含类型的属性列表中找到的值的对象,像String
,Int
,Bool
,Array
,Dictionary
等
由于落得你没有提到确切的情况,我只是做一个例子:
class SpriteInfo {
let positionX: Double
let positionY: Double
let subnodes: [SpriteInfo]
// init here...
}
以上是属性列表类型。然后,您可以将其存储在UserDefaults
中。
谢谢你,我的节点有可能有数百个其他节点作为孩子,我需要保存所有这些节点,包括大小,形状,x/y位置,相对于前一个节点的角度......以及其他一些细节。是否没有办法简单地使用可编码或某种编码对整个事物进行归档?我想重绘整个'树'可能是可能的,但似乎是一个痛苦的方式来做到这一点... – Adam
使用codable是好的,但你仍然必须编码所有这些属性。保存一个精灵节点的整个状态不是微不足道的。也许你错误地接近了这个问题。 @亚当 – Sweeper