日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Cocos2d-x3.5下“回調(diào)特性”的一種簡單的實(shí)現(xiàn)方法

Cocos2d-x3.5已經(jīng)發(fā)布了一小段時間了,細(xì)心的同學(xué)會發(fā)現(xiàn)這個版本增加了一個加載cocos資源的重載版本:

成都創(chuàng)新互聯(lián)是專業(yè)的驛城網(wǎng)站建設(shè)公司,驛城接單;提供網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì),網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行驛城網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!

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

相比另一個版本,這個多了一個回調(diào)函數(shù)的參數(shù)。

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

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

這篇文章就來講講,怎么用這個東西來十分簡便地實(shí)現(xiàn)此前那個有點(diǎn)復(fù)雜的功能:回調(diào)特性。

正文:

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

具體是怎么獲取呢?

先在CSLoader的源碼找找關(guān)于回調(diào)特性的原有實(shí)現(xiàn):

Widget* widget = dynamic_cast

if (widget)

{

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

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

bindCallback(callbackName, callbackType, widget, _rootNode);

}

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

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

至此填了回調(diào)特性的節(jié)點(diǎn)及對應(yīng)的參數(shù)我們都有了。

接下來,如何實(shí)現(xiàn)呢?

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

CSLoader::createNode(root_path,[this](Node *node){//node既是當(dāng)前加載出來的節(jié)點(diǎn)

Widget* widget = dynamic_cast

if (widget){

//獲取回調(diào)特性相關(guān)屬性的信息。

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

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

//根據(jù)上述信息進(jìn)行綁定。

this.bindCallback(callbackName, callbackType, widget);

}

});

然后在當(dāng)前類實(shí)現(xiàn)一個bindCallback函數(shù),用callbackName和callbackType進(jìn)行一些字符串比對操作,找到一個合適的函數(shù),丟給widget做監(jiān)聽,比如:

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的兩大腳本引擎都沒有提供對回調(diào)特性的支持,包括新重載的createNode函數(shù),也是沒有導(dǎo)出給兩個腳本引擎使用。

但getCallbackName、getCallbackType這兩個函數(shù)都是有導(dǎo)出的,我們可以自行遍歷加載出來的根節(jié)點(diǎn),利用這兩個函數(shù)來獲取Cocos中填寫的回調(diào)特性相關(guān)信息,根據(jù)這些信息,自己進(jìn)行綁定。

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


網(wǎng)頁名稱:Cocos2d-x3.5下“回調(diào)特性”的一種簡單的實(shí)現(xiàn)方法
網(wǎng)站地址:http://m.5511xx.com/article/dhsccdi.html