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

Cocos2d-x事件分发机制学习笔记

2015-07-27 18:02 127 查看
什么是事件分发机制

EventDispatch是响应用户事件的一种机制。

基本概念:

事件监听器封装了事件处理的代码;

事件调度器通知用户事件的监听器;

事件对象包含了关于事件的信息。

事件监听器的5种类型

EventListenerTouch - 响应触摸事件

EventListenerKeyboard - 响应键盘事件

EventListenerAcceleration - 响应加速度计的事件

EventListenMouse - 响应鼠标事件

EventListenerCustom - 响应自定义事件

FixedPriority vs SceneGraphPriority

EventDispatcher事件分发机制使用优先级来决定在事件开始时触发哪一个监听器。

FixedPriority是一个整数值。优先级值较低的事件监听器会在优先级值较高的事件监听器之前处理。

SceneGraphPriority是一个指向Node的指针。节点z-order值较高(在顶端绘制)的事件监听器在节点z-order值较低(在底端绘制)的事件监听器之前接受到事件。这将确保触摸事件能像你所期望的那样,从前往后依次传递

触摸事件

在手游中,最重要的事件是触摸事件。它们很容易被创建来提供通用的功能。首先我们要明确什么是触摸事件。当你触摸移动设备的屏幕时,屏幕会接收到这个触摸行为,并检查你触摸了哪里以及决定你触摸到了什么。然后你的触摸行为就会被响应。你所触摸的或许不是响应对象,但很有可能是它下面的东西。通常会给触摸事件分配优先级,优先级最高的就是被先响应的。

当你使用触摸事件侦听器时,这儿有三个不同的事件供你操作,它们每一个事件被调用的时间段是不相同的。

按下时会触发onTouchBegan函数。

按下时移动对象会触发onTouchMoved函数。

停止触摸时会触发onTouchEnded函数。

吞并事件(Swallowing Events)

如果你有一个监听器并且希望某个对象能接受到事件,那么你必须吞并它。换言之,吞并它能避免它把高优先级传递给其他低优先级对象。这很容易实现:

创建键盘事件

对于桌面游戏,你会发现键盘机制是非常有用的。Cocos2d-x支持键盘事件。像上面所讲的触摸事件一样,键盘事件也很容易创建:

创建加速计事件

很些移动设备都配备了加速度计。加速计是一个传感器,可以测量重力和方向上的变化。例如,来回移动你的电话来模拟平衡。Cocos2d-x也支持这些事件并且创建起来很简单。

创建鼠标事件

Cocos2d-x中一直支持鼠标事件。

值得注意的是,每个对象都只能注册一个触摸事件。如果多个对象需要使用相同的监听器,你需要使用clone()方法。

从分配器中移除事件

使用如下方法可以移除一个已有的监听器:

_eventDispatcher->removeEventListener(listener);

尽管这看起来很特殊,但是内置的Node对象使用事件分发机制与我们所讲的方式是相同的。以Menu为例,当点击带有MenuItems属性的 Menu时,你就已经分配到了一个事件。同样也可对内置的Node对象使用removeEventListener方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: