最近在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就没有问题了。
- 本文固定链接: http://www.wy182000.com/2014/01/23/cocos2d-x-关于多平台的资源读取/
- 转载请注明: wy182000 于 Studio 发表