25 Star 142 Fork 64

Nomat / CocosGame

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
游戏数据库模块设计.md 2.98 KB
一键复制 编辑 原始数据 按行查看 历史
Nomat 提交于 2020-10-30 22:16 . 文档修正

游戏数据库模块设计

游戏一般会存在大量的数据(小游戏除外),最典型的就是各种界面、活动和任务的配置。当然网络游戏还是会存在大量的联网数据,但这不是我们今天讨论的内容。这些游戏数据可以直接写在游戏的程序中,但是这种做法并不好,如果将游戏数据直接写在程序中会出现以下问题;

  1. 数据修改麻烦,特别是使用静态语言编写游戏,如C++,每次改动都需要重新编译。当然对于lua语言虽然不需要重新编译,但是查找程序中数据的位置也是很麻烦的,特别是程序比较庞大的情况。
  2. 对于数据的修改每次都需要程序员来做。其实这是一个很简单的操作的,完全不需要程序来完成,程序员最好只写逻辑就可以了。而且如果是调试数据效果,那是需要大量的尝试的,那么这个程序员就浪费在这里了。

由于种种问题,就出现了游戏数据库。当然游戏中使用的数据库并不一定需要像mysql这样需要SQL查询的。对于简单的游戏,比如我们的框架游戏使用的仅仅是几张表而已。当然如果真的是有大量数据库的游戏,可以使用sqlite,当然它的数据库应该很大的时候才使用。最好是可以2种方式一起使用。

我们现在只讨论使用表的情况

数据库编辑工具Excel

游戏的数据库其实就是一系列简单的数据表,所以我们使用Excel作为游戏数据库工具。Excel是一种非常强大的电子表格工具,会的人应该很多,而且应该是游戏策划必备技能。我们可以把游戏很多的固定的数据方便的写进Excel中。
当然这只能作为游戏的原始资源,我们可以把Excel放到<游戏包>/origins/目录下。

数据库资源文件生成

由于现在数据库使用Excel编辑的,但是在游戏中我们最好不要直接使用Excel文件,不必要而且效率也很低。其实当前框架中我们使用的是把Excel文件转换为JSON格式的文件。
JSON文件如果太大加载不是很慢吗?这个问题完全不用担心,我们提到了JSON优化问题,在打包阶段可以把数据库JSON文件完全转换为lua或者luac文件,这样可读性和效率都兼顾到了。

数据库模块的本质(不考虑使用sqlite)

数据库模块本质上就是几张表。它通过监听游戏索引模块,根据每个游戏包的加载和卸载来合并各个游戏包的数据库表。

数据库模块的使用

数据库模块是一个单例,其本身就是数据库,我们只需要通过传统的方式就可以使用数据库中的值。例如;

dbMgr.configs.spmax     -- 获得数据库 - 配置表 - 谋略最大值
  • dbMgr 数据库对象
  • configs configs表
  • spmax spmax键

这样就引用了数据库中的指定值,是不是很简单。 在当前框架中数据库模块在CocosGame/game/main/src/app/main/modules/database/文件夹中。

Lua
1
https://gitee.com/nomat/CocosGame.git
git@gitee.com:nomat/CocosGame.git
nomat
CocosGame
CocosGame
master

搜索帮助