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

2024-09-05 13:32

本文主要是介绍Cocos2dx 3.0 过渡篇(二) 事件回调,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 尊重原创,转载请注明来自: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


[cpp] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <p> </p> 

这篇关于Cocos2dx 3.0 过渡篇(二) 事件回调的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1139097

相关文章

禁止平板,iPad长按弹出默认菜单事件

通过监控按下抬起时间差来禁止弹出事件,把以下代码写在要禁止的页面的页面加载事件里面即可     var date;document.addEventListener('touchstart', event => {date = new Date().getTime();});document.addEventListener('touchend', event => {if (new

4B参数秒杀GPT-3.5:MiniCPM 3.0惊艳登场!

​ 面壁智能 在 AI 的世界里,总有那么几个时刻让人惊叹不已。面壁智能推出的 MiniCPM 3.0,这个仅有4B参数的"小钢炮",正在以惊人的实力挑战着 GPT-3.5 这个曾经的AI巨人。 MiniCPM 3.0 MiniCPM 3.0 MiniCPM 3.0 目前的主要功能有: 长上下文功能:原生支持 32k 上下文长度,性能完美。我们引入了

FreeRTOS内部机制学习03(事件组内部机制)

文章目录 事件组使用的场景事件组的核心以及Set事件API做的事情事件组的特殊之处事件组为什么不关闭中断xEventGroupSetBitsFromISR内部是怎么做的? 事件组使用的场景 学校组织秋游,组长在等待: 张三:我到了 李四:我到了 王五:我到了 组长说:好,大家都到齐了,出发! 秋游回来第二天就要提交一篇心得报告,组长在焦急等待:张三、李四、王五谁先写好就交谁的

【经验交流】修复系统事件查看器启动不能时出现的4201错误

方法1,取得『%SystemRoot%\LogFiles』文件夹和『%SystemRoot%\System32\wbem』文件夹的权限(包括这两个文件夹的所有子文件夹的权限),简单点说,就是使你当前的帐户拥有这两个文件夹以及它们的子文件夹的绝对控制权限。这是最简单的方法,不少老外说,这样一弄,倒是解决了问题。不过对我的系统,没用; 方法2,以不带网络的安全模式启动,运行命令行,输入“ne

BT天堂网站挂马事件后续:“大灰狼”远控木马分析及幕后真凶调查

9月初安全团队披露bt天堂网站挂马事件,该网站被利用IE神洞CVE-2014-6332挂马,如果用户没有打补丁或开启安全软件防护,电脑会自动下载执行大灰狼远控木马程序。 鉴于bt天堂电影下载网站访问量巨大,此次挂马事件受害者甚众,安全团队专门针对该木马进行严密监控,并对其幕后真凶进行了深入调查。 一、“大灰狼”的伪装 以下是10月30日一天内大灰狼远控的木马样本截图,可以看到该木马变种数量不

关于回调函数和钩子函数基础知识的整理

回调函数:Callback Function 什么是回调函数? 首先做一个形象的比喻:   你有一个任务,但是有一部分你不会做,或者说不愿做,所以我来帮你做这部分,你做你其它的任务工作或者等着我的消息,但是当我完成的时候我要通知你我做好了,你可以用了,我怎么通知你呢?你给我一部手机,让我做完后给你打电话,我就打给你了,你拿到我的成果加到你的工作中,继续完成其它的工作.这就叫回叫,手机

react笔记 8-19 事件对象、获取dom元素、双向绑定

1、事件对象event 通过事件的event对象获取它的dom元素 run=(event)=>{event.target.style="background:yellowgreen" //event的父级为他本身event.target.getAttribute("aid") //这样便获取到了它的自定义属性aid}render() {return (<div><h2>{

react笔记 8-18 事件 方法 定义方法 获取/改变数据 传值

1、定义方法并绑定 class News extends React.Component {constructor(props) {super(props)this.state = {msg:'home组件'}}run(){alert("我是一个run") //方法写在类中}render() {return (<div><h2>{this.state.msg}</h2><button onCli

【Qt】定时器事件

定时器事件 在之前学习QTimer中实现了定时器的功能,而在QTimer背后是QTimerEvent定时器事件进行支撑的。在QObject中提供了一个timeEvent这个函数。 startTimer启动定时器killTimer关闭定时器 Qt 中在进⾏窗⼝程序的处理过程中,经常要周期性的执⾏某些操作,或者制作⼀些动画效果,使⽤定 时器就可以实现。所谓定时器就是在间隔⼀定时间后,去执⾏某⼀

Cmake之3.0版本重要特性及用法实例(十三)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+AOSP14系统攻城狮入门视频实战课 🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧