让cocos2d-x 3.0读取cocostudio中的csb文件
2014-08-19 14:04
274 查看
让cocos2d-x 3.0读取cocostudio中的csb文件
现在cocostudio的功能越来越完善,还支持导出二进制的csb文件。可惜现在项目使用的还是3.0版本,不支持csb解析,总不至于为了一个解析功能将整个库升级吧,这也太小题大做了。因为这个csb文件只是将明文的*.ExportJson文件变成二进制的,我猜测只是文件解析略有不同,其他使用都无须改变,所以现在我现在的思路是仅替换文件解析的类。以一个骨骼动画为例(项目资源和源码在文章下面下载),3.0中加载并播放一个骨骼动画的代码是:
ArmatureDataManager::getInstance()->addArmatureFileInfo("DemoPlayer.ExportJson"); auto arm = 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> <span style="color:#FF0000;"><strong> </strong></span>#include "2d/CCNode.h" <span style="color:#FF0000;"><strong> </strong></span>#include "ccMacros.h"
(2) 在.h的cocos2dx命名空间内加入以下代码:
namespace utils { double atof(const char* str); }(3) 在.cpp的cocos2dx命名空间内加入以下代码:
namespace utils { #define MAX_ITOA_BUFFER_SIZE 256 double atof(const char* str) { if (str == nullptr) { return 0.0; } char buf[MAX_ITOA_BUFFER_SIZE]; strncpy(buf, str, MAX_ITOA_BUFFER_SIZE); // strip string, only remain 7 numbers after '.' char* dot = strchr(buf, '.'); if (dot != nullptr && dot - buf + 8 < MAX_ITOA_BUFFER_SIZE) { dot[8] = '\0'; } return ::atof(buf); } }
5 至此就大功告成了,但是如果仍报CocoLoader与CCDataReaderHelper的链接错误,那么需要手动在"cocos2dx IOS"的"Build Phases"上手动添加CocoLoader的.h和.cpp文件。下面给出添加步骤:
(1) 选择项目目录下的"cocos2d_libs.xcodeproj",在右边"build all libs iOS"下面的"cocos2dx iOS"库(如果要在Mac上运行,则选择"build all libs Mac"下面的"cocos2dx iOS"库),再选中右边的"Build Phases"。如下图:
(2) 点开"Compile Headers",再点击"+"号,添加CocoLoader.h进去,此时h文件应该是(356 items)
(3) 点开"Compile Sources",再点击"+"号,添加CocoLoader.cpp进去,此时cpp文件应该是(301 items)
现在应该可以编译并运行csb文件了,将DemoPlayer.ExportJson改成DemoPlayer.csb运行了看看吧!
ArmatureDataManager::getInstance()->addArmatureFileInfo("DemoPlayer.csb"); auto arm = Armature::create("DemoPlayer"); this->addChild(arm); arm->setPosition(Point(300, 300)); arm->getAnimation()->play("walk"); // 一般放在onExit或析构中 ArmatureDataManager::destroyInstance();
所使用的资源下载:项目资源
所使用的源码下载:项目源码
相关文章推荐
- 让cocos2d-x 3.0读取cocostudio中的csb文件
- cocos2d-x 3.0 开发之引用cocostudio等第三方库
- Cocos2d-x 3.0 开发(十二)在CocoStudio中使用粒子挂载与曲线动画
- 实习小白::(转) Cocos2d-x 3.0 开发(十六)cocos2dx-3.0beta版建立新项目并加载CocoStudio导出文件
- Cocos2d-x 3.0 开发(十)使用CocoStudio场景编辑器关联组件
- Cocos2d-x 3.0 开发(十二)在CocoStudio中使用粒子挂载与曲线动画
- 【cocos2d-x 3.0】瞬间学会在Android平台读取SD卡数据包
- Cocos2d-x 3.0 开发(十)使用CocoStudio场景编辑器关联组件
- 【Cocos2d-x 3.0学习笔记】coco2d-s 读取plist 文件报错
- 实习小白::(转) Cocos2d-x 3.0 开发(四)使用CocoStudio创建UI并载入到程序中
- cocos2d-x 3.0学习一:cocostudio导出UI界面文件的加载及使用的若干问题
- Cocos2d-x 3.0 开发(七)在程序中处理cocoStudio导出动画
- Cocos2d-x 3.0 开发(四)使用CocoStudio创建UI并载入到程序中
- Cocos2d-x 3.0 开发(四)使用CocoStudio创建UI并载入到程序中
- 用cocos2d3.0写一个srpg游戏-从配置文件中读取敌我出战阵容(一)
- Cocos2d-x 3.0开发(五)关联程序逻辑与cocoStudio导出文件
- 实习小白::(转) Cocos2d-x 3.0 开发(十)使用CocoStudio场景编辑器关联组件
- Cocosbuider 3.0 和 Cocos2d-x 2.1.4读取场景
- Cocos2d-x 3.0开发(六)使用cocoStudio创建一个骨骼动画
- Cocos2d-x 3.0开发(六)使用cocoStudio创建一个骨骼动画