让cocos2d-x 3.0读取cocostudio中的csb文件
现在cocostudio的功能越来越完善,还支持导出二进制的csb文件。可惜现在项目使用的还是3.0版本,不支持csb解析,总不至于为了一个解析功能将整个库升级吧,这也太小题大做了。因为这个csb文件只是将明文的*.ExportJson文件变成二进制的,我猜测只是文件解析略有不同,其他使用都无须改变,所以现在我现在的思路是仅替换文件解析的类。
以一个骨骼动画为例(项目资源和源码在文章下面下载),3.0中加载并播放一个骨骼动画的代码是:
- ArmatureDataManager::getInstance()->addArmatureFileInfo("DemoPlayer.ExportJson");
- autoarm=Armature::create("DemoPlayer");
- this->addChild(arm);
- arm->setPosition(Point(300,300));
- arm->getAnimation()->play("walk");
- //一般放在onExit或析构中
- ArmatureDataManager::destroyInstance();
可以看出,第一行就是加载ExportJson文件,但如果换成"DemoPlayer.csb"打开出错,为什么呢?前面已经说过,3.0不支持了=。=!!
废话太多了。。。下面是详细步骤:
1 复制源码:跟进addArmatureFileInfo()可以发现CCS资源的解析是由DataReaderHelper类提供的,因此从3.2的cocos/editor-support/cocostudio目录下复制CCDataReaderHelper和CocoLoader源文件(.h和.cpp)共四个文件到3.0的cocos/editor-support/cocostudio目录下替换掉原来文件。
2 然后在工程中将CocoLoader.h和CocoLoader.cpp添加到cocostudio目录中:
3 修改CCDataReaderHelper.cpp中的错误。
(1) 头文件路径不一样,去除"base/"。如#include "base/CCDirector.h"改为#include "CCDirector.h",把下面两个CCScheduler.h和ccUtils.h路径也改了。
(2) 将Vec2类名改称Point,共两处,仔细看报错。(3.2中Point类名又被改成Vec2了,可怜的Point又一次被改名了。。。)
(3) CCDataReaderHelper.cpp还有十几处Use of undeclared identifier 'utils'错误,这是因为3.0扩展了ccUtils.h,增加了几个新功能,修改方法见第4条。
4 跟进ccUtils.h中,也可以直接在cocos/2d/support目录下找到。
(1) 在.h中加入以下头文件:
- #include<vector>
- #include<string>
- <spanstyle="color:#FF0000;"><strong></strong></span>#include"2d/CCNode.h"
- <spanstyle="color:#FF0000;"><strong></strong></span>#include"ccMacros.h"