Cocos2d-x 3.x新事件分发机制总结
2015-01-14 16:53
148 查看
转载自
shahdza
http://cn.cocos2d-x.org/tutorial/show?id=1623
在2.x中处理事件需要用到委托代理(delegate),相信学过2.x的触摸事件的同学,都知道创建和移除的流程十分繁琐。而在3.x中由于加入了C++11的特性,而对事件的分发机制通过事件分发器EventDispatcher 来进行统一的管理。
事件监听器主要有:
触摸事件 : EventListenerTouchOneByOne、EventListenerTouchAllAtOnce
鼠标响应事件 : EventListenerMouse
键盘响应事件 : EventListenerKeyboard
加速计事件 : EventListenerAcceleration
自定义事件 : EventListenerCustom
物理碰撞事件 : EventListenerPhysicsContact
游戏手柄事件 : EventListenerController
【事件分发器】
事件分发器EventDispatcher,用于统一管理事件监听器的所有事件的分发。
1、_eventDispatcher
_eventDispatcher是Node的属性,通过Director::getInstance()->getEventDispatcher() 获得。
_eventDispatcher的工作由三部分组成:
(1)事件分发器 :EventDispatcher。
(2)事件类型 :EventTouch, EventKeyboard 等。
(3)事件监听器 :EventListenerTouch, EventListenerKeyboard 等。
监听器实现了各种触发后的逻辑,在适当时候由事件分发器分发事件类型,然后调用相应类型的监听器。
2、添加/删除监听器
添加监听器:addEventListenerWithSceneGraphPriority,addEventListenerWithFixedPriority。
删除监听器:removeEventListener,removeAllEventListeners。
3、主要函数
包含监听器的添加、删除、暂停、恢复,优先级的设置,手动分发事件等。
4、关于事件监听器的优先权
通过 addEventListenerWithSceneGraphPriority 添加的监听器,优先权为0。
通过 addEventListenerWithFixedPriority 添加的监听器,可以自定义优先权,但不能为0。
优先级越低,越先响应事件。
如果优先级相同,则上层的(z轴)先接收触摸事件。
5、使用步骤
(1)获取事件分发器 :dispatcher = Director::getInstance()->getEventDispatcher();
(2)创建监听器 :auto listener = EventListenerTouchOneByOne::create();
(3)绑定响应事件函数:listener->onTouchBegan = CC_CALLBACK_2(callback, this);
(4)将监听器添加到事件分发器dispatcher中:dispatcher->addEventListenerWithSceneGraphPriority(Listener, this);
(5)编写回调响应函数:bool callback(Touch* touch, Event* event) { ... }
【触摸事件】
1、单点触摸:EventListenerTouchOneByOne
单点触摸监听器相关:
使用举例:
2、多点触摸:EventListenerTouchAllAtOnce
多点触摸监听器相关:
使用举例:
【鼠标事件】
EventListenerMouse,主要用于监听鼠标的点击、松开、移动、滚轮的事件。
鼠标事件监听器相关:
使用举例:
【键盘事件】
EventListenerKeyboard,主要用于监听键盘某个键的按下、松开的事件。
键盘事件监听器相关:
使用举例:
【加速计事件】
EventListenerAcceleration,主要用于监听移动设备的所受重力方向感应事件。
重力感应来自移动设备的加速计,通常支持 (X, Y, Z) 三个方向的加速度感应,所以又称为三向加速计。在实际应用中,可以根据3个方向的力度大小来计算手机倾斜的角度或方向。
1、加速计信息类Acceleration
该类中每个方向的加速度,大小都为一个重力加速度大小。
2、开启加速计感应
在使用加速计事件监听器之前,需要先启用此硬件设备:
3、加速计监听器相关
4、使用举例
5、实际效果
在电脑上看不出效果,需要移植到手机上,才能看到加速计的效果。
【自定义事件】
以上是系统自带的事件类型,事件由系统内部自动触发,如 触摸屏幕,键盘响应等。
EventListenerCustom 自定义事件,它不是由系统自动触发,而是人为的干涉。
1、创建自定义监听器
2、分发自定义事件
自定义的事件监听器,需要通过手动的方式,将事件分发出去。
通过 EventCustom(string eventName); 来获取自定义监听器。
通过 dispatcher->dispatchEvent(&event); 来手动将事件分发出去。
3、使用举例
4、说明
每个自定义的事件监听器,都有一个监听器名字eventName。
需要手动通过 dispatcher->dispatchEvent(&event); 来手动将事件分发出去。
可以通过 dispatcher->dispatchCustomEvent(,); 来给自定义事件监听器绑定一个用户数据。
来源网址:/article/4603075.html
shahdza
http://cn.cocos2d-x.org/tutorial/show?id=1623
在2.x中处理事件需要用到委托代理(delegate),相信学过2.x的触摸事件的同学,都知道创建和移除的流程十分繁琐。而在3.x中由于加入了C++11的特性,而对事件的分发机制通过事件分发器EventDispatcher 来进行统一的管理。
事件监听器主要有:
触摸事件 : EventListenerTouchOneByOne、EventListenerTouchAllAtOnce
鼠标响应事件 : EventListenerMouse
键盘响应事件 : EventListenerKeyboard
加速计事件 : EventListenerAcceleration
自定义事件 : EventListenerCustom
物理碰撞事件 : EventListenerPhysicsContact
游戏手柄事件 : EventListenerController
【事件分发器】
事件分发器EventDispatcher,用于统一管理事件监听器的所有事件的分发。
1、_eventDispatcher
_eventDispatcher是Node的属性,通过Director::getInstance()->getEventDispatcher() 获得。
_eventDispatcher的工作由三部分组成:
(1)事件分发器 :EventDispatcher。
(2)事件类型 :EventTouch, EventKeyboard 等。
(3)事件监听器 :EventListenerTouch, EventListenerKeyboard 等。
监听器实现了各种触发后的逻辑,在适当时候由事件分发器分发事件类型,然后调用相应类型的监听器。
2、添加/删除监听器
添加监听器:addEventListenerWithSceneGraphPriority,addEventListenerWithFixedPriority。
删除监听器:removeEventListener,removeAllEventListeners。
3、主要函数
包含监听器的添加、删除、暂停、恢复,优先级的设置,手动分发事件等。
通过 addEventListenerWithSceneGraphPriority 添加的监听器,优先权为0。
通过 addEventListenerWithFixedPriority 添加的监听器,可以自定义优先权,但不能为0。
优先级越低,越先响应事件。
如果优先级相同,则上层的(z轴)先接收触摸事件。
5、使用步骤
(1)获取事件分发器 :dispatcher = Director::getInstance()->getEventDispatcher();
(2)创建监听器 :auto listener = EventListenerTouchOneByOne::create();
(3)绑定响应事件函数:listener->onTouchBegan = CC_CALLBACK_2(callback, this);
(4)将监听器添加到事件分发器dispatcher中:dispatcher->addEventListenerWithSceneGraphPriority(Listener, this);
(5)编写回调响应函数:bool callback(Touch* touch, Event* event) { ... }
【触摸事件】
1、单点触摸:EventListenerTouchOneByOne
单点触摸监听器相关:
多点触摸监听器相关:
EventListenerMouse,主要用于监听鼠标的点击、松开、移动、滚轮的事件。
鼠标事件监听器相关:
EventListenerKeyboard,主要用于监听键盘某个键的按下、松开的事件。
键盘事件监听器相关:
EventListenerAcceleration,主要用于监听移动设备的所受重力方向感应事件。
重力感应来自移动设备的加速计,通常支持 (X, Y, Z) 三个方向的加速度感应,所以又称为三向加速计。在实际应用中,可以根据3个方向的力度大小来计算手机倾斜的角度或方向。
1、加速计信息类Acceleration
该类中每个方向的加速度,大小都为一个重力加速度大小。
在使用加速计事件监听器之前,需要先启用此硬件设备:
在电脑上看不出效果,需要移植到手机上,才能看到加速计的效果。
【自定义事件】
以上是系统自带的事件类型,事件由系统内部自动触发,如 触摸屏幕,键盘响应等。
EventListenerCustom 自定义事件,它不是由系统自动触发,而是人为的干涉。
1、创建自定义监听器
自定义的事件监听器,需要通过手动的方式,将事件分发出去。
通过 EventCustom(string eventName); 来获取自定义监听器。
通过 dispatcher->dispatchEvent(&event); 来手动将事件分发出去。
每个自定义的事件监听器,都有一个监听器名字eventName。
需要手动通过 dispatcher->dispatchEvent(&event); 来手动将事件分发出去。
可以通过 dispatcher->dispatchCustomEvent(,); 来给自定义事件监听器绑定一个用户数据。
来源网址:/article/4603075.html
相关文章推荐
- Cocos2d-x v3.2笔记——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.X 事件分发机制
- Cocos2d-X 3.x 事件分发机制详解
- android事件分发机制总结
- cocos2d-js 事件分发机制
- cocos2d-x-3.1 事件分发机制 (coco2d-x 学习笔记七)
- Android事件分发和消费机制总结
- cocos2d-x 事件分发机制 ——触摸事件监听
- cocos2d-x 3.0 事件分发机制
- cocos2d-x-3.3-012-事件分发机制
- cocos2d-x 事件分发机制 ——加速计事件监听
- 事件分发机制-----------------------cocos2d-x3.0正式版本(7.20)
- [Cocos2d-x v3.x官方文档]事件分发机制
- Cocos2d-x v3.x官方文档: 事件分发机制
- 【cocos2d-x】3.0新的事件分发机制