【教程】如何在2d-x中載入CocosStudio2.0版本生成的資料
使用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");
}
注:
1. 不會看原始碼的碼農不是好程式猿啊。經常有人求某個API介面,這東西查查標頭檔案看介面名就能知道個大概啦。原始碼就是最權威的API文件啊有木有!!!
2. 2.x版本Studio匯出的CSB資源需要與2d-x嚴格對應(具體看這裡)(估計以後會提供與2d-x解耦的方法。)
3. CocosStudio v2.x 假定在編輯器裡邊的資源目錄即遊戲的最終的目錄結構,因而如果你修改了匯出資源的目錄則需要編輯器目錄也需要跟著修改。也可以用addSearchPath來把你的路徑新增到FileUtils中,但要小心檔名衝突。
PS:我已經在3.6親自測試過了,如果還是偵聽不到幀事件,請先測試下面的資原始檔和程式碼,謝謝。
以下提供的是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");
}
注:
1. 不會看原始碼的碼農不是好程式猿啊。經常有人求某個API介面,這東西查查標頭檔案看介面名就能知道個大概啦。原始碼就是最權威的API文件啊有木有!!!
2. 2.x版本Studio匯出的CSB資源需要與2d-x嚴格對應(具體看這裡)(估計以後會提供與2d-x解耦的方法。)
3. CocosStudio v2.x 假定在編輯器裡邊的資源目錄即遊戲的最終的目錄結構,因而如果你修改了匯出資源的目錄則需要編輯器目錄也需要跟著修改。也可以用addSearchPath來把你的路徑新增到FileUtils中,但要小心檔名衝突。
PS:我已經在3.6親自測試過了,如果還是偵聽不到幀事件,請先測試下面的資原始檔和程式碼,謝謝。
相關文章
- 將高版本mysql資料庫的資料匯入低版本mysql中MySql資料庫
- 【教程】CocosStudio2.x釋出的資源在2d-x中的使用簡介
- 如何在請求資料時,顯示載入動畫動畫
- DbForge Studio for Oracle入門教程:如何在查詢生成器中建立查詢Oracle
- 如何在Excel表格中快速輸入有規則的資料Excel
- Microsoft Excel 教程「2」,如何在 Excel 中建立資料透檢視?ROSExcel
- Laravel 入門教程中-資料填充-修改分享Laravel
- 資料載入
- 各版本的資料庫下載地址資料庫
- 如何在低版本IE瀏覽器中實現判斷img圖片載入完畢瀏覽器
- 如何在docker實現資料掛載Docker
- 實現多子型別輸入法:如何在 HarmonyOS中載入不同的輸入模式型別模式
- 【轉載】如何在Oracle中複製表結構和表資料Oracle
- 增量資料載入
- 【sqlldr載入資料】SQL
- 【scikit-learn基礎】--『資料載入』之樣本生成器
- WPF入門教程系列十八——WPF中的資料繫結(四)
- iOS中載入資料時候展示Gif圖iOS
- 航圖中的扇區資料生成
- js資料載入完成的方法JS
- python 從mongodb中獲取資料載入到pandas中PythonMongoDB
- models生成與載入
- mmsegmentation中構造自己的資料集和資料載入部分,跑現有demoSegmentation
- 使用 RxJava 從多種來源中載入資料RxJava
- HBase載入大資料大資料
- ETL資料載入策略
- 用nodepad++生成匯入資料的SQLSQL
- Xamarin SQLite教程資料庫訪問與生成SQLite資料庫
- python資料視覺化-matplotlib入門(6)-從檔案中載入資料Python視覺化
- 【繁星Code】如何在EF將實體註釋寫入資料庫中資料庫
- cache資料庫入門教程資料庫
- css入門教程資料(4)CSS
- 不同版本間的資料庫匯入匯出資料庫
- 如何在12.2版本ADG備庫生成AWR報告
- 用Proxy 在 Vue 中解決動態載入資料的需求Vue
- 如何在weka中連線資料庫資料庫
- 如何在指標中隱藏資料?指標
- 將List中的資料組成用逗號分隔的字串,如'a','b','c'字串