Cocos2dx 3.0 提高篇(二) 事件回調

來源:互聯網
上載者:User

3.0 後的事件回呼函數介面都不一樣了,例如按鈕的menu_selector(),update的 schedule_selector等,都已成明日黃花。而新的回調介面,則由四個CC_CALLBACK取代。

 

下面先舉例一些不同的調用方法:

2.0MenuItemImage* item =MenuItemImage::create("","",this,menu_selector(HelloWorld::callback));3.0auto item = MenuItemImage::create("","",CC_CALLBACK1(HelloWorld::callback,this));


看到這裡有人可能會問,如果要更改按鈕的回呼函數怎麼做呢?如果你繼續用setTarget();這個介面,那可行不通了。

3.0裡用 替代了 ,參數如下:

setCallback(const ccMenuCallback&callback);


這裡有看到一個新鮮的詞:

這貨是什麼碗糕?哈哈哈哈,如果你問我,那你就問錯人了!!!我也只能告訴你大概是怎麼個用法,嘿嘿。

首先,從setTarget()和setCallback()裡的參數變化可以看出,ccMenuCallback 實際上就包含了Object *rec, SEL_MenuHandler selector這倆參數,舉個例子:

2.0Item->setTarget(this,menu_selector(HelloWorld::callback));3.0Item->setCallback(CC_CALLBACK1(HelloWorld::callback,this));

恩,就是這樣子,怎麼感覺說的都沒啥深度,噗,有點模仿“笨木頭”的語氣呀。

 

先舉例:

1)回呼函數不帶參數的情況

2.0CallFunc::create(this,callfunc_selector(ActionSequence2::callback1));void ActionSequence2::callback1(){};3.0CallFunc::create(CC_CALLBACK_0(ActionSequence2::callback1,this)),void ActionSequence2::callback1(){};

2)回呼函數帶參數的情況

2.0CCSequence* seq = CCSequence::create(MoveBy::create(2.0f,ccp(150,0)),CallFuncN::create(this,callfuncN_selector(ActionCallFunc::callback)),NULL);3.0 auto action = Sequence::create(        MoveBy::create(2.0f, Point(150,0)),        CallFuncN::create( CC_CALLBACK_1(ActionCallFuncN::callback, this)),        NULL);

:CC_CALLBACK0是回調不帶參數的回呼函數,CC_CALLBACK1是回調有參數的回呼函數。

既然說到了action,順便再說下3.0裡Callfunc的新的用法(之前的版本應該沒有吧…)

auto action1 = CallFunc::create(

              

                }  );

注意紅色的部分,以前動作回調都是要新寫一個回呼函數,這樣子雖然問題不大,但如果用到回調的地方多了,而且回調的代碼也就幾行而已,那之前的做法就有點受不了,現在好了,可以直接把動作執行完要回調的函數代碼直接寫到建立裡來,是不是方便多了。

 

auto touchListener = EventListenerTouchOneByOne::create();touchListener->setSwallowTouches(true); touchListener->onTouchBegan = CC_CALLBACK_2(MyMenu::onTouchBegan, this);touchListener->onTouchMoved = CC_CALLBACK_2(MyMenu::onTouchMoved, this);touchListener->onTouchEnded = CC_CALLBACK_2(MyMenu::onTouchEnded, this);touchListener->onTouchCancelled = CC_CALLBACK_2(MyMenu::onTouchCancelled, this); _eventDispatcher->addEventListenerWithSceneGraphPriority(touchListener, this);

恩,目前也就瞭解這些了。以後再繼續補吧。

轉載請註明源地址:http://blog.csdn.net/start530/article/details/18216679

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.