2017-09-24 38 views
0

一段时间以来,我一直在试图找到一种方法将SpriteNode(以及节点的所有子节点)保存到'disk',所以当我退出GameScene时回来,精灵正是我如何离开他们。在Swift中保存/归档SKSpriteNode

我不需要存档整个场景,只是一个节点(和它有许多孩子)

我SpriteKit和斯威夫特工作。

任何人都可以请教我一个教程或一些文件,说明如何做到这一点?

非常感谢您的帮助!

关于 Adam。

回答

1

SKSpriteNode是一个非常复杂的对象。存储整个事情是很麻烦的。不要忘记它有很多属性,并且一些属性,如physicsBody具有子属性。

所以你想要做的不是存储整个节点,而是存储一些可以完全代表节点的信息。例如,如果节点中唯一可以改变的是它的颜色,那么你只需要存储它的颜色。当你想重新创建你的节点时,你只需重新创建它,然后读取你存储的颜色并设置它。

最后,你需要用一个“属性列表”,这是只包含类型的属性列表中找到的值的对象,像StringIntBoolArrayDictionary

由于落得你没有提到确切的情况,我只是做一个例子:

class SpriteInfo { 
    let positionX: Double 
    let positionY: Double 
    let subnodes: [SpriteInfo] 

    // init here... 
} 

以上是属性列表类型。然后,您可以将其存储在UserDefaults中。

+0

谢谢你,我的节点有可能有数百个其他节点作为孩子,我需要保存所有这些节点,包括大小,形状,x/y位置,相对于前一个节点的角度......以及其他一些细节。是否没有办法简单地使用可编码或某种编码对整个事物进行归档?我想重绘整个'树'可能是可能的,但似乎是一个痛苦的方式来做到这一点... – Adam

+0

使用codable是好的,但你仍然必须编码所有这些属性。保存一个精灵节点的整个状态不是微不足道的。也许你错误地接近了这个问题。 @亚当 – Sweeper