您的位置:首页 > 其它

各种事件的回调函数写法

2016-07-08 16:07 639 查看
一、按钮回调

1. Lambda 表达式,C++11 Lambda 赋予了Cocos2d-x 3.0创建回调函数的灵活性。

[cpp]

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] 

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] 

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在CODE上查看代码片派生到我的代码片

   

this->schedule(SEL_SCHEDULE(&HelloWorld::gameStep));   

   

this->scheduleOnce(SEL_SCHEDULE(&HelloWorld::gameStep),3.0f);\   

   

this->scheduleUpdate();   

   

void HelloWorld::gameStep(float dt)   

{   

    log("on timer...");   

}   

三、触屏事件回调

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片

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在CODE上查看代码片派生到我的代码片

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在CODE上查看代码片派生到我的代码片

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");   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: