【问题标题】:Best way to store game data on iPhone?在 iPhone 上存储游戏数据的最佳方式是什么?
【发布时间】:2012-03-23 09:26:38
【问题描述】:

我正在创建一个具有多个级别的游戏,并且这些级别包含多个纹理和形状。

在 iphone/ipad 上存储这些数据的最佳方式是什么?

我正在考虑使用 SQLite 或 coredata 来存储它。但我还需要实现一个从远程服务器更新游戏数据的功能(在游戏购买中)。 SQLite 是存档的最佳方式吗?在更新内容时我将如何更新 SQLite 内容(下载 .zip 解压缩并导入 db/directory)?如果有人有任何指示,我将不胜感激!

【问题讨论】:

    标签: objective-c ios


    【解决方案1】:

    最简单的方法是将它们存储在 plist(这是一个 xml 文件)中。 SQLite 将要求您将其存储在应用程序沙箱之外的文档目录中(因为在原始应用程序中包含一个 sqlite 是只读的)。

    除此之外,您还可以使用 coredata。

    【讨论】:

    • +1 用于提及 sql 沙箱。 plist 的问题在于,如果每个更新都有自己的 plist,那么将每个 plist 加载到游戏中会很麻烦。而且在 plist 中搜索关系也会很慢而且很痛苦。
    • (顺便说一句,它是应用程序沙箱,而不是 SQL 沙箱——但 :))为什么不序列化您的对象并在您的服务器中反序列化它们。诀窍部分是不使用标准的 ios 例程对它们进行序列化。然后,您还可以将数据存储在服务器端、数据库中,当用户请求数据(刷新、重新安装应用程序或仅用于查询)时,它们将被重新创建。这似乎是在重新发明轮子,但有时这是必要的。
    • 我真的很希望客户端存储更新附带的项目。我真正想要存档的是类似于愤怒的小鸟如何处理这个的东西(你可以通过更新获得新的水平)。
    • 我在需要更新内容的基于订阅的应用程序(外部)中实现了相同的功能(一个大的 SQLITE 文件)。诀窍是将 udid 或信息存储到您的服务器(有点不可知,以符合个人数据法等)并在那里进行清点,以便可以相应地检索和更新每个用户的信息。
    • 所以如果我理解正确,您可以使用设备唯一 ID 向远程服务器发送请求,并检查要加载的内容(基于以前的更新/购买)?下载的内容看起来如何(包含 sqlite db 的 zip)?您如何将内容存储在应用程序中(在 sqlite 数据库中)?如果您能描述一下更新和部署更新的过程(如果它不是秘密的话),将不胜感激。谢谢
    【解决方案2】:

    想想 SQLite 和 Core Data 带来了什么是件好事。两者都非常适合查询,但您大多只需要获取给定 ID 的对象?在这种情况下,您还可以考虑简单的文件存储。我们使用了 plist 索引和常规文件来存储一些游戏数据,这是一种技术开销低的简单解决方案。

    【讨论】:

    • 我需要获取所有关卡和所有关卡元素并从中构造对象(精灵和物理形状)。这就是为什么我想使用 SQLite。并且从远程服务器更新内容将不那么痛苦(如果我将所有数据存储在文件中,我将不必每次更新一个新文件 - 如果会有很多更新,那将是一团糟)
    • 我认为 SQLite 不会让您更轻松地加载。至于更新,我无法准确想象你的用例,所以我无法对此发表评论。
    • 好吧,如果我使用 SQL,加载会很简单,因为与游戏相关的所有内容都将存储在单个数据库中,因此游戏将从该数据库初始化。而且更新也可以通过将更新数据库内容复制到本地数据库(而不是来自 N 个文件)来完成。
    猜你喜欢
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多