【Cocos2d-x】浅谈手游配置表读取方案

如果游戏逻辑用Lua开发的话,那么配表读取就很方便了,可以写一个转换工具,把策划配好的Excel表转换为Lua文件,直接用table保存所有的配表数据,Lua直接读取就好了,不需要解析,效率也非常高。


但我前几个游戏都是用C++开发,而且由于上一个项目配表比较多(估计有上百个),让我不得不关注配表读取的效率问题。

一开始的解决方案是写了一个工具,把Excel转换成xml文件,然后用TinyXml读取,但后来发现TinyXml解析是非常慢的,后来为了优化速度,把配表读取改成了RapidXml(它用了内存池和字符串浅拷贝等方式提高效率),简单测试过,配表读取时间大概是原来是1/3。

(p.s. 插一句,其实Cocos2d-x精灵框帧的plist文件默认是用TinyXml解析,如果都改成RapidXml,相信会有性能提升。)


后来我注意到Cocos2d-x 3.x版本的加载3D模型文件.c3b就是用二进制读取的方式(引擎代码在CCBundle3D),用二进制的方式比起用xml、json那些方式,无论是在文件的大小上,还是读取的效率上,都有质的提升。于是我开发了一个工具生成二进制配表文件,写文件的时候,对于各种类型:

1. 整型:用1~8个字节保存,很小的数字用1byte保存,很大的数字用8byte保存

2. 浮点型:4byte或8byte保存

3. 字符串:先用4byte保存字符串长度,后面再接上字符串内容

读取的时候,按照写的顺序读取。

经简单测试,由于不用解析,读取总时间大概是RadpidXml的1/10。


其实还有其他读取配表文件的方法:

1. 用.csv文件,用逗号分隔格式,文本格式

2. 用google的protobuf,其实也是二进制格式,但可以用key-value的方式,效率也非常高

3. 还是用Lua保存,但读取的时候用C API读取(参见《Lua程序设计》 24 25章)

(这几个方法我都没测试过效率,没权发表评论,请测试过效率的朋友指点)





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值