Cocos2d-x 3.0 回调函数

一、按钮回调

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

[cpp] view
plain
copy

  1. auto itemNor    =   Sprite::create("CloseNormal.png");
  2. auto menuItem   =   MenuItemSprite::create(itemNor,nullptr,nullptr,[](Ref* sender)
  3. {
  4. log("show this msg.");
  5. });
  6. auto menu   =   Menu::create(menuItem,nullptr);
  7. this->addChild(menu);

2.宏定义bind方式创建回调.

[cpp] view
plain
copy

  1. auto itemNor    =   Sprite::create("CloseNormal.png");
  2. auto menuItem   =   MenuItemSprite::create(itemNor,nullptr,nullptr,CC_CALLBACK_1(HelloWorld::menuCloseCallback,this));
  3. auto menu   =   Menu::create(menuItem,nullptr);
  4. this->addChild(menu);
  5. void HelloWorld::menuCloseCallback(Ref* pSender)
  6. {
  7. log("show this msg.");
  8. }

3.MenuToggleItem回事件回调

[cpp] view
plain
copy

  1. auto toggleSpNor    =   Label::createWithSystemFont("OPEN_BAME","WRYH",65);
  2. auto toggleSpSel    =   Label::createWithSystemFont("CLOSE_BAME","WRYH",65);
  3. auto toggleSpDis    =   Label::createWithSystemFont("DISABLE_BAME","WRYH",65);
  4. auto toggleItemNor  =   MenuItemLabel::create(toggleSpNor);
  5. auto toggleItemSel  =   MenuItemLabel::create(toggleSpSel);
  6. auto toggleItemDis  =   MenuItemLabel::create(toggleSpDis);
  7. auto toggleItem     =   MenuItemToggle::createWithCallback(CC_CALLBACK_0(HelloWorld::toggleCallBack,this),toggleItemNor,toggleItemSel,nullptr);
  8. auto toggleMenu =   Menu::create(toggleItem,nullptr);
  9. this->addChild(toggleMenu);
  10. void HelloWorld::toggleCallBack()
  11. {
  12. log("Do something when toggle did touched..");
  13. }

二、定时器回调

[cpp] view
plain
copy

  1. /*周期定时调用*/
  2. this->schedule(SEL_SCHEDULE(&HelloWorld::gameStep));
  3. /*倒计是定时调用一次*/
  4. this->scheduleOnce(SEL_SCHEDULE(&HelloWorld::gameStep),3.0f);\
  5. /*周期定时调用update需重写update方法*/
  6. this->scheduleUpdate();
  7. void HelloWorld::gameStep(float dt)
  8. {
  9. log("on timer...");
  10. }

三、触屏事件回调

[cpp] view
plain
copy

  1. auto touchEvt           =   cocos2d::EventListenerTouchOneByOne::create();
  2. touchEvt->onTouchBegan       =   CC_CALLBACK_2(HelloWorld::onTouchBegan,this);
  3. touchEvt->onTouchMoved       =   CC_CALLBACK_2(HelloWorld::onTouchMoved,this);
  4. touchEvt->onTouchEnded      =    CC_CALLBACK_2(HelloWorld::onTouchEnded,this);
  5. touchEvt->onTouchCancelled     = CC_CALLBACK_2(HelloWorld::onTouchCancelled,this);
  6. Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(touchEvt,this);
  7. bool HelloWorld::onTouchBegan(cocos2d::Touch* touch,cocos2d::Event* evt)
  8. {
  9. log("Touch began..");
  10. return true;
  11. }
  12. void HelloWorld::onTouchMoved(cocos2d::Touch* touch,cocos2d::Event* evt)
  13. {
  14. log("Touch moved..");
  15. }
  16. void HelloWorld::onTouchEnded(cocos2d::Touch* touch,cocos2d::Event* evt)
  17. {
  18. log("Touch leave..");
  19. Director::getInstance()->getEventDispatcher()->removeEventListenersForTarget(this);
  20. }
  21. void HelloWorld::onTouchCancelled(cocos2d::Touch* touch,cocos2d::Event* evt)
  22. {
  23. log("Something was happend , touch event is cut..");
  24. }

四、动作回调

[cpp] view
plain
copy

  1. auto callBack       =   CallFunc::create(CC_CALLBACK_0(HelloWorld::actionCallBack,this));
  2. this->runAction(callBack);
  3. void HelloWorld::actionCallBack()
  4. {
  5. log("Do something when action did finished..");
  6. }

五、自定义事件回调

[cpp] view
plain
copy

  1. auto callBack       =   [](EventCustom* evt)
  2. {
  3. log("catch an custom event!!");
  4. };
  5. cocos2d::EventListenerCustom* customEvt =   EventListenerCustom::create("ME_CUSTOM_EVENT_TEST",callBack);
  6. //注册自定义事件(处理优先级为12)
  7. Director::getInstance()->getEventDispatcher()->addEventListenerWithFixedPriority(customEvt,12);
  8. //抛出自定义事件
  9. Director::getInstance()->getEventDispatcher()->dispatchCustomEvent("ME_CUSTOM_EVENT_TEST");
时间: 2024-10-09 17:52:13

Cocos2d-x 3.0 回调函数的相关文章

回调函数的应用

VPP 协议组件提供了许多的函数接口供开发者调用,同时也提供了很多的回调函数接口需要我们去实现,而由协议栈内部来调用.说白了,回调函数就是一个函数指针,协议栈通过一个函数指针,指向我们注册给回调函数接口的函数,达到函数由我们实现,他们调用的目的. 下面举一个简单的例子,让大家有一个更直接的认识: [cpp] view plain copy #include<stdio.h> // 声明函数指针 typedef int (*operation)(int x,int y); // 定义函数指针变量

新手,对函数,函数指针,回调函数, 函数指针作为函数的返回值和block的一些见解

很多初学者,学c语言时,看到函数都觉得难,我也是,一开始觉得函数太难了,后来慢慢就理解了 第一:函数 在c语言中最简单的函数一般有四种: 1, 无返回值, 无参数. 2, 无返回值,有参数. 3, 有返回值,无参数. 4, 有返回值,有参数 1, 无返无参  定义方式:      void 函数名(); 一般不怎么用这种形式的函数,可用来输出,打印 void functionOne() { printf("无返回值,无参数"); // 没有返回值不能写return } int main

【Cocos2d-x 3.0 基础系列一】 各类回调函数写法汇总

一.button回调 1. Lambda 表达式,C++11 Lambda 赋予了Cocos2d-x 3.0创建回调函数的灵活性. auto itemNor = Sprite::create("CloseNormal.png"); auto menuItem = MenuItemSprite::create(itemNor,nullptr,nullptr,[](Ref* sender) { log("show this msg."); }); auto menu =

cocos2d-x 2.2.0 怎样在lua中注冊回调函数给C++

cocos2d-x内部使用tolua进行lua绑定.可是引擎并没有提供一个通用的接口让我们能够把一个lua函数注冊给C++层面的回调事件. 翻看引擎的lua绑定代码,我们能够仿照引擎中的方法来做. 值得吐槽的是.这套流程在开发中差点儿是不可避免的,而cocos2d-x居然不把它作为一个公用接口暴露给开发人员,而须要我自己动手,真是无奈. 以下以一个简单的消息分发类为样例,演示怎样完毕这一工作. MessageDispatcher.h class MessageDispather { public

Cocos2d-x 3.0中 物理碰撞检測中onContactBegin回调函数不响应问题

好吧,事实上这篇也是暂时冒出来的,近期朋友要做个物理游戏,曾经做物理还是用box2d,呃.确实要花些功夫才干搞懂当中的精髓,可是听讲这套引擎又一次封装了一次.要easy非常多,所以就简单尝试了一下,感觉确实要简单不少,只是在这当中还是遇到了些问题,首先就来说说onContactBegin这个回调函数响应问题. 先说说情况.简单做了一个打砖块的游戏.前面一切都非常顺利,仅仅是做到碰撞检測的时候,发现回调函数弄死都不调用.開始我以为函数写错了,后来查了api.testCpp都没有错,在3.0的api

Cocos2d-x 3.0中 物理碰撞检测中onContactBegin回调函数不响应问题

好吧,其实这篇也是临时冒出来的,最近朋友要做个物理游戏,以前做物理还是用box2d,呃,确实要花些功夫才能搞懂其中的精髓,但是听讲这套引擎重新封装了一次,要容易很多,所以就简单尝试了一下,感觉确实要简单不少,不过在这其中还是遇到了些问题,首先就来说说onContactBegin这个回调函数响应问题. 先说说情况,简单做了一个打砖块的游戏,前面一切都很顺利,只是做到碰撞检测的时候,发现回调函数弄死都不调用.开始我以为函数写错了,后来查了api,testCpp都没有错,在3.0的api中,没有关于P

动作回调函数 (CallFunc,CallFuncN,CCCallFuncND)

动作回调函数 (例子) 1 bool HelloWorld::init() 2 { 3 ////////////////////////////// 4 // 1. super init first 5 if ( !Layer::init() ) 6 { 7 return false; 8 } 9 10 Size visibleSize = Director::getInstance()->getVisibleSize(); 11 Vec2 origin = Director::getInsta

Cocos2d-x3.1回调函数详解

Cocos2d-x3.1中回调函数的定义在CCRef.h中声明,源码如下: typedef void (Ref::*SEL_CallFunc)(); typedef void (Ref::*SEL_CallFuncN)(Node*); typedef void (Ref::*SEL_CallFuncND)(Node*, void*); typedef void (Ref::*SEL_CallFuncO)(Ref*); typedef void (Ref::*SEL_MenuHandler)(Re

Cocos2d-x3.1回调函数具体解释

Cocos2d-x3.1回调函数的定义CCRef.h声明.源代码,例如,下面的: typedef void (Ref::*SEL_CallFunc)(); typedef void (Ref::*SEL_CallFuncN)(Node*); typedef void (Ref::*SEL_CallFuncND)(Node*, void*); typedef void (Ref::*SEL_CallFuncO)(Ref*); typedef void (Ref::*SEL_MenuHandler)