如何在SpriteKit游戏中保存游戏进度

时间:2016-02-01 16:38:32

标签: swift sprite-kit

我目前正在使用SpriteKit,GameplayKit和JSTileMap开发游戏。我正在尝试实现一个保存游戏进度的功能。我尝试使用NSCoder对每个类中的所有变量进行编码/解码,但XCode告诉我所有使用Entity和Component的类都不符合NSCoding。那么如何保存我的游戏数据呢?我可以只对主要游戏场景中的所有内容进行编码吗?它会起作用吗?

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

确保您正确符合NSCoding协议,应该如下所示

class Entity : GKEntity,NSCoding
{
    func encodeWithCoder(aCoder: NSCoder)
    {

    }
    required init?(coder aDecoder: NSCoder)
    {

    }
}

class Component : GKComponent,NSCoding
{
    func encodeWithCoder(aCoder: NSCoder)
    {

    }
    required init?(coder aDecoder: NSCoder)
    {

    }
}

答案 1 :(得分:1)

如何创建名为GameData的Singleton类,其中包含您需要保存的所有属性,如得分,高分等。

就像我在这里发布的例子一样 SpriteKit: Why does it wait one round for the score to update? (Swift)

正如其他人所说,你的问题非常广泛。

答案 2 :(得分:0)

StackOverflows的价值在于帮助开发人员解决特定代码中非常具体的问题。像这样的问题更多的是要求主观建议,并且会被成千上万的自我指定的问题 - 沙皇所折服。那就是说,这是我的看法:

我正在努力解决一个非常类似的问题,我正在创建一个依赖于大量对象和深层嵌套词典的应用程序。我开始尝试NSEncode对象本身,并在启动过程中解压缩和加载这些对象。我很快发现这是有问题的,容易出错,而且过于复杂。我现在尝试的方法略有不同。我正在做的是在游戏中偶尔保存这些关键词典,方法是将它们转换为NSData集并将它们存储在NSUserDefault中。当游戏启动时,我解压缩所有这些词典并用它们构建对象。我发现这种方法(到目前为止)更容易,只需保存构建对象的数据也可以节省空间。