#Cocos2dx手游開發(fā)#12 配表數(shù)據

歡迎前往個人博客 駑馬點滴 和視頻空間 嗶哩嗶哩-《挨踢日志》

序言

在游戲開發(fā)過程中驶睦,需要提供一套配置數(shù)據的解決方案屹蚊。這套解決方案中,就包含了配表數(shù)據

有兩種配表的形式我比較認可:

  1. 提供一個數(shù)據的在線管理平臺,此平臺提供了一套數(shù)據維護的解決方案
  2. 使用Excel表格,對數(shù)據進行配置

對于1而言命浴,它對數(shù)據做了有效的保護,能夠配置用戶的權限贱除,對于有保密需求的公司而言生闲,是一個很好的選擇。不足之處是月幌,提供此套解決方案的成本過高碍讯。

對于2而言,基本沒有開發(fā)的成本扯躺,維護人員在掌握了配表規(guī)則后捉兴,可以非常方便的使用,缺點是缅帘,數(shù)據的訪問權限完全開放轴术。

若未特別聲明难衰,本文所指的配表數(shù)據就是指Excel的.xls格式的配表數(shù)據钦无,以及將其轉換為程序所使用的.lua格式的配表數(shù)據

圍繞著配表數(shù)據,本篇將從以下幾個要點進行講述:

  • .xls配表的需求分析
  • .xls配表的設計
  • .lua格式的配表數(shù)據的格式設計
  • .lua格式的配表數(shù)據的生成工具

.xls配表數(shù)據的需求分析

我們先來看看配置人員是如何配置.xls表格的:

  1. 導航到配置數(shù)據的文件夾路徑
  2. 新建一份.xls表格盖袭,對其命名
  3. 打開.xls文件失暂,能夠設置屬性字段配置屬性數(shù)值
  4. 能夠建立不同的sheet鳄虱,每一個sheet能夠配置是否導出.lua文件(.lua文件是提供給程序使用的文件)
  5. 使用導出工具弟塞,導出.lua文件,提供給相關人員使用

從配置的過程拙已,我們分析并確定了我們需要完成的任務:

  1. 提供.xls配表的文件框架
  2. 提供.xls配表文件的命名規(guī)范
  3. 提供.xls配表文件的表格格式
  4. 提供.xls配表文件的導出配置
  5. 提供.xls配置文件導出到.lua的工具

.xls配表的設計

于是我們給出了我們的.xls配表的設計方案:

  • 配置人員在指定的文件夾xls下進行表格的配置
  • 此文件夾下只有.xls文件决记,不允許出現(xiàn)子文件夾,文件命名為[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
編號 名稱 金錢消耗 食物消耗 是否初始化 防御 數(shù)組1 數(shù)組2 數(shù)組3 數(shù)組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:

第一行是屬性字段名扩借,可用的字符集為(英文字母+數(shù)字+下劃線)椒惨,滿足通常意義下的變量命名規(guī)范
第二行是類型聲明
第三行是備注——不導出到最后的數(shù)據中

  • 導出設置
    .xls文件中,我們將一個sheet命名為output_xxxx潮罪,那么在后續(xù)的導出工具中康谆,就會得到一個名為xxxx.lua的文件,如果當前的.xls中嫉到,有多個以output_開頭的sheet沃暗,那么就會導出多個對應的.lua文件。
    單個sheet的配置表.png

    多個sheet的配置表:output_object_monster.png

    多個sheet的配置表:output_object_monster_level.png

.lua格式的配表數(shù)據的設計

這里給出一個生成的結果何恶,再解釋為何.lua配置成如此描睦。

使用上圖中的object_monster.xls
通過生成工具导而,生成了如圖的數(shù)據結構:

object_monster.lua

我們導出的object_monster.lua不但完整的保存了配置數(shù)據忱叭,還擁有對數(shù)據內容的一些訪問接口,先來看看如何使用數(shù)據表

數(shù)據表加載
local CnfObjectMonster = require("object_monster")

打印表數(shù)據項個數(shù)
print(">>>> 數(shù)據項個數(shù)")
print(CnfObjectMonster.len())
輸出
>>>> 數(shù)據項個數(shù)
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數(shù)據文件提供了非常便捷的屬性訪問接口今艺、遍歷接口韵丑,另一方面,對于真正的數(shù)據data虚缎,被屏蔽了對它的增加撵彻、減少或者修改它的任一內容的操作。

這樣的數(shù)據結構实牡,既提供了讀取數(shù)據的接口陌僵,又屏蔽了針對數(shù)據的修改操作十分令人滿意创坞。

.lua格式的配表數(shù)據的生成工具

關于這份工具碗短,我使用的是:

Github上的一份開源python腳本

在它的基礎之上,我進行了針對性的修改题涨。


結束

我們底層的數(shù)據框架搭建好了偎谁,工作和生活更加愉快起來了_~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市纲堵,隨后出現(xiàn)的幾起案子巡雨,更是在濱河造成了極大的恐慌,老刑警劉巖席函,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铐望,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機正蛙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門炕舵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人跟畅,你說我怎么就攤上這事咽筋。” “怎么了徊件?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵奸攻,是天一觀的道長。 經常有香客問我虱痕,道長睹耐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任部翘,我火速辦了婚禮硝训,結果婚禮上,老公的妹妹穿的比我還像新娘新思。我一直安慰自己窖梁,他們只是感情好,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布夹囚。 她就那樣靜靜地躺著纵刘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪荸哟。 梳的紋絲不亂的頭發(fā)上假哎,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天,我揣著相機與錄音鞍历,去河邊找鬼舵抹。 笑死,一個胖子當著我的面吹牛劣砍,可吹牛的內容都是我干的惧蛹。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼秆剪,長吁一口氣:“原來是場噩夢啊……” “哼赊淑!你這毒婦竟也來了?” 一聲冷哼從身側響起仅讽,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎钾挟,沒想到半個月后洁灵,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年徽千,在試婚紗的時候發(fā)現(xiàn)自己被綠了苫费。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡双抽,死狀恐怖百框,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情牍汹,我是刑警寧澤铐维,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站慎菲,受9級特大地震影響嫁蛇,放射性物質發(fā)生泄漏。R本人自食惡果不足惜露该,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一睬棚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧解幼,春花似錦抑党、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至台汇,卻和暖如春苛骨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背苟呐。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工痒芝, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人牵素。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓严衬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親笆呆。 傳聞我的和親對象是個殘疾皇子请琳,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內容