一、按钮回调
1. Lambda 表达式,C++11 Lambda 赋予了Cocos2d-x 3.0创建回调函数的灵活性。
[cpp] view
plaincopy
- auto itemNor = Sprite::create("CloseNormal.png");
- auto menuItem = MenuItemSprite::create(itemNor,nullptr,nullptr,[](Ref* sender)
- {
- log("show this msg.");
- });
- auto menu = Menu::create(menuItem,nullptr);
- this->addChild(menu);
2.宏定义bind方式创建回调.
[cpp] view
plaincopy
- auto itemNor = Sprite::create("CloseNormal.png");
- auto menuItem = MenuItemSprite::create(itemNor,nullptr,nullptr,CC_CALLBACK_1(HelloWorld::menuCloseCallback,this));
- auto menu = Menu::create(menuItem,nullptr);
- this->addChild(menu);
- void HelloWorld::menuCloseCallback(Ref* pSender)
- {
- log("show this msg.");
- }
3.MenuToggleItem回事件回调
[cpp] view
plaincopy
- auto toggleSpNor = Label::createWithSystemFont("OPEN_BAME","WRYH",65);
- auto toggleSpSel = Label::createWithSystemFont("CLOSE_BAME","WRYH",65);
- auto toggleSpDis = Label::createWithSystemFont("DISABLE_BAME","WRYH",65);
- auto toggleItemNor = MenuItemLabel::create(toggleSpNor);
- auto toggleItemSel = MenuItemLabel::create(toggleSpSel);
- auto toggleItemDis = MenuItemLabel::create(toggleSpDis);
- auto toggleItem = MenuItemToggle::createWithCallback(CC_CALLBACK_0(HelloWorld::toggleCallBack,this),toggleItemNor,toggleItemSel,nullptr);
- auto toggleMenu = Menu::create(toggleItem,nullptr);
- this->addChild(toggleMenu);
- void HelloWorld::toggleCallBack()
- {
- log("Do something when toggle did touched..");
- }
二、定时器回调
[cpp] view
plaincopy
- /*周期定时调用*/
- this->schedule(SEL_SCHEDULE(&HelloWorld::gameStep));
- /*倒计是定时调用一次*/
- this->scheduleOnce(SEL_SCHEDULE(&HelloWorld::gameStep),3.0f);\
- /*周期定时调用update需重写update方法*/
- this->scheduleUpdate();
- void HelloWorld::gameStep(float dt)
- {
- log("on timer...");
- }
三、触屏事件回调
[cpp] view
plaincopy
- auto touchEvt = cocos2d::EventListenerTouchOneByOne::create();
- touchEvt->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan,this);
- touchEvt->onTouchMoved = CC_CALLBACK_2(HelloWorld::onTouchMoved,this);
- touchEvt->onTouchEnded = CC_CALLBACK_2(HelloWorld::onTouchEnded,this);
- touchEvt->onTouchCancelled = CC_CALLBACK_2(HelloWorld::onTouchCancelled,this);
- Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(touchEvt,this);
- bool HelloWorld::onTouchBegan(cocos2d::Touch* touch,cocos2d::Event* evt)
- {
- log("Touch began..");
- return true;
- }
- void HelloWorld::onTouchMoved(cocos2d::Touch* touch,cocos2d::Event* evt)
- {
- log("Touch moved..");
- }
- void HelloWorld::onTouchEnded(cocos2d::Touch* touch,cocos2d::Event* evt)
- {
- log("Touch leave..");
- Director::getInstance()->getEventDispatcher()->removeEventListenersForTarget(this);
- }
- void HelloWorld::onTouchCancelled(cocos2d::Touch* touch,cocos2d::Event* evt)
- {
- log("Something was happend , touch event is cut..");
- }
四、动作回调
[cpp] view
plaincopy
- auto callBack = CallFunc::create(CC_CALLBACK_0(HelloWorld::actionCallBack,this));
- this->runAction(callBack);
- void HelloWorld::actionCallBack()
- {
- log("Do something when action did finished..");
- }
五、自定义事件回调
[cpp] view
plaincopy
- auto callBack = [](EventCustom* evt)
- {
- log("catch an custom event!!");
- };
- cocos2d::EventListenerCustom* customEvt = EventListenerCustom::create("ME_CUSTOM_EVENT_TEST",callBack);
- //注册自定义事件(处理优先级为12)
- Director::getInstance()->getEventDispatcher()->addEventListenerWithFixedPriority(customEvt,12);
- //抛出自定义事件
- Director::getInstance()->getEventDispatcher()->dispatchCustomEvent("ME_CUSTOM_EVENT_TEST");
时间: 2024-10-09 17:52:13