11. cocos2dx Touch

理解一个触摸事件可以从[b]时间[/b]和[b]空间[/b]两方面考虑。


[b]1、触摸事件的时间方面[/b]

触摸事件的在时间方面,如下图所示,可以有不同的“按下”、“移动”和“抬起”等阶段,表示触摸是否刚刚开始、是否正在移动或处于静止状态,以及何时结束,也就是手指何时从屏幕抬起。此外,触摸事件的不同阶段都可以有单点触摸或多点触摸,是否支持多点触摸还要看设备和平台。


[img]http://dl2.iteye.com/upload/attachment/0099/5138/041e1f2f-dbb9-3dfd-898c-ac99a8ccd5bb.jpg[/img]

触摸事件有两个事件监听器:[b]EventListenerTouchOneByOne[/b]和[b]EventListenerTouchAllAtOnce[/b] ,分别对应单点触摸和多点触摸。这些监听器有一些触摸事件响应属性,这些属性对应着触摸事件不同阶段。通过设置这些属性能够实现事件与事件处理者函数的关联。



function<bool(Touch*,Event*)> onTouchBegan
//当一个手指触碰屏幕时回调该属性所指定函数。如果函数返回值为true,则可以回调后面的两个属性(onTouchMoved和onTouchEnded)所指定的函数,否则不回调。

std::function<void(Touch*,Event*)> onTouchMoved
//当一个手指在屏幕移动时回调该属性所的指定函数。

std::function<void(Touch*,Event*)> onTouchEnded
//当一个手指离开屏幕时回调该属性所的指定函数。

std::function<void(Touch*,Event*)> onTouchCancelled
//当单点触摸事件被取消时候回调该属性所的指定函数。


说明 std::function是一种通用的函数封装。std::function的实例可以是任何可以调用的目标,这些目标包括:函数、Lambda表达式、绑定表达式以及其它函数对象等。



std::function<void(conststd::vector<Touch*>&, Event*)> onTouchesBegan
//当多个手指触碰屏幕时回调该属性所指定的函数。

std::function<void(conststd::vector<Touch*>&, Event*)> onTouchesEnded
//当多个手指在屏幕上移动时回调该属性所指定的函数。

std::function<void(conststd::vector<Touch*>&, Event*)> onTouchesMoved
//当多个手指离开屏幕时回调该属性所指定的函数。

std::function<void(conststd::vector<Touch*>&, Event*)> onTouchesCancelled
//当多点触摸事件被取消时回调该属性所指定的函数。


使用这些属性的代码片段演示了它们的使用:

首先我们需要使用 [b]EventListenerTouchOneByOne::create()[/b] 创建单独触摸事件监听器对象。

然后设置它的 [b]listener->onTouchBegan[/b] 属性,其中[b]CC_CALLBACK_2(HelloWorld::touchBegan, this)[/b]是使用 CC_CALLBACK_2宏 绑定回调函数,该函数是下面定义的 [b]bool HelloWorld::touchBegan(Touch*touch, Event* event)[/b] 函数。


其它触摸事件的阶段也需要采用类似的代码,这里不再赘述。


[b]2、触摸事件的空间方面[/b]

空间方面就是每个触摸点(Touch)对象包含了当前位置信息,以及之前的位置信息(如果有的话),下面的函数是可以获得触摸点之前的位置信息:


Point getPreviousLocationInView() //UI坐标
Point getPreviousLocation() //OpenGL坐标


下面的函数是可以获得触摸点当前的位置信息。


Point getLocationInView() //UI坐标
Point getLocation() //OpenGL坐标
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值