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

前端之家收集整理的这篇文章主要介绍了【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章)

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

猜你在找的Cocos2d-x相关文章