【问题标题】:best way to save/load iphone game data保存/加载 iphone 游戏数据的最佳方法
【发布时间】:2010-09-23 09:19:41
【问题描述】:

我正在开发一款益智游戏,游戏引擎包含复杂的对象层次结构,从游戏角色到矢量再到过渡动画。根据游戏状态,它们可能加起来从 10 到 1000(在极端情况下)。我一直在推迟这一刻,直到我不得不着手保存和加载所有这些烂摊子,因为我没有这方面的经验,但现在我担心的那一刻即将到来。

为此使用 NSKeyedArchiver 是个好主意吗?它的概念似乎很强大。这样我就可以重建对象状态,但这是否包括已保存对象之间的指针?它在性能方面的表现如何?系统是否有时间在应用程序终止时将所有这些对象保存在磁盘上?

【问题讨论】:

    标签: iphone cocoa-touch archiving


    【解决方案1】:

    NSKeyedArchiver 非常强大,但它不会让您保留对象之间的链接(除非您在取消归档后自己添加它们)。如果您可以/需要以原子方式存储整个数据集,那么 NSKeyedArchiver 可能是要走的路,但如果有任何比父子关系更复杂的事情,您将需要进行一些“重新水化”。

    我们有一个复杂的数据对象层次结构,我们将它们存储到 SQLite 数据库中,并在提取它们时重新连接它们。

    【讨论】:

    • 谢谢本。我很好奇,在 iphone 上使用 sqlite 有什么好处?从一个翻译到另一个不是很多工作吗?而且,你也在做游戏吗?我很好奇游戏的常见做法是什么(或者是否有普遍做法)。
    • 在 SQLite 行和 ObjC 对象之间进行操作并不算多。 SQLite 提供增量存储(即,您不必每次都写出整个数据集)、搜索、排序等。我们在填字游戏中使用它,以及我们的下一个非语法产品(我提到的那个) .
    • 如果用户退出并重新启动,我只需要保存 1 个游戏状态。所以每次我保存一个新的游戏状态时,我几乎都会删除整个数据库。就我而言,我可以从 sqlite 中获得什么好处?
    • 在这种情况下,您可能不会从 SQLite 中获得太多好处;如果数据结构不是太复杂,你可以考虑使用一个简单的 NSDictionary。
    • 本,我不认为这是正确的。键控归档器完全支持循环和任何其他类型的图关系。你甚至可以在图中有弱引用。
    【解决方案2】:

    我选择了 NSKeyedArchiver,它确实维护对象之间的引用。见这里:Easy way to archive interlinked objects

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-14
      相关资源
      最近更新 更多