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

本文介绍了如何通过Python将CCS编辑器导出的ExportJson文件转换成Lua代码,以提高UI创建速度。项目原本依赖json文件在内存中创建UI,后改为解析json成Lua表,但仍有优化空间。作者发现旧版CCS能直接导出Lua代码,但未能找到相应API。因此,作者自行编写了接近900行的Python工具,处理了递归和属性换算等问题,成功将JSON转换为lua代码,显著提升了界面加载速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前用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布局了~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值