使用Studio2.0發佈的CSB資源更換了加載方式,須要用CSLoader來加載。CSLoader在Cocos2d-x3.3RC0開始提供。
如下提供的是C++的代碼,lua、js的接口是同樣的。只有一點區別:
CSLoader在lua中對應cc.CSLoader
在js中對應ccs.csLoader (在2d-js3.1RC0中須要作點修改)
#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
//幀事件是能夠檢測到最後一幀的事件的,已測3.6
//動畫結束偵聽
action->setLastFrameCallFunc(CC_CALLBACK_0(myScene::AnimationEnd, this));
//能夠幀聽到,親測3.6。
}
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");
}
}
void XXX::AnimationEnd()
{
CCLOG("animation end");
}
php