Cocos2d-X的事件分发(3)

前端之家收集整理的这篇文章主要介绍了Cocos2d-X的事件分发(3)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

课程概述

“Cocos2d-X的事件分发(3)”课程概述

本节课将讲述事件分发中比较复杂的触摸事件与自定义事件,以及其他的一些事件分发相关的知识。

课程笔记

触摸事件

触摸事件是手持设备最复杂最重要的事件,首先需要区分多个触摸点,其次每个触摸点的事件需要通过多次分发以表示开始、移动、结束、取消等状态。

cocos2d-X使用EventTouch来表示一个触摸事件,每个EventTouch记录了当前屏幕上处于相同状态(用EventCode表示)的一组触摸点的集合,由于一个触摸点在不同状态会触发多次事件分发,每个触摸点包含一个唯一的ID,通过Touch的getID获取

Cocos2d-X将触摸事件对应的是订阅者分为两种,一种是EventListenerTouchAllAtOnce,表示一个多点触摸事件的订阅者,含有4个回调函数,每个状态的回调函数都包含当前所有处于该状态的触摸点,需要用触摸点的ID来区分每个触摸点。另外一种是EventListenerTouchOneByOne,将多个触摸点分为多个事件通知,也含有4个回调函数,其中onTouchBegan必须实现,否则接收不到事件通知。如果返回false,则其他回调函数无法相应,反之亦然。如果屏幕上同时有4个触摸点,则相当于调用了4次EventListenerTouchOneByOne,如果不希望这样,可以类似menu那样做一些判断机制。如果希望阻止触摸点向后面订阅者继续分发,可以在onTouchBegan返回true的情况下,调用setSwallowTouches(true)。

在eventDispatcher内部,先触发EventListenerTouchOneByOne,然后再触发EventListenerTouchAllAtOnce。可以通过onTouchBegan和setSwallowTouches来控制触发的订阅器。如果使用stopPropagation,只会停止一个事件(一个状态)。

触摸点的位置判断,touch事件传入类型为Touch的参数,包含getLocation、getPrevIoUsLocation、getStartLocation、getDelta、getLocationInView、getPrevIoUsLocationInView、getStartLocationInView函数

元素不可见依然可以接收到触摸事件,需要在onTouchBegan的时候检查元素(以及长辈元素)的可见性。

其他系统事件

EventMouse处理鼠标。

EventAcclereation处理重力加速度。

EventKeyBoard处理键盘

EventFocus处理焦点事件。



原文地址:

http://www.geekfaner.com/cocos2d-x/ReadCocos2dxSourceCode24.html

猜你在找的Cocos2d-x相关文章