不少人看到ExcelAndJSON的第一反映是,这东西个人公司里面也有,那么我为何用呢?前端
作为开发来讲,每个工具的存在,都是为了加快游戏开发的速度。那么从无到有,从有到精。有和没有,好用和很差用的差异,每个都比前一个状况能提高50%的效率。(按IPD理论,极限速度是提高100%的效率,这里取保守数字)。web
ExcelAndJSON这个工具,前先后后设计思考大约有一年的时间。在以前的开发中,咱们使用大量的相似工具,数量有四五个,若是考虑评估阶段的话,是十几个。npm
这些工具或多或少都有这样那样的问题。而每个问题,都是开发中的一个大坑。下面咱们来看ExcelAndJSON是如何对这些问题提供解决方案的。后端
1、为何选择Python开发?数组
若是选择C++,那么是可使用Qt的。但C++领域,一直没有好用的开源跨平台Excel解析库。要么是闭源的,要么是只支持老格式xls不支持新格式xlsx,还有就是不可以跨平台。而这些,偏偏都是ExcelAndJSON自己必须具有的特性。手游开发,决定了必须跨平台。开源项目决定了依赖库必须也是开源的。Office的不断更新,决定了必须支持新格式。因此,C++被淘汰出局。架构
若是选择JS,由于个人方向是全栈式,目前来讲在Node.js领域,npm中我没有找到很是好用的Excel解析库。不少库都是直接把Excel读成一个巨型JSON对象,这种写法是我所不能接受的,太SB了。还有一个缘由在于,考虑将来扩展性,Node.js领域一直没有好用的UI库。另外,若是在web开发里面去找,我我的不是很喜欢BS架构的工具。因此,JS被淘汰出局。ide
若是选择Java。Java目前在前端手机游戏开发领域,已经没落。在后端,快速开发方向面临新兴方案的冲击(RoR, Python,Node.js,Go),并且高性能方向又始终干不过C++。对于各个公司自行修改维护可否找到适合的人,是个问题(前端几乎没人作Java,后端可能有人作Java)。因此,Java也被淘汰出局。工具
若是选择Python。首先,Python是跨平台的。其次,Python的学习速度很快,3~5年经验的人,上手时间顶多3~5天。再次,Python对于文件,文本,命令行处理,支持的很是之好。最后,Python里面也有方便的图形化工具,例如Qt就提供了Python版本。性能
因此,选择Python。学习
2、数组的做用
若是没有数组,那么在遇到成序列的数据时候,好比设计怪物AI中的技能部分,表的结构就会是相似这个样子:
length | skill1 | skill2 | skill3 | skill4 |
---|---|---|---|---|
4 | 火球 | 冰箭 | 魔法盾 | 顺移 |
3 | 突刺 | 半月 | 重斩 | |
1 | 治疗 |
若是你使用过相似这样的JSON结构,那么你应该知道,在填写数据的时候,容易出错,输出数据的时候会很难看(不论是填充null做为空数据,仍是不输出空白格,都同样难看。前者存在无用数据,后者丢失了表的结构,形成阅读困难),遍历代码写起来也很麻烦。
在JSON中,数组天生就能够得到其“元素个数”,而且能够方便的遍历。因此,咱们要在工具层面支持数组,这样才能使用JSON的这个特性。
3、“引用”该怎么用?
仍是举一个例子,在经营建造游戏中,对于建筑物属性的定义,每一个建筑的解锁等级这是一个固定值,该建筑占用的地块面积也是一个固定值。可是该建筑不一样等级的属性,则是彻底不相同的。若是是一个资源产生建筑,那么会有不一样的资源生成速度和资源上限,若是是一个出兵建筑,会有可造兵种类别,出兵时间。若是是一个防护建筑,会有***半径,伤害力等。这些不一样结构的字段,是没有可能放到一个二维表中的。
通常采用的方式是,会有几种方案:
1.会有一个主要的表来存放全部建筑包含的相同的字段,而后那些不相同的字段信息放到其余表中,而后经过主键跳转来访问。
2.直接拆成多个表来填数据
3.使用一些不一样的开关字段或分类字段,让同一个字段在不一样开关状态下有不一样的含义。如今游戏愈来愈复杂,这是最不建议的一种方式。
上面的3种方案,维护和修改为本都很高。
采用引用实现就很简单,仍是多个表,而后在主要表上,插入其余表的引用便可。
s | i | i | r | r | r |
---|---|---|---|---|---|
name | unlock_lv | area | lv1 | lv2 | lv3 |
基地 | 1 | 4 | 基地.lv1 | 基地.lv2 | 基地.lv3 |
铀矿 | 3 | 4 | 铀矿.lv1 | 铀矿.lv2 | 铀矿.lv3 |
兵营 | 5 | 1 | 兵营.lv1 | 兵营.lv2 | 兵营.lv3 |
4、主表模式的意义是什么?
游戏开发中,先后端对于数据的需求是不同的。前端须要的是一些显示数据,如资源名称,动做参数。后端须要的是一些计算数据,好比***力,防护力,伤害公式等。可是有一些数据,是先后端都须要的,好比:技能范围,技能类型等,这些数据既与前端的显示有关系也和后端的逻辑计算有关系。
那么这种状况下,按照传统方式,也会拆成若干表。通常是一张表前端用,一张表后端用。但问题在于,先后端都须要的数据该如何处理?在两个表之间同步是一个成本比较高的办法。
这就体现出主表模式的意义了。咱们能够把这些数据都组织在一张表上:
name | type | effect | atk |
---|---|---|---|
平砍 | 1 | 平砍.png | 10 |
横扫千军 | 3 | 横扫千军.png | 7 |
暴风雪 | 4 | 暴风雪.png | 8 |
而后在输出的时候,在主表模式中,分红两个来输出:
skill->skill_fn | name | type | effect |
---|---|---|---|
skill->skill_bn | name | type | atk |
最后
需求一直在变,工具要提供的是应对不一样需求的灵活性。