日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

ExcelAndJSON的设计决策

發(fā)布時間:2024/1/17 javascript 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ExcelAndJSON的设计决策 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

很多人看到ExcelAndJSON的第一反映是,這東西我的公司里面也有,那么我為什么用呢?


做為開發(fā)來說,每一個工具的存在,都是為了加快游戲開發(fā)的速度。那么從無到有,從有到精。有和沒有,好用和不好用的差別,每一個都比前一個情況能提升50%的效率。(按IPD理論,極限速度是提升100%的效率,這里取保守數(shù)字)。


ExcelAndJSON這個工具,前前后后設(shè)計思考大約有一年的時間。在之前的開發(fā)中,我們使用大量的類似工具,數(shù)量有四五個,如果考慮評估階段的話,是十幾個。


這些工具或多或少都有這樣那樣的問題。而每一個問題,都是開發(fā)中的一個大坑。下面我們來看ExcelAndJSON是如何對這些問題提供解決方案的。


一、為什么選擇Python開發(fā)?


如果選擇C++,那么是可以使用Qt的。但C++領(lǐng)域,一直沒有好用的開源跨平臺Excel解析庫。要么是閉源的,要么是只支持老格式xls不支持新格式xlsx,還有就是不能夠跨平臺。而這些,恰恰都是ExcelAndJSON本身必須具備的特性。手游開發(fā),決定了必須跨平臺。開源項目決定了依賴庫必須也是開源的。Office的不斷更新,決定了必須支持新格式。所以,C++被淘汰出局。


如果選擇JS,因為我的方向是全棧式,目前來說在Node.js領(lǐng)域,npm中我沒有找到非常好用的Excel解析庫。很多庫都是直接把Excel讀成一個巨型JSON對象,這種寫法是我所不能接受的,太SB了。還有一個原因在于,考慮未來擴展性,Node.js領(lǐng)域一直沒有好用的UI庫。另外,如果在web開發(fā)里面去找,我個人不是很喜歡BS架構(gòu)的工具。所以,JS被淘汰出局。


如果選擇Java。Java目前在前端手機游戲開發(fā)領(lǐng)域,已經(jīng)沒落。在后端,快速開發(fā)方向面臨新興方案的沖擊(RoR, Python,Node.js,Go),而且高性能方向又始終干不過C++。對于各個公司自行修改維護能否找到適合的人,是個問題(前端幾乎沒人做Java,后端可能有人做Java)。所以,Java也被淘汰出局。


如果選擇Python。首先,Python是跨平臺的。其次,Python的學(xué)習(xí)速度很快,3~5年經(jīng)驗的人,上手時間頂多3~5天。再次,Python對于文件,文本,命令行處理,支持的非常之好。最后,Python里面也有方便的圖形化工具,例如Qt就提供了Python版本。


所以,選擇Python。


二、數(shù)組的作用


如果沒有數(shù)組,那么在遇到成序列的數(shù)據(jù)時候,比如設(shè)計怪物AI中的技能部分,表的結(jié)構(gòu)就會是類似這個樣子:

lengthskill1skill2skill3skill4
4火球冰箭魔法盾順移
3突刺半月重斬
1治療



如果你使用過類似這樣的JSON結(jié)構(gòu),那么你應(yīng)該知道,在填寫數(shù)據(jù)的時候,容易出錯,輸出數(shù)據(jù)的時候會很難看(不管是填充null作為空數(shù)據(jù),還是不輸出空白格,都一樣難看。前者存在無用數(shù)據(jù),后者丟失了表的結(jié)構(gòu),造成閱讀困難),遍歷代碼寫起來也很麻煩。


在JSON中,數(shù)組天生就可以獲得其“元素個數(shù)”,并且可以方便的遍歷。所以,我們要在工具層面支持數(shù)組,這樣才能使用JSON的這個特性。


三、“引用”該怎么用?


還是舉一個例子,在經(jīng)營建造游戲中,對于建筑物屬性的定義,每個建筑的解鎖等級這是一個固定值,該建筑占用的地塊面積也是一個固定值。但是該建筑不同等級的屬性,則是完全不相同的。如果是一個資源產(chǎn)生建筑,那么會有不同的資源生成速度和資源上限,如果是一個出兵建筑,會有可造兵種類別,出兵時間。如果是一個防御建筑,會有***半徑,傷害力等。這些不同結(jié)構(gòu)的字段,是沒有可能放到一個二維表中的。


一般采用的方式是,會有幾種方案:

1.會有一個主要的表來存放所有建筑包含的相同的字段,然后那些不相同的字段信息放到其他表中,然后通過主鍵跳轉(zhuǎn)來訪問。

2.直接拆成多個表來填數(shù)據(jù)

3.使用一些不同的開關(guān)字段或分類字段,讓同一個字段在不同開關(guān)狀態(tài)下有不同的含義。現(xiàn)在游戲越來越復(fù)雜,這是最不建議的一種方式。


上面的3種方案,維護和修改成本都很高。


采用引用實現(xiàn)就很簡單,還是多個表,然后在主要表上,插入其他表的引用即可。

siirrr
nameunlock_lvarealv1lv2lv3
基地14基地.lv1基地.lv2基地.lv3
鈾礦34鈾礦.lv1鈾礦.lv2鈾礦.lv3
兵營51兵營.lv1兵營.lv2兵營.lv3


四、主表模式的意義是什么?


游戲開發(fā)中,前后端對于數(shù)據(jù)的需求是不一樣的。前端需要的是一些顯示數(shù)據(jù),如資源名稱,動作參數(shù)。后端需要的是一些計算數(shù)據(jù),比如***力,防御力,傷害公式等。但是有一些數(shù)據(jù),是前后端都需要的,比如:技能范圍,技能類型等,這些數(shù)據(jù)既與前端的顯示有關(guān)系也和后端的邏輯計算有關(guān)系。


那么這種情況下,按照傳統(tǒng)方式,也會拆成若干表。一般是一張表前端用,一張表后端用。但問題在于,前后端都需要的數(shù)據(jù)該如何處理?在兩個表之間同步是一個成本比較高的辦法。


這就體現(xiàn)出主表模式的意義了。我們可以把這些數(shù)據(jù)都組織在一張表上:

nametypeeffectatk
平砍1平砍.png10
橫掃千軍3橫掃千軍.png7
暴風(fēng)雪4暴風(fēng)雪.png8



然后在輸出的時候,在主表模式中,分成兩個來輸出:

skill->skill_fnnametypeeffect
skill->skill_bnnametypeatk


最后


需求一直在變,工具要提供的是應(yīng)對不同需求的靈活性。





總結(jié)

以上是生活随笔為你收集整理的ExcelAndJSON的设计决策的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。