#Cocos2dx手游开发#12 配表数据

欢迎前往个人博客 驽马点滴 和视频空间 哔哩哔哩-《挨踢日志》

序言

在游戏开发过程中,需要提供一套配置数据的解决方案。这套解决方案中,就包含了配表数据

有两种配表的形式我比较认可:

  1. 提供一个数据的在线管理平台,此平台提供了一套数据维护的解决方案
  2. 使用Excel表格,对数据进行配置

对于1而言,它对数据做了有效的保护,能够配置用户的权限,对于有保密需求的公司而言,是一个很好的选择。不足之处是,提供此套解决方案的成本过高。

对于2而言,基本没有开发的成本,维护人员在掌握了配表规则后,可以非常方便的使用,缺点是,数据的访问权限完全开放。

若未特别声明,本文所指的配表数据就是指Excel的.xls格式的配表数据,以及将其转换为程序所使用的.lua格式的配表数据

围绕着配表数据,本篇将从以下几个要点进行讲述:

  • .xls配表的需求分析
  • .xls配表的设计
  • .lua格式的配表数据的格式设计
  • .lua格式的配表数据的生成工具

.xls配表数据的需求分析

我们先来看看配置人员是如何配置.xls表格的:

  1. 导航到配置数据的文件夹路径
  2. 新建一份.xls表格,对其命名
  3. 打开.xls文件,能够设置属性字段配置属性数值
  4. 能够建立不同的sheet,每一个sheet能够配置是否导出.lua文件(.lua文件是提供给程序使用的文件)
  5. 使用导出工具,导出.lua文件,提供给相关人员使用

从配置的过程,我们分析并确定了我们需要完成的任务:

  1. 提供.xls配表的文件框架
  2. 提供.xls配表文件的命名规范
  3. 提供.xls配表文件的表格格式
  4. 提供.xls配表文件的导出配置
  5. 提供.xls配置文件导出到.lua的工具

.xls配表的设计

于是我们给出了我们的.xls配表的设计方案:

  • 配置人员在指定的文件夹xls下进行表格的配置
  • 此文件夹下只有.xls文件,不允许出现子文件夹,文件命名为[module1][_module2].xls,其中module1, module2为模块标识,如
文件夹 PATH 列表
卷序列号为 000E-EB46
C:.
└─xls
        example_building.xls
        object_monster.xls
        object_role.xls
        system_daily.xls

我们通过文件名,就可以方便的知道:
object模块下有子模块monsterrole的配置.
system模块有子模块daily的配置.

  • .xls配置格式
    example_building.xls为例
id name use_money use_food is_init defense args1 args2 args3 args4
i s i f b i ai af as ab
编号 名称 金钱消耗 食物消耗 是否初始化 防御 数组1 数组2 数组3 数组4
1 house 1000 2.33 TRUE 100 1;2;3 1.23;2;3.23 sdf;23e;s true;false;true
2 house2 123 336.2 TRUE 1;2;3 1.23;2;3.23 你好;你在哪 true;false
3 456 222.33665 FALSE 130 3;2;5;; 1.23;2;3.23 我在这里啊;你在那;呢 false;true
4 farm 100 220 FALSE 200 2;3 1.23;2;3.23 df;ssd;dd;dd
5 house5 22.1 2343;6;6;;;7 3;6.3;6;;;7 1.23;2;3.23 true;true
6 horse6 200 FALSE 333 2e;w;e;we false;false;false;false
Note:

第一行是属性字段名,可用的字符集为(英文字母+数字+下划线),满足通常意义下的变量命名规范
第二行是类型声明
第三行是备注——不导出到最后的数据中

  • 导出设置
    .xls文件中,我们将一个sheet命名为output_xxxx,那么在后续的导出工具中,就会得到一个名为xxxx.lua的文件,如果当前的.xls中,有多个以output_开头的sheet,那么就会导出多个对应的.lua文件。
    单个sheet的配置表.png

    多个sheet的配置表:output_object_monster.png

    多个sheet的配置表:output_object_monster_level.png

.lua格式的配表数据的设计

这里给出一个生成的结果,再解释为何.lua配置成如此。

使用上图中的object_monster.xls
通过生成工具,生成了如图的数据结构:

object_monster.lua

我们导出的object_monster.lua不但完整的保存了配置数据,还拥有对数据内容的一些访问接口,先来看看如何使用数据表

数据表加载
local CnfObjectMonster = require("object_monster")

打印表数据项个数
print(">>>> 数据项个数")
print(CnfObjectMonster.len())
输出
>>>> 数据项个数
3

属性访问
local printMonster = function(monsterID)
    local monsterName = CnfObjectMonster.name(monsterID)
    local monsterResName = CnfObjectMonster.res_name(monsterID)
    print(string.format(">>>> monster of id(%d), its name is %s, its resource name is %s", monsterID, monsterName, monsterResName))
    local monsterSkillList = CnfObjectMonster.skill_list(monsterID)
    print(">>>> 打印技能列表")
    monsterSkillList.walk(print)
    print(">>>> 技能列表长度")
    print(monsterSkillList.len())
end
local monsterID = 10001
printMonster(monsterID)
输出
>>>> monster of id(10001), its name is 哥布林小怪, its resource name is spine_small_goblin
>>>> 打印技能列表
1   101
2   102
>>>> 技能列表长度
2

访问ID列表
local ids = CnfObjectMonster.getIDList()
for k, v in ipairs(ids) do 
    print(k, v)
end 
输出
1   10001
2   10002
3   10003

全表遍历
CnfObjectMonster.walk(function(k, id)
    printMonster(id)
end)
输出
>>>> monster of id(10001), its name is 哥布林小怪, its resource name is spine_small_goblin
>>>> 打印技能列表
1   101
2   102
>>>> 技能列表长度
2
>>>> monster of id(10002), its name is 哥布林精英, its resource name is spine_elite_goblin
>>>> 打印技能列表
1   101
2   102
3   103
>>>> 技能列表长度
3
>>>> monster of id(10003), its name is 哥布林头领, its resource name is spine_boss_goblin
>>>> 打印技能列表
1   101
2   102
3   104
4   105
>>>> 技能列表长度
4

我们可以看到:.lua数据文件提供了非常便捷的属性访问接口、遍历接口,另一方面,对于真正的数据data,被屏蔽了对它的增加、减少或者修改它的任一内容的操作。

这样的数据结构,既提供了读取数据的接口,又屏蔽了针对数据的修改操作十分令人满意

.lua格式的配表数据的生成工具

关于这份工具,我使用的是:

Github上的一份开源python脚本

在它的基础之上,我进行了针对性的修改。


结束

我们底层的数据框架搭建好了,工作和生活更加愉快起来了_~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,423评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,147评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,019评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,443评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,535评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,798评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,941评论 3 407
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,704评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,152评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,494评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,629评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,295评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,901评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,742评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,978评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,333评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,499评论 2 348

推荐阅读更多精彩内容