首页 > Personal > cocos2d-x > cocos2d-x: 关于多平台的资源读取
2014
01-23

cocos2d-x: 关于多平台的资源读取

最近在cocos2d-x上做资源管理,参照exfat格式把资源打包,加密,压缩,再通过自己的资源系统来管理资源。

首先发现,cocos2d-x在这方面的接口并不很友好,因为资源自己加载,所以需要使用纯数据接口缓存图片。图片缓存CCTextureCache::addImage还好,可以找到相应的接口。plist资源CCSpriteFrameCache,只有一个私有的addSpriteFramesWithDictionary,没办法只能修改cocos2d-x的代码,本来我项目里用cocos2d-x的原则是只加代码,不改代码的。而且没有从数据到CCDictionary的接口,只能自己写一个解析xml到CCDictionary的功能。

其次,不同平台的资源读取也遇到了问题。我文件读取是用c的fopen、fread。先是在ios上,读取png没有问题,但是读取plist的时候,文件大小永远都不对,大概只有源文件的四分之一。看了cocos2d-x的代码,他本身iso上读取plist也是用的系统函数来做的,研究了一下貌似plist是ios内置支持的文件格式,安装后会自动转成二进制文件,在iso里只能使用系统api读取了,要不然就是把plist后缀名换掉。android上,问题更多,fopen根本打不开资源文件,看了下代码,发现cocos2d-x里资源都是通过apk文件来读取去,单纯的fopen肯定不行了,只能使用CCFileUtils::getFileData来取得资源数据了。这样想做资源管理只能在程序启动时把资源包拷贝到Cache文件夹下,再做处理了。或者直接读入内存,不过资源过大的话消耗的内存会过多。写了一个user_data类使用json来保存数据,json使用libjson解析,但是在android上json_write写入文件的json解析时经常会失败,android调试只能靠log,还不知道原因,不过用json_write_formatted就没有问题了。

最后编辑:
作者:wy182000
这个作者貌似有点懒,什么都没有留下。

留下一个回复