Cocos2d-x 用户事件处理机制

在移动平台中设备与用户的交互必须通过事件处理完成。用户输入被封装为事件,Cocos2d-x游戏引擎能够接收并处理这些事件,包括触摸事件、键盘事件、鼠标事件、加速度事件和自定义事件等。这里需要注意,不同平台之间事件略有差异,这与硬件有关,如在iOS
平台就无法接收键盘事件,在PC和Mac OS X平台无法接收触摸事件和加速度事件。

Cocos2d-x 用户事件处理机制
一般来说,事件处理机制都有三个角色:事件、事件源和事件处理,其中事件源是事件发生的场所,通常指控件或视图;事件处理者是接收事件并对其进行响应处理。

(1) 事件:

事件类是Event,它的子类主要有:

EventTouch(触摸事件)
EventKeyBoard(键盘事件)
EventMouth(鼠标事件)
EventAcceleration(加速度事件)
EventCustom(自定义事件)

(2) 事件源:

指的是Cocos2d-x中的精灵、层和菜单等节点对象。

(3) 事件处理:

Cocos2d-x中的事件处理者是事件监听类EventListener,它的子类主要有:

EventListenerTouchOneByOne(单点触摸监听器)
EventListenerTouchAllAtOnce(多点触摸监听器)
EventListenerKeyBoard(键盘事件监听器)
EventListenerMouse(鼠标事件监听器)
EventListenerAcceleration(加速度事件监听器)
EventListenerCustom(自定义事件监听器)

1.事件分发器

事件的监听和事件具有对应关系,Cocos2d-x提供了一个事件分发器(EventDispatcher)用于管理这种关系。
EventDispatcher类采用的是单例模式,可以通过Director::getInstance()->getEventDispatcher()获得事件分发对象。

EventDispatcher类中注册事件监听器到事件的函数如下:
(1)指定固定的事件优先级注册监听器,事件优先级决定事件响应的优先级,值越小优先级越高。

void addEventListenerWithFixedPriority(EventListener * listener, int fixedPriority)

(2)把一些控件的显示优先级作为事件优先级,越上层的精灵或层越先响应事件。

void addEventListenerWithSceneGraphPriority(EventListener * listener, Node * node)

当不再进行事件响应时,需要注销事件监听器。主要的注销函数如下:

(1)注销指定事件监听器

void removeEventListener(EventListener * listener)

(2)注销自定义事件监听器

void removeCustomEventListener(EventListener * listener)

(3)注销所有事件监听,注意:使用该函数之后,菜单也不能响应事件了,因为它需要接收触摸事件。

void removeAllEventListeners(EventListener * listener)

2.事件

下面主要介绍五类事件:

2.1 触摸事件

触摸事件可以有“按下”、“移动”和“抬起”的阶段,表示触摸的开始、移动和结束状态。另外,触摸事件的不同阶段都有单点触摸和多点触摸,具体还得看平台和设备。

(1)EventListenerTouchOneByOne(单点触摸监听器)

单点触摸事件中的响应属性:

1)当一个手指触摸屏幕时回调该属性的指定函数。如果返回为true,则可以回调后面两个属性所指定的函数,否则不回调。

std::function<bool(Touch * ,Event *)> onTouchBegan

2)当一个手指在屏幕移动时回调该属性所指定的函数。

std::function<void(Touch * ,Event *)> onTouchMoved

3)当一个手指离开屏幕时回调该属性所指定的函数。

std::function<void(Touch * ,Event *)> onTouchEnded

4)当单点触摸事件被取消时回调该属性所指定的函数

std::function<void(Touch * ,Event *)> onTouchCancelled

(2)EventListenerTouchAllAtOnce(多点触摸监听器)

多点触摸事件中的响应属性:

1)当多个手指触摸屏幕时回调该属性的指定函数。如果返回为true,则可以回调后面两个属性所指定的函数,否则不回调。

std::function<void(const std<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值