Cocos2d-x3.x中新的回調(diào)函數(shù)歸納-創(chuàng)新互聯(lián)

由于引入了C++ 11特性,cocos2d-x 3.x中許多實現(xiàn)方案,相對于以前的cocos2d-x 2.x,都有了很大的改進,當(dāng)然性能上也得到一定的提升。

創(chuàng)新互聯(lián)于2013年創(chuàng)立,公司以成都網(wǎng)站制作、網(wǎng)站設(shè)計、外貿(mào)網(wǎng)站建設(shè)、系統(tǒng)開發(fā)、網(wǎng)絡(luò)推廣、文化傳媒、企業(yè)宣傳、平面廣告設(shè)計等為主要業(yè)務(wù),適用行業(yè)近百種。服務(wù)企業(yè)客戶1000多家,涉及國內(nèi)多個省份客戶。擁有多年網(wǎng)站建設(shè)開發(fā)經(jīng)驗。為企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、創(chuàng)意設(shè)計、宣傳推廣等服務(wù)。 通過專業(yè)的設(shè)計、獨特的風(fēng)格,為不同客戶提供各種風(fēng)格的特色服務(wù)。

本文關(guān)注的是回調(diào)函數(shù)從2.x到3.x的變化。

cocos2d-x 2.x時代的回調(diào)函數(shù)

2.X時代主要使用CCCallFunc、CCCallFuncN和CCCallFuncND等幾種方式實現(xiàn)。

CCCallFunc、CCCallFuncN和CCCallFuncND都用來創(chuàng)建帶有回調(diào)函數(shù)的動作,區(qū)別主要在于回調(diào)函數(shù)是否帶有參數(shù)。

2.x時代實例

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時代

由于引用了std::function等支持,回調(diào)函數(shù)得到極大簡化處理。歸納如下:

  • CallFunc 可以由 std::function<void()> 來創(chuàng)建

  • CallFuncN 可以由 std::function<void(Node*)> 來創(chuàng)建

  • CallFuncND 和 CallFuncO 已經(jīng)被移除了因為它們可以類似地由 CallFuncN 和 CallFunc 來創(chuàng)建。

可以查看示例中的 ActionsTest.cpp 文件,同時注意MenuItem 支持 std::function<void(Node*)> 作為回調(diào)。

CallFunc 示例:

// v2.1 版本

CCCallFunc *action1 = CCCallFunc::create( this, callfunc_selector( MyClass::callback_0 ) );

// v3.0 版本 (短版本)

auto action1 = CallFunc::create( CC_CALLBACK_0(MyClass::callback_0,this)); auto action2 = CallFunc::create( CC_CALLBACK_0(MyClass::callback_1,this, additional_parameters));

// v3.0 版本 (長版本)

auto action1 = CallFunc::create( std::bind( &MyClass::callback_0, this)); auto action2 = CallFunc::create( std::bind( &MyClass::callback_1, this, additional_parameters));

// v3.0 中你也可以使用lambda表達式或者其他函數(shù)對象

auto action1 = CallFunc::create( [&](){ auto s = Director::sharedDirector()->getWinSize(); auto label = LabelTTF::create("called:lambda callback", "Marker Felt", 16); label->setPosition(ccp( s.width/4*1,s.height/2-40)); this->addChild(label); } );

MenuItem 示例:

// v2.1 版本

CCMenuItemLabel *item = CCMenuItemLabel::create(label, this, menu_selector(MyClass::callback));

// v3.0 版本 (短版本)

auto item = MenuItemLabel::create(label, CC_CALLBACK_1(MyClass::callback, this));

// v3.0 版本 (長版本)

auto item = MenuItemLabel::create(label, std::bind(&MyClass::callback, this, std::placeholders::_1));

// v3.0 中你也可以使用lambda表達式或者其他函數(shù)對象

auto item = MenuItemLabel::create(label, [&](Object *sender) { // do something. Item "sender" clicked });

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

當(dāng)前題目:Cocos2d-x3.x中新的回調(diào)函數(shù)歸納-創(chuàng)新互聯(lián)
當(dāng)前URL:http://www.bm7419.com/article22/dpcjcc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、ChatGPT、企業(yè)網(wǎng)站制作、用戶體驗、手機網(wǎng)站建設(shè)面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化