cocos2dx事件分发机制
- 事件源:场景中的对象,每个Node节点都可以触发事件
- 事件监听者:监听器
EventListener
,负责监控对象是否触发某个事件, 如果触发就执行相应的回调函数。 - 事件分发者:事件分发器
EventDispatcher
,负责分配事件监听器给对象。在游戏启动时,就会创建一个默认的EventDispatcher
对象
事件类型
enum class Type
{
TOUCH, // 触摸事件,单点触摸,多点触摸
KEYBOARD, // 键盘事件(按下,返回,弹出)
ACCELERATION, // 加速器事件(x,y,z轴的倾斜角度来判断加速状态)
MOUSE, // 鼠标事件
FOCUS, // 焦点事件
CUSTOM // 自定义事件
};
事件监听器类型
enum class Type
{
UNKNOWN, // 未知的事件监听器
TOUCH_ONE_BY_ONE, // 单点触摸事件监听器
TOUCH_ALL_AT_ONCE, // 多点触摸事件监听器
KEYBOARD, // 键盘事件监听器
MOUSE, // 鼠标事件监听器
ACCELERATION, // 加速器事件监听器
FOCUS, // 焦点事件监听器
CUSTOM // 自定义事件监听器
};
关于事件监听器的优先权
通过 addEventListenerWithSceneGraphPriority 添加的监听器,优先权为0。
通过 addEventListenerWithFixedPriority 添加的监听器,可以自定义优先权,但不能为0。
优先级越低,越先响应事件。
如果优先级相同,则上层的(z轴)先接收触摸事件
当使用场景图优先级时,实际上是在树的上方向后移动。如果一个事件被触发,H会看一眼,要么吞下它,要么让它传递给I
同样的事情,我要么消耗它要么让它传递给G,以此类推,先找监听器,再找Z轴最大的node结点,直到事件被它吞没或者没有得到回应,则整个事件触发机制结束