【cocos2d-x 3.x】03-浅谈cocos消息分发机制(上)
来源:互联网 发布:中国足球数据库 编辑:程序博客网 时间:2024/05/16 11:28
如何注册触摸消息
2.x的触摸消息
在cocos2.x版本中,我们使用CCLayer中的setTouchEnabled和setTouchMode注册触摸消息,并实现ccTouchBegan、ccTouchMoved等虚函数来响应触摸消息
setTouchEnabled(true); //允许触摸
setTouchMode(kCCTouchesOneByOne); //接收触摸消息模式为单点触摸
//设置玩这些后,我们还需要实现这几个虚函数
//触摸开始,如果返回值为true,则继续响应move和end消息
virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent*pEvent);
//触摸点移动
virtual void ccTouchMoved(CCTouch *pTouch, CCEvent*pEvent);
//触摸结束
virtual void ccTouchEnded(CCTouch *pTouch, CCEvent*pEvent);
3.x的消息(EventDispatcher)
在3.x中,触摸消息不再是Layer的专利,所有Node都可以处理、注册消息
事件监听优先级
addEventListenerWithSceneGraphPriority 的事件监听器优先级是0,而且在addEventListenerWithFixedPriority 中的事件监听器的优先级不可以设置为 0,因为这个是保留给SceneGraphPriority 使用的
FixedPriority listener添加完之后需要手动remove,而SceneGraphPrioritylistener是跟node绑定的,在node的析构函数中会被移除
消息分发器
_eventDispatcher是Node的成员,通过它管理当前节点(场景、层、精灵等)的所有事件的分发。但它本身是一个单例模式值的引用,在Node的构造函数中,通过Director::getInstance()->getEventDispatcher(); 获取,有了这个属性,就能方便的处理事件
触摸事件
//创建单点触摸监听
auto evTouch = EventListenerTouchOneByOne::create();
evTouch->onTouchBegan= CC_CALLBACK_2(HelloWorld::onTouchBegan,this); //用函数指针方式
evTouch->onTouchMoved= [](Touch*,Event*){}; //用lambda表达式方式
evTouch->setSwallowTouches(true);//是否向下传递
//注册到监听队列,优先级默认为0
this->_eventDispatcher->addEventListenerWithSceneGraphPriority(evTouch,this);
键盘、鼠标、加速器事件同理
auto evKb = EventListenerKeyboard::create();
evKb->onKeyPressed= CC_CALLBACK_2(HelloWorld::onKeyPressed,this);
evKb->onKeyReleased= [](EventKeyboard::KeyCode, Event*){};
_eventDispatcher->addEventListenerWithSceneGraphPriority(evKb,this);
自定义事件
注册自定义事件
//创建一个自定义事件,被触发时,会输出helloharry
auto evCustom = EventListenerCustom::create("harry", []{log("helloharry"); });
//注册自定义消息
_eventDispatcher->addEventListenerWithSceneGraphPriority(evCustom,this);
触发自定义事件
_eventDispatcher->dispatchCustomEvent("harry");
- 【cocos2d-x 3.x】03-浅谈cocos消息分发机制(上)
- cocos2d-x的触摸消息分发机制
- COCOS-3.X事件分发机制-原理
- Cocos2d-x 3.x 事件分发机制
- Cocos2d-x 3.X 事件分发机制
- Cocos2d-x 3.X 事件分发机制
- Cocos2d-x 3.X 事件分发机制
- Cocos2d-x 3.X 事件分发机制
- Cocos2d-x 3.X 事件分发机制
- Cocos2d-x 3.0 屏幕触摸及消息分发机制
- Cocos2d-x 3.0 屏幕触摸及消息分发机制
- Cocos2d-x 3.0 屏幕触摸及消息分发机制
- Cocos2d-x 事件分发机制
- COCOS-3.X事件分发机制-触摸事件
- Cocos2d-X 3.x 事件分发机制详解
- Cocos2d-x 3.x新事件分发机制总结
- Cocos2d-x 3.x新事件分发机制总结
- Cocos2d-x v3.2笔记——Cocos2d-x 3.x新事件分发机制总结
- Linux下SVN安装配置
- C 语言程序设计实践 6.6 小光头的反攻
- bzoj 1670: [Usaco2006 Oct]Building the Moat护城河的挖掘
- git操作设置
- C 语言程序设计实践 6.7 觉得自己萌萌哒~
- 【cocos2d-x 3.x】03-浅谈cocos消息分发机制(上)
- POJ 题目1252Euro Efficiency(背包变形,允许找零)
- 黑马程序员——Objective-C——内存管理、ARC
- 2.Lucene3.6.2包介绍,第一个Lucene案例介绍,查看索引信息的工具lukeall介绍,Luke查看的索引库内容,索引查找过程
- c/c++基础(二十五) 编写makefile文件
- 广度优先遍历
- POW(X,N)
- JPEG文件编/解码详解
- 《Linux课程复习》