将ccs导出的ExportJson文件转换成lua代码

之前用python写了个小工具,将xls配置转成lua表,省去解析配置的步骤和时间。

有了这基础,就有了这次的编写经历。

首先,考虑到项目目前用的版本quick-cocos2dx的创建UI方式是先解析了ui编辑器导出的json文件,存入内存然后再创建的,这样的方式肯定会有一个问题:创建ui的速度很慢。而我们项目当前的优化方式是,将json文件通过json.decode解析成lua表然后存入内存,然后每次加载ui就遍历表格创建。然而这样的方式还不是最优解。

之前ccs的版本有直接导出成lua代码文件的,然而只是出现了一下。还有导出bsd文件的,我也没找到lua的api去使用。

最终还是自己动手吧。

通过python导入json文件转换为字典类型,然后对比ExportJson文件里面的属性你就可以逐句将ui的各种控件给创建出来。

整个工具写完,竟然接近900行代码了!没办法,涉及了十几种控件。

说说python编程时注意的地方:

1、int 0 在比较中是等同于False的!比如,0 or 5,结果是返回0.

2、字典中如果没有某个key值,你直接获取是会报错的。

转换代码最纠结的地方在于要给lua文件写入递归的代码,而控件的长宽或锚点位置的换算在python是不可以的,比如ui:getContentSize()。解决方法是直接将相关属性定义成字符串,如:options["width"] = "ui:getContentSize()",然后需要和父类或子类进行换算时直接将过程换成字符串形式记录下来,让它在lua代码里面计算就好。最终整个lua代码里面没有了递归。

边写边琢磨quick里面的uiloader,最终成功地把json转换为可用的ui创建代码!整个游戏里的ui布局都通过这个工具转换出来的lua代码创建,测试通过!界面的加载时长得到了极大的提速。以后不用手写代码去构建ui布局了~

你可能感兴趣的:(quick-cocos2d-x)