游戏数据库理论

Gaming Databases Theory

我需要一些有关 Android 游戏的数据管理理论的帮助。我正在开发一个角色扮演游戏,我希望角色可以定制不同的服装:帽子、动力装甲武器等。玩家可以从商店购买这些,然后选择穿上它们或更换服装,但保留'wardrobe ' 中的项目穿不同的时间。

到目前为止,我的大部分数据都是通过 SharedPreferences 保存的。但是我知道这对于玩家可以购买 100 种不同类型的物品来说是不可持续的,然后保存起来在不同的场合佩戴。

通过研究,我开始相信 SQLite 在 Android Studio 中是最好的。有人会同意这个或有更好的建议吗?

我知道 SQLite 允许我以 'not bought' 状态预加载数据。当'bought'这个状态会改变,玩家可以'wear'或'not wear'衣服。

如果 SQLite 是最好的,我该怎么做最好?此外,SQLite 是否需要很长时间才能加载并因此减慢 activity 的打开速度?你能否将 SQLite 与 SharedPreferences 结合起来记住最新选择的服装?

最后,SQLite 是其他应用程序用来存储数据的工具吗(尤其是通过 Android Studio 构建的应用程序)? Clash of Clans 或 Tapped Out 等游戏如何保存拥有的物品或网格位置等数据?

感谢您的支持或理论。

TL;DR 是的,SQLite 没问题。

让我从 Clean Code 的角度来回答这个问题。

下面的答案对于初学者来说可能太复杂了,但我希望它能对您的长期帮助有所帮助。

我认为您的实际问题是 - 如何保存我以后需要的东西?好吧,在大多数情况下,只要您以后可以可靠地读回数据,您将如何存储数据并不重要。因此,与其担心 "should I use X?",不如从定义 class 的接口开始,这将解决您的问题。

例如,我们称它为PlayerItemsRepository,它负责保存你的东西并读回。如何?暂时还不知道,以后再说吧。

public interface PlayerItemsRepository {

    void saveItems(List<Item> items);

    List<Item> readItems();

}

好的,现在我们可以集成SQLite了吗?让我们稍等片刻——它是与 SQLite 一起工作的一些样板代码,所以我们将创建这个接口的一些简单实现,它只会序列化列表并将其保存到文件中(假设你的 ItemSerializable)。或者,如果我们连那个都懒得做,那么我们将我们的 List<Item> 转换为 JSON 并将其保存到 SharedPreferences 怎么样(使用 Gson 库之类的东西,它非常简单采用)?

现在,如果您只保存 100 件物品(这是一个相当小的数量),我很确定所有这些 "easy" 解决方案都可以正常工作,您将能够忘记整个故事。

如果你会开始运行需要某种关系模型,或者你不能接受序列化的性能,或者你需要更快的和更复杂的搜索机制 - 然后 你可能会考虑切换到 SQlite。 Android 应用程序很常见,尽管(正如我之前提到的)API 有点麻烦并且需要您编写相当多的样板文件 - 这最终需要您花更多时间在上面并且小数据集可能不值得花时间。