91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Cocos2d-x 3.x中新的回調函數歸納

發布時間:2020-07-26 13:36:37 來源:網絡 閱讀:1292 作者:googlingman 欄目:游戲開發

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

  本文關注的是回調函數從2.x到3.x的變化。

 

cocos2d-x 2.x時代的回調函數

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

  CCCallFunc、CCCallFuncN和CCCallFuncND都用來創建帶有回調函數的動作,區別主要在于回調函數是否帶有參數。

 

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等支持,回調函數得到極大簡化處理。歸納如下:

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

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

  • CallFuncND 和 CallFuncO 已經被移除了因為它們可以類似地由 CallFuncN 和 CallFunc 來創建。

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

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表達式或者其他函數對象

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表達式或者其他函數對象

auto item = MenuItemLabel::create(label,

[&](Object *sender) {

// do something. Item "sender" clicked

});

 

 

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

韩城市| 隆昌县| 黔南| 敦化市| 泗阳县| 福建省| 保山市| 东海县| 通辽市| 马龙县| 寿光市| 虎林市| 阳山县| 扎鲁特旗| 博罗县| 玉龙| 四子王旗| 东平县| 营山县| 安康市| 乌拉特前旗| 寿阳县| 杭州市| 鄂托克前旗| 长垣县| 资阳市| 隆安县| 乐业县| 颍上县| 林西县| 奇台县| 米林县| 阳山县| 桦甸市| 克拉玛依市| 仲巴县| 栾川县| 天水市| 兴仁县| 土默特右旗| 常山县|