Cocos2dx 3.0 过渡篇(二) 事件回调

简介: <p style="color:rgb(54,46,43); font-family:Arial; font-size:14.44444465637207px; line-height:26px"> 尊重原创,转载请注明来自:star特530的CSDN博客 <a target="_blank" href="http://blog.csdn.net/start530/article/det

尊重原创,转载请注明来自:star特530的CSDN博客 http://blog.csdn.net/start530/article/details/18216679

3.0 后的事件回调函数接口都不一样了,例如按钮的menu_selector(),update的 schedule_selector等,都已成明日黄花。而新的回调接口,则由四个CC_CALLBACK取代。


下面先举例一些不同的调用方法:

1、按钮:CC_CALLBACK1

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. 2.0  
  2. MenuItemImage* item =MenuItemImage::create("","",this,menu_selector(HelloWorld::callback));  
  3. 3.0  
  4. auto item = MenuItemImage::create("","",CC_CALLBACK1(HelloWorld::callback,this));  


看到这里有人可能会问,如果要更改按钮的回调函数怎么做呢?如果你继续用setTarget();这个接口,那可行不通了。

3.0里用setCallback()  替代了 setTarget(Object *rec, SEL_MenuHandler selector),参数如下:

setCallback(const ccMenuCallback&callback);


这里有看到一个新鲜的词:

ccMenuCallback,这货是什么碗糕?哈哈哈哈,如果你问我,那你就问错人了!!!我也只能告诉你大概是怎么个用法,嘿嘿。

首先,从setTarget()和setCallback()里的参数变化可以看出,ccMenuCallback 实际上就包含了Object *rec, SEL_MenuHandler selector这俩参数,举个例子:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. 2.0  
  2. Item->setTarget(this,menu_selector(HelloWorld::callback));  
  3. 3.0  
  4. Item->setCallback(CC_CALLBACK1(HelloWorld::callback,this));  

恩,就是这样子,怎么感觉说的都没啥深度,噗,有点模仿“笨木头”的语气呀。

 

2、action 回调 CC_CALLBACK0 ;CC_CALLBACK1

先举例:

1)回调函数不带参数的情况

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. 2.0  
  2. CallFunc::create(this,callfunc_selector(ActionSequence2::callback1));  
  3. void ActionSequence2::callback1(){};  
  4. 3.0  
  5. CallFunc::create(CC_CALLBACK_0(ActionSequence2::callback1,this)),  
  6. void ActionSequence2::callback1(){};  

2)回调函数带参数的情况

[cpp]  view plain copy
  1. 2.0  
  2. CCSequence* seq = CCSequence::create(  
  3.     MoveBy::create(2.0f,ccp(150,0)),  
  4.     CallFuncN::create(this,callfuncN_selector(ActionCallFunc::callback)),  
  5.     NULL);  
  6. 3.0  
  7.  auto action = Sequence::create(  
  8.         MoveBy::create(2.0f, Point(150,0)),  
  9.         CallFuncN::create( CC_CALLBACK_1(ActionCallFuncN::callback, this)),  
  10.         NULL);  

小小的总结下:CC_CALLBACK0是回调不带参数的回调函数,CC_CALLBACK1带一个参数的回调函数。

既然说到了action,顺便再说下3.0里Callfunc的新的用法(之前的版本应该没有吧…)

[cpp]  view plain copy
  1. auto action1 = CallFunc::create(  
  2.   
  3. [&](){  
  4.   
  5. auto s =Director::sharedDirector()->getWinSize();  
  6.   
  7. auto label =LabelTTF::create("called:lambda callback""Marker Felt", 16);  
  8.   
  9. label->setPosition(ccp(s.width/4*1,s.height/2-40));  
  10.   
  11. this->addChild(label);  
  12.   
  13. } );  

以前动作回调都是要新写一个回调函数,这样子虽然问题不大,但如果用到回调的地方多了,而且回调的代码也就几行而已,那之前的做法就有点受不了,现在好了,可以直接把动作执行完要回调的函数代码直接写到创建里来,是不是方便多了。不是很理解的童鞋可以看下我另外一篇博客http://blog.csdn.net/start530/article/details/19913611

3、触摸回调,CC_CALLBACK2 这个打算下一篇重点讲,所以这个先列下用法。

[cpp]  view plain copy
  1. auto touchListener = EventListenerTouchOneByOne::create();  
  2. touchListener->setSwallowTouches(true);  
  3.     
  4. touchListener->onTouchBegan = CC_CALLBACK_2(MyMenu::onTouchBegan, this);  
  5. touchListener->onTouchMoved = CC_CALLBACK_2(MyMenu::onTouchMoved, this);  
  6. touchListener->onTouchEnded = CC_CALLBACK_2(MyMenu::onTouchEnded, this);  
  7. touchListener->onTouchCancelled = CC_CALLBACK_2(MyMenu::onTouchCancelled, this);  
  8.     
  9. _eventDispatcher->addEventListenerWithSceneGraphPriority(touchListener, this);  

恩,目前也就了解这些了。以后再继续补吧。
转载请注明源地址 http://blog.csdn.net/start530/article/details/18216679
相关文章
|
7月前
|
iOS开发 容器
在做动画的控件不触发手势事件问题及解决方案
在做动画的控件不触发手势事件问题及解决方案
41 0
|
Android开发
Flutter(十三)——事件处理:手势识别与事件通知
Flutter(十三)——事件处理:手势识别与事件通知
359 2
Flutter(十三)——事件处理:手势识别与事件通知
|
存储 图形学
unity3d-EventSystem(事件)
unity3d-EventSystem(事件)
unity3d-EventSystem(事件)
|
JavaScript 前端开发 开发者
js 功能-过渡结束事件 & amp;动画结束事件|学习笔记
快速学习 js 功能-过渡结束事件 & amp;动画结束事件
566 0
js 功能-过渡结束事件 & amp;动画结束事件|学习笔记
|
图形学
Unity碰撞事件和触发事件
大家在刚开始接触Unity的时候,一定要理解碰撞与触发
526 0
Unity碰撞事件和触发事件
|
JavaScript 前端开发 开发者
Js 功能-理解滑动手势事件 |学习笔记
快速学习 Js 功能-理解滑动手势事件
125 0
|
图形学
Unity 动态加载Animator Event 事件
搬迁原来博客海澜CSDN 前一阵子频繁更改模型,总是手动添加动画事件 animator events一直比较麻烦,我就想能不能动态的生成对应的动画事件呢,然后找了一些资料,试了下感觉还不错,分享给大家,欢迎大家留言交流~需要注意的是修改后的动画事件重新动态加载后依然保留,猜测注册修改的是元数据,除非注销或者程序停止才能恢复。
2001 0