如何在Cocos2d-x中加载Cocos Studio 2.0版本生成的数据

使用Cocos Studio v2.0发布的CSB资源更换了加载方式,需要用CSLoader来加载。CSLoader在Cocos2d-x 3.3 RC0开始提供。 

以下提供的是C++的代码,lua、js的接口是一样的。只有一点区别: 

  • CSLoader在lua中对应cc.CSLoader 

  • 在js中对应ccs.csLoader (在2d-js3.1RC0中需要做点修改) 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include "ui/CocosGUI.h"//UI相关的头文件 
#include"cocostudio/CocoStudio.h"//在CocosStudio.h 头文件中已经包含了Studio所需要的各个头文件(除CocosGUI)因此我们使用Studio仅需要包含他就可以 
using namespace cocos2d;//CSLoader位于cocos2d命名空间。 
using namespace cocostudio::timeline;//动画相关的类位于cocostuio::timeline当中 
  
  
void myScene::initFunc() 
{ 
    //以下是加载相关的代码: 
    Node *rootNode = CSLoader::createNode("MainScene.csb");//传入Studio2.x的资源路径 
    this->addChild(rootNode);//假设this是即将显示的scene 
  
    //加载动画: 
    ActionTimeline *action = CSLoader::createTimeline("MainScene.csb"); 
    rootNode->runAction(action); 
    //注!!!:同一个文件创建的节点只能使用同一个文件创建的动画。 
//嵌套节点的动画会自动加载动画,可以用嵌套节点->getActionByTag(嵌套节点->getTag()) 来获取动画 
  
  
    //播放动画: 
    action->gotoFrameAndPlay(0,60,true);//从第0帧到60帧循环播放。还有其他重载函数,具体看源码。 
  
  
    //帧事件监听 
    action->setFrameEventCallFunc(CC_CALLBACK_1(myScene::onFrameEvent, this)); 
    //关于CC_CALLBACK_1需要点C++11的基础才能知道是咋回事,这里只要照着写就行。想了解可以查下std::Bind 
} 
void myScene::onFrameEvent(Frame* frame)//固定的格式 
{ 
    EventFrame* evnt = dynamic_cast<EventFrame*>(frame); 
    if(!evnt) 
        return; 
  
    std::string str = evnt->getEvent(); 
    if (str == "xxoo") 
    { 
        CCLOG("come on baby"); 
    } 
}

注: 

1. 不会看源码的码农不是好程序猿啊。经常有人求某个API接口,这东西查查头文件看接口名就能知道个大概啦。源码就是最权威的API文档啊有木有!!! 

2. 2.x版本Studio导出的CSB资源需要与2d-x严格对应(具体看这里)(估计以后会提供与2d-x解耦的方法。) 

3. Cocos Studio v2.x 假定在编辑器里边的资源目录即游戏的最终的目录结构,因而如果你修改了导出资源的目录则需要编辑器目录也需要跟着修改。也可以用addSearchPath来把你的路径添加到FileUtils中,但要小心文件名冲突。 


来源网址:http://www.cocoachina.com/bbs/read.php?tid=274237

你可能感兴趣的:(如何在Cocos2d-x中加载Cocos Studio 2.0版本生成的数据)