成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Cocos2d-x3.5下“回調特性”的一種簡單的實現方法

移動開發 Android 游戲開發
Cocos2d-x3.5已經發布了一小段時間了,細心的同學會發現這個版本增加了一個加載cocos資源的重載版本:Node* CSLoader::createNode(const std::string &filename, const ccNodeLoadCallback &callback)

Cocos2d-x3.5已經發布了一小段時間了,細心的同學會發現這個版本增加了一個加載cocos資源的重載版本:

Node* CSLoader::createNode(const std::string &filename, const ccNodeLoadCallback &callback)

相比另一個版本,這個多了一個回調函數的參數。

框架用這個東西干了什么?

通過閱讀源碼可以知道,在加載完一個節點后,框架會將節點簡單地回調給這個函數(除根節點外)。這樣,利用這個參數,我們可以在加載資源的過程中對正在加載的節點做一些修飾處理。

這篇文章就來講講,怎么用這個東西來十分簡便地實現此前那個有點復雜的功能:回調特性。

正文:

首先利用上邊的功能,我們可以在加載時得到各個節點對象,其次我們需要獲取Cocos中填寫的參數。

具體是怎么獲取呢?

先在CSLoader的源碼找找關于回調特性的原有實現:

Widget* widget = dynamic_cast

if (widget)

{

std::string callbackName = widget->getCallbackName();

std::string callbackType = widget->getCallbackType();

bindCallback(callbackName, callbackType, widget, _rootNode);

}

以上這段代碼是在CSLoader::createNode加載Widget類型節點時,針對回調特性的一些特殊處理。就是將我們在Cocos中填寫的兩個回調特性的字段取出來,聯通widget,_rootNode傳給bindCallback進行綁定。

上邊的兩個函數:getCallbackName,getCallbackType,取出來的就是我們在Cocos中所填寫的回調參數信息。

至此填了回調特性的節點及對應的參數我們都有了。

接下來,如何實現呢?

我們可以考慮跟上述類似的做法:

CSLoader::createNode(root_path,[this](Node *node){//node既是當前加載出來的節點

Widget* widget = dynamic_cast

if (widget){

//獲取回調特性相關屬性的信息。

std::string callbackName = widget->getCallbackName();

std::string callbackType = widget->getCallbackType();

//根據上述信息進行綁定。

this.bindCallback(callbackName, callbackType, widget);

}

});

然后在當前類實現一個bindCallback函數,用callbackName和callbackType進行一些字符串比對操作,找到一個合適的函數,丟給widget做監聽,比如:

void MyScene::bindCallback(const std::string &callbackName,const std::string &callbackType,widget){

if(callbackName == “animal1” && callbackType == “Click”){//假定有一個playAnimal1的接口

widget->addClickEventListener(CC_CALLBACK_2(MyScene::playAnimal1,this));//

}

else if(callbackName == “animal2” && callbackType == “Click”){//假定有一個playAnimal2的接口

widget->addClickEventListener(CC_CALLBACK_2(MyScene::playAnimal2,this));

}

……

}

后記:

1.目前為止Cocos2d-x的兩大腳本引擎都沒有提供對回調特性的支持,包括新重載的createNode函數,也是沒有導出給兩個腳本引擎使用。

但getCallbackName、getCallbackType這兩個函數都是有導出的,我們可以自行遍歷加載出來的根節點,利用這兩個函數來獲取Cocos中填寫的回調特性相關信息,根據這些信息,自己進行綁定。

2.Cocos2.2開始提供了一個“用戶數據”的接口,這個接口所設置的數據可以通過Cocos2d::Node::getUserData獲取,配合這個東西具體能干什么,就看你的想象力了。

責任編輯:老門
相關推薦

2010-03-26 13:34:47

CentOS安裝

2011-12-12 10:40:08

Cocos2d-X游戲開發開發環境

2012-04-17 13:12:00

2012-04-16 15:20:41

cocos2d-x

2013-05-22 15:49:46

2011-07-04 10:17:38

JDBC

2013-12-03 10:58:50

Cocos2D-X磚塊地圖

2017-02-20 09:00:49

2011-04-06 10:09:56

MySQL數據庫安裝

2012-04-17 12:38:46

cocos2d-x

2012-04-17 12:44:38

cocos2d-x

2013-06-07 14:06:52

移動開發Android開發cocos2d-x

2023-07-18 07:23:11

方案payloadrequest

2022-02-25 14:42:09

OpenHarmon環境搭建鴻蒙

2012-04-17 10:06:08

cocos2d-x

2012-04-17 10:59:31

cocos2d-x

2018-12-14 14:30:12

安全檢測布式系測試

2011-03-02 10:01:15

2012-04-17 12:52:01

cocos2d-x

2012-02-19 20:10:23

Cocos2d-x fCocos2dWindows Pho
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产主播第一页 | 99这里只有精品视频 | 午夜在线 | 一级看片免费视频囗交动图 | 久久久精品一区 | 超碰国产在线 | 午夜视频网站 | 搞av.com| 国产99久久精品一区二区永久免费 | 国产精品三级久久久久久电影 | 国产成人91| 亚洲欧美日韩一区二区 | 日本又色又爽又黄又高潮 | 国产激情在线 | 欧美成人第一页 | а天堂中文最新一区二区三区 | 日韩在线视频一区 | 亚洲欧美在线观看 | 人人鲁人人莫人人爱精品 | 精品久久九 | 亚洲成人一区二区三区 | 精品区一区二区 | av黄色免费 | 中文字幕精品视频 | 国产黄色大片网站 | 亚洲一区二区三区四区五区中文 | 一区二区三区四区毛片 | 久草网站 | 日韩 欧美 综合 | 日韩在线不卡视频 | 午夜精品视频在线观看 | 国产一区二区av | 国产日产欧产精品精品推荐蛮挑 | 国产高清视频 | 欧美精品二区 | 操视频网站 | 亚洲精品免费视频 | 亚洲精品久久久久久久久久吃药 | 国产精品一区二区视频 | 欧美a∨| 无人区国产成人久久三区 |