您的位置:首页 > 移动开发 > Cocos引擎

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: