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

原创 2014年08月19日 14:04:50

让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 2】关于CocosStudio编辑出的csb的简单使用

说明:cocos2d-x版本为 3.4,cocosStudio版本为2.1.5  cocosStudio 我个人目前的认识,以为就是一个界面编辑器。界面通过美工可以排布好,然后把发布的csb...
  • HongHuer
  • HongHuer
  • 2015年03月30日 17:24
  • 20721

【独立开发者er Cocos2d-x实战 001】csb文件导出和加载

【独立开发者er Cocos2d-x实战 001】csb文件导出和加载 然后在cocos工程中进行加载csb文件:  auto myLayout = CSLoader::createNode...

00003 不思议迷宫.0010.1.1.2:csb解析显示

00003 不思议迷宫.0010.1.1.2:csb解析显示 Mac上调试app有点蛋疼,每次运行都要打包来打包去,慢。我对Xcode不熟,不会修改工程文件让它不打包。我决定,换到Windows下,...
  • tiewen
  • tiewen
  • 2017年02月27日 22:18
  • 335

cocos2d 由导出文件.csb反推出cocosUI工程

最近遇到一个需求,只有cocos studio导出的UI资源(.csb)文件,但是需要修改UI工程,我就想有没有方案通过csb反推出一个UI工程。首先需要理解csb文件是如何解析的,新建一个简单的co...

cocos2dx3.3 使用cocos studio2.0 导出的.csb文件

直接上步骤:(以COCOS2DX-JS 框架自带的飞机为例子) 1. 打开cocos studio2.0 新建节点文件 2. 导入资源,并按照需要设计新建的节点文件...

使用x-studio365导入csb并发布到CocosStudio2.x兼容工程

1.首先通过菜单【文件】【新建工程】新建一个空工程2.然后通过【文件】【导入】【CocosStudio已发布资源(*.csb)】 选择导入文件资源根目录,注意资源根目录的确定方法,首先用x-s...
  • xyzzf
  • xyzzf
  • 2017年03月12日 21:58
  • 2389

【独立开发者er Cocos2d-x实战 001】csb文件导出和加载

原文地址:http://blog.csdn.net/chenqiai0/article/details/46633407/ 使用cocos studio进行资源文件导出: ...

Cocos2d-x 3.8 如何加载.csb文件

加载.csb文件,需要用到CSLoader这个类, 例如: // 加载UIauto UI = CSLoader::createNode("UI.csb"); this->addChild(UI); 如...

cocos2d-lua里如何加载csb文件

local node = cc.CSLoader:createNode("res/csb/loading.csb") node:addTo(self)

cocos2dx 新版本骨骼动画.csb文件的简单使用

旧版本的cocostudio导出的动画是json格式的,包含资源图,plist文件,和一个json文件; 新版的骨骼动画统一了格式为csb,实现起来比较简单,只是调用方法与以前不同: 先打...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:让cocos2d-x 3.0读取cocostudio中的csb文件
举报原因:
原因补充:

(最多只允许输入30个字)