文档章节

cocos2d-x 之 EventDispath 小结

冰释的火焰
 冰释的火焰
发布于 2015/09/17 22:33
字数 488
阅读 11
收藏 0

 EventListeners事件

EventListener                   普通的监听器

EventListenerCustom             自定义消息机制

EventListenerKeyboard           键盘事件

EventListenerMouse              鼠标点击事件

EventListenerTouchOneByOne      单点事件


//ev  均是使用的监听事件

多个层之间的穿透 ev->setSwallowTouches(true);

多点触控的单点处理

判断是点击的左边还是右边

auto ev = EventListenerTouchOneByOne::create();
          ev->onTouchBegan = [&](Touch*touch, Event*)
          {
               CCLOG("layer 1");
               if (1/* 这次触摸在左侧 */) this->leftTouchId = touch->getID();
               if (1/*  是右侧*/) this->rightTouchId = touch->getID();
               return true;
          };
          ev->onTouchMoved = [&](Touch* touch, Event*){
               //touch->getID() == this->leftTouchId;
          };
 _eventDispatcher->addEventListenerWithSceneGraphPriority(ev, layer);

多点触摸和单点触摸差不多:

消息派发流程


注册回调函数  -->  消息派发模块(_eventDispatcher)     -->  帧循环(绘制场景,派发消息,内存管理)

 

自定义消息,是自己给自己发消息

被调用的地方注册回调函数,调用的地方发送消息,就可以实现通信

创建:

EventListenerCustom* ev = EventListenerCustom::create("MyEvent", CC_CALLBACK_1(T15EventDispath::customEventHande, this));

派发消息:

_eventDispatcher->dispatchCustomEvent("MyEvent");

一个完成的自定义的调用:

鼠标点击一下,就发送消息

EventListenerCustom* ev = EventListenerCustom::create("MyEvent", CC_CALLBACK_1(XXXX::customEventHande, this));
     _eventDispatcher->addEventListenerWithSceneGraphPriority(ev, this);
    
     {
          EventListenerTouchOneByOne*ev = EventListenerTouchOneByOne::create();
          ev->onTouchBegan = [&](Touch*, Event*){
               this->_eventDispatcher->dispatchCustomEvent("MyEvent", nullptr);
          };
          _eventDispatcher->addEventListenerWithSceneGraphPriority(ev, this);
               //_eventDispatcher->dispatchCustomEvent("MyEvent");
     }

回调函数的处理:

void XXXX::customEventHande(EventCustom* ev)
{
     ev->getEventName();    //  在这里就就是指的  "MyEvent"
     ev->getUserData();        //   一个指针,不过上面是nullptr
}
//用发消息取代函数的调用,是一种设计上的进步

键盘消息事件:

EventListenerKeyboard* keyev = EventListenerKeyboard::create();
     keyev->onKeyPressed = [](EventKeyboard::KeyCode key, Event*){
          if(key == EventKeyboard::KeyCode::KEY_J)
          {
               // 表示j键被按下
               CCLOG("j is down");
          }
     };
     keyev->onKeyReleased = [](EventKeyboard::KeyCode key, Event*){
          if(key == EventKeyboard::KeyCode::KEY_J)
          {
               // 表示j键被释放
               CCLOG("j is up");
          }
     };
     _eventDispatcher->addEventListenerWithSceneGraphPriority(keyev, this);

重力感应:

     EventListenerAcceleration* ev = EventListenerAcceleration::create(
     [ ](Acceleration*, Event* ev){
     });
     _eventDispatcher->addEventListenerWithSceneGraphPriority(ev, this);  // 0

消息派发器:

 _eventDispatcher->addEventListenerWithSceneGraphPriority(ev, this);

第二个参数表示优先级 负的越高,表示优先级越高,正的越高,优先级越低

系统的默认的优先级是0

© 著作权归作者所有

冰释的火焰
粉丝 1
博文 10
码字总数 2357
作品 0
成都
程序员
私信 提问
购买李宁Cocos2d-x套餐,送最新出的《Cocos2d-x游戏实战指南》签名书一本

活动时间:2016-10-18至2016-11-30 通过本套餐,可完全了解Cocos2d-x 3.x的相关技术,以及掌握C++语言,并具有一定的项目实战经验。 Cocos2d-x游戏开发套餐:http://edu.51cto.com/pack/vie...

androidguy
2018/06/29
0
0
《Cocos2d-x实战 C++卷》上线了-源码-样章-感谢大家的支持

《Cocos2d-x实战 C++卷》上线了 感谢大家一直以来的支持! 全面介绍Cocos开发技巧,采用Cocos2d-x3.2版本,并且详细介绍跨平台移植已经多平台发布细节。 · 各大商店均开始销售: 京东:htt...

智捷课堂
2014/12/01
0
0
《Cocos2d-x实战 Lua卷》上线了

感谢大家一直以来的支持! 各大商店均开始销售: 京东:http://item.jd.com/11659697.html 当当:http://product.dangdang.com/23659810.html 《Cocos2d-x实战 Lua卷》源码及样章下载地址: ...

智捷课堂
2015/03/26
0
1
quick-cocos2d-x for mac开发环境安装配置

我的开发环境 操作系统:mac Cocos2d-x:v3.2 Cocos2d-lua(quick-cocos2d-x):v3.2-RC1 Cocos Studio:v2.0.2 Cocos Code IDE :v1.0.1(64bit) 安装步骤 安装Cocos2d-x 把下载好的cocos2d......

贪睡猫仙mosen
2014/11/30
0
0
《Cocos2d-x实战 JS卷 Cocos2d-JS开发》上线了

感谢大家一直以来的支持! 各大商店均开始销售: 京东:http://item.jd.com/11659698.html 当当:http://product.dangdang.com/23659808.html 《Cocos2d-x实战 JS卷 Cocos2d-JS开发》源码及样...

智捷课堂
2015/03/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

【阴阳师】真蛇10层记录

蛇切黑体系 追月神 散件一速,速度越高越好(220+) 镰鼬 招财二速,速度211以上; 山兔 火灵三速,速度180-200均可; 丑女 心眼四速,速度170左右即可; 大蛇 蚌精暴击套。速度高于阴阳师即...

Areya
23分钟前
3
0
js动态设置元素高度

this.$refs.xxx.style.height= this.contentHeight; 元素需要绑定

Carbenson
今天
2
0
今天的学习

今天学到了ci框架中的查询语句的where条件语句: 1、$this->db->select('')->from('')->where('id = ??')->get()->result_array();2、$this->db->select('')->from('')->where('id', '??'......

墨冥
今天
2
0
MySQL在高并发下的订单撮合、系统使用、共享锁与排他锁保证数据一致性

前序 距离上次择文发表,两月余久。2018年也即将要结束了,目前的工作依然是与区块链应用相关的,也很荣幸在9月初受邀签约出版暂名为《区块链以太坊DApp实战开发》一书,预计在明年年初出版。...

我最喜欢三大框架
今天
2
0
深入理解Flutter多线程

该文章属于<简书 — 刘小壮>原创,转载请注明: <简书 — 刘小壮> https://www.jianshu.com/p/54da18ed1a9e Flutter默认是单线程任务处理的,如果不开启新的线程,任务默认在主线程中处理。 ...

刘小壮
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部