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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值