各种事件的回调函数写法

一、按钮回调




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");   



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值