让cocos2d-x 3.0读取cocostudio中的csb文件

前端之家收集整理的这篇文章主要介绍了让cocos2d-x 3.0读取cocostudio中的csb文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

让cocos2d-x 3.0读取cocostu@R_403_410@中的csb文件

​ 现在cocostu@R_403_410@的功能越来越完善,还支持导出二进制的csb文件。可惜现在项目使用的还是3.0版本,不支持csb解析,总不至于为了一个解析功能将整个库升级吧,这也太小题大做了。因为这个csb文件只是将明文的*.ExportJson文件变成二进制的,我猜测只是文件解析略有不同,其他使用都无须改变,所以现在我现在的思路是仅替换文件解析的类。


以一个骨骼动画为例(项目资源和源码在文章下面下载),3.0中加载并播放一个骨骼动画的代码是:

  1. @H_502_28@ArmatureDataManager::getInstance()->addArmatureFileInfo("DemoPlayer.ExportJson"@H_502_28@);
  2. autoarm=Armature::create("DemoPlayer"@H_502_28@);
  3. this@H_502_28@->addChild(arm);
  4. arm->setPosition(Point(300,300));
  5. arm->getAnimation()->play("walk"@H_502_28@);
  6. //一般放在onExit或析构中@H_502_28@
  7. ArmatureDataManager::destroyInstance();

可以看出,第一行就是加载ExportJson文件,但如果换成"DemoPlayer.csb"打开出错,为什么呢?前面已经说过,3.0不支持了=。=!!


废话太多了。。。下面是详细步骤:

1 复制源码:跟进addArmatureFileInfo()可以发现CCS资源的解析是由DataReaderHelper类提供的,因此从3.2的cocos/editor-support/cocostu@R_403_410@目录下复制CCDataReaderHelper和CocoLoader源文件(.h和.cpp)共四个文件到3.0的cocos/editor-support/cocostu@R_403_410@目录下替换掉原来文件


2 然后在工程中将CocoLoader.h和CocoLoader.cpp添加到cocostu@R_403_410@目录中:


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>@H_502_28@
  1. #include<string>@H_502_28@
  2. <spanstyle="color:#FF0000;"@H_502_28@><strong></strong></span>#include"2d/CCNode.h"@H_502_28@
  3. <spanstyle="color:#FF0000;"@H_502_28@><strong></strong></span>#include"ccMacros.h"@H_502_28@

(2) 在.h的cocos2dx命名空间内加入以下代码
    namespace@H_502_28@utils
  1. {
  2. double@H_502_28@atof(const@H_502_28@char@H_502_28@*str);
  3. }
(3) 在.cpp的cocos2dx命名空间内加入以下代码
    @H_502_28@ #defineMAX_ITOA_BUFFER_SIZE256@H_502_28@
  1. char@H_502_28@*str)
  2. if@H_502_28@(str==nullptr)
  3. return@H_502_28@0.0;
  4. }
  5. char@H_502_28@buf[MAX_ITOA_BUFFER_SIZE];
  6. strncpy(buf,str,MAX_ITOA_BUFFER_SIZE);
  7. //stripstring,onlyremain7numbersafter'.'@H_502_28@
  8. char@H_502_28@*dot=strchr(buf,'.'@H_502_28@);
  9. if@H_502_28@(dot!=nullptr&&dot-buf+8<MAX_ITOA_BUFFER_SIZE)
  10. dot[8]='\0'@H_502_28@;
  11. return@H_502_28@::atof(buf);
  12. }
  13. }


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运行了看看吧!
  1. @H_502_28@ArmatureDataManager::getInstance()->addArmatureFileInfo("DemoPlayer.csb"@H_502_28@);
  2. autoarm=Armature::create("DemoPlayer"@H_502_28@);
  3. this@H_502_28@->addChild(arm);
  4. arm->setPosition(Point(300,300));
  5. arm->getAnimation()->play("walk"@H_502_28@);
  6. //一般放在onExit或析构中@H_502_28@
  7. ArmatureDataManager::destroyInstance();

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