• 欢迎来到GeekFaner

    每周更新一篇教程,轻松学习cocos2d-x

    联系我们
  • 又是一个美好的一天

    每天的太阳都是新的,今天要比昨天好

    联系我们
  • 出发!

    开始今天的课程学习,让我们的明天更美好

    联系我们

课程概述

“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处理焦点事件。

联系我们

笔者制作网站的目的,主要是借用自己之前的知识背景(Android App开发和图形学知识),将自己学习笔记拿出来,和大家一起进行交流,毕竟每个人的知识体系不同,有交流才会有提高,所以欢迎大家通过各种方式和我联系。
网址:www.geekfaner.com
youku教学视频:http://i.youku.com/geekfaner
“百度传课”教学视频(高清版_推荐):http://www.chuanke.com/s2588605.html

wangshuo@geekfaner.com