由于引入了C++ 11特性,cocos2d-x 3.x中許多實(shí)現(xiàn)方案,相對(duì)于以前的cocos2d-x 2.x,都有了很大的改進(jìn),當(dāng)然性能上也得到一定的提升。
本文關(guān)注的是回調(diào)函數(shù)從2.x到3.x的變化。
cocos2d-x 2.x時(shí)代的回調(diào)函數(shù)
2.X時(shí)代主要使用CCCallFunc、CCCallFuncN和CCCallFuncND等幾種方式實(shí)現(xiàn)。
CCCallFunc、CCCallFuncN和CCCallFuncND都用來創(chuàng)建帶有回調(diào)函數(shù)的動(dòng)作,區(qū)別主要在于回調(diào)函數(shù)是否帶有參數(shù)。
2.x時(shí)代實(shí)例
testCallFunc.h中代碼: class testCallFunc : public CCLayer{protected: CCSprite* sprite1; CCSprite* sprite2; CCSprite* sprite3;public: virtual void onEnter(); void callback1(); void callback2(CCNode* sender); void callback3(CCNode* sender, void* data); }; testCallFunc.cpp中代碼: void testCallFunc::onEnter(){ //CCCallFunc的使用 CCFiniteTimeAction* action = CCSequence::create( CCMoveBy::create(2, ccp(200,0)), CCCallFunc::create(this, callfunc_selector(testCallFunc::callback1)), NULL); //CCCallFuncN的使用 CCFiniteTimeAction* action2 = CCSequence::create( CCScaleBy::create(2 , 2), CCFadeOut::create(2), CCCallFuncN::create(this, callfuncN_selector(testCallFunc::callback2)), NULL); //CCCallFuncNC的使用 CCFiniteTimeAction* action3 = CCSequence::create( CCRotateBy::create(3 , 360), CCFadeOut::create(2), CCCallFuncND::create(this, callfuncND_selector(testCallFunc::callback3), (void*)0xbebabeba), NULL); sprite1->runAction(action); sprite2->runAction(action2); sprite3->runAction(action3); } void testCallFunc::callback1(){ CCSize s = CCDirector::sharedDirector()->getWinSize(); CCLabelTTF *label = CCLabelTTF::create("callback 1 called", "Marker Felt", 16); label->setPosition(ccp( s.width/4*1,s.height/2)); addChild(label); } void testCallFunc::callback2(CCNode* pSender){ CCSize s = CCDirector::sharedDirector()->getWinSize(); CCLabelTTF *label = CCLabelTTF::create("callback 2 called", "Marker Felt", 16); label->setPosition(ccp( s.width/4*2,s.height/2)); addChild(label); } void testCallFunc::callback3(CCNode* pTarget, void* data){ CCSize s = CCDirector::sharedDirector()->getWinSize(); CCLabelTTF *label = CCLabelTTF::create("callback 3 called", "Marker Felt", 16); label->setPosition(ccp( s.width/4*3,s.height/2)); addChild(label); }
cocos2d-x 3.x時(shí)代
由于引用了std::function等支持,回調(diào)函數(shù)得到極大簡化處理。歸納如下:
CallFunc 可以由 std::function<void()> 來創(chuàng)建
CallFuncN 可以由 std::function<void(Node*)> 來創(chuàng)建
CallFuncND 和 CallFuncO 已經(jīng)被移除了因?yàn)樗鼈兛梢灶愃频赜?CallFuncN 和 CallFunc 來創(chuàng)建。
可以查看示例中的 ActionsTest.cpp 文件,同時(shí)注意MenuItem 支持 std::function<void(Node*)> 作為回調(diào)。
CallFunc 示例:
// v2.1 版本
// v3.0 版本 (短版本)
// v3.0 版本 (長版本)
// v3.0 中你也可以使用lambda表達(dá)式或者其他函數(shù)對(duì)象
MenuItem 示例:
// v2.1 版本
// v3.0 版本 (短版本)
// v3.0 版本 (長版本)
// v3.0 中你也可以使用lambda表達(dá)式或者其他函數(shù)對(duì)象
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
當(dāng)前題目:Cocos2d-x3.x中新的回調(diào)函數(shù)歸納-創(chuàng)新互聯(lián)
當(dāng)前URL:http://jinyejixie.com/article22/dpcjcc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、ChatGPT、企業(yè)網(wǎng)站制作、用戶體驗(yàn)、手機(jī)網(wǎng)站建設(shè)、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容