1. 介绍
(1)在使用时,首先创建一个事件监听器,事件监听器包含以下几种:
触摸事件(EventListenerTouch)
键盘响应事件(EventListenerKeyboard)
加速记录事件(EventListenerAcceleration)
鼠标相应事件(EventListenerMouse)
自定义事件(EventListenerCustom)
(2)以上事件监听器统一由_eventDispatcher来进行管理。它的工作需要三部分组成:
事件分发器 EventDispatcher
事件类型 EventTouch, EventKeyboard 等
事件监听器 EventListenerTouch, EventListenerKeyboard 等
(3)监听器实现了各种触发后的逻辑,在适当时候由事件分发器分发事件类型,然后调用相应类型的监听器。
2. 其他事件派发处理模块
上一篇我们介绍了触摸事件派发处理模块,这篇我们将介绍其他事件派发处理模块,这些模块都使用了相同的处理方式。
(1)键盘响应事件
除了键盘,还可以是终端设备的各个菜单,他们使用同一个监听器来进行处理。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// 初始化并绑定
|
(2)加速计事件
在使用加速计事件监听器之前,需要先启用此硬件设备:
1 |
Device::setAccelerometerEnabled( true ); |
然后创建相应的监听器,在创建回调函数时,可以使用lambda表达式创建匿名函数,也可以绑定已有的函数逻辑实现,如下:
1 2 3 4 5 6 7 8 |
auto listener = EventListenerAcceleration::create(CC_CALLBACK_2(AccelerometerTest::onAcceleration, this ));
|
(3)鼠标相应事件
在3.0中多了鼠标捕获事件派发,这可以在不同的平台上,丰富我们游戏的用户体验。
1 2 3 4 5 6 7 |
_mouseListener = EventListenerMouse::create();
|
使用如上方法,创建一个鼠标监听器。然后分别实现各种回调函数,并且绑定。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
void MouseTest::onMouseDown(Event *event)
|
(4)自定义事件
以上是系统自带的事件类型,事件由系统内部自动触发,如触摸屏幕,键盘响应等,除此之外,还提供了一种自定义事件,简而言之,它不是由系统自动触发,而是人为的干涉,如下:
1 2 3 4 5 6 7 8 9 |
_listener = EventListenerCustom::create( "game_custom_event1" , [=](EventCustom* event){
|
以上定义了一个“自定义事件监听器”,实现了一些逻辑,并且添加到事件分发器。那么以上逻辑是在什么情况下响应的呢?请看:
1 2 3 4 5 6 7 8 |
static int count = 0;
|
定义了一个EventCustom,并且设置了其UserData数据,手动的通过_eventDispatcher->dispatcherEvent(&event);将此事件分发出去,从而触发之前所实现的逻辑。
(5)移除事件监听器
移除一个已经被添加了的监听器:
1 |
_eventDispatcher->removeEventListener(listener);
|
移除当前事件分发器中所有监听器:
1 |
_eventDispatcher->removeAllEventListeners();
|
当使用removeAll的时候,此节点的所有的监听将被移除,推荐使用指定删除的方式。
注意:removeAll之后菜单也不能响应。因为它也需要接受触摸事件。
原文地址:http://cn.cocos2d-x.org/tutorial/show?id=230