一、触摸事件的时间方面php
触摸事件的在时间方面,以下图所示,能够有不一样的“按下”、“移动”和“抬起”等阶段,表示触摸是否刚刚开始、是否正在移动或处于静止状态,以及什么时候结束,也就是手指什么时候从屏幕抬起。此外,触摸事件的不一样阶段均可以有单点触摸或多点触摸,是否支持多点触摸还要看设备和平台。html
触摸事件有两个事件监听器:EventListenerTouchOneByOne和EventListenerTouchAllAtOnce ,分别对应单点触摸和多点触摸。这些监听器有一些触摸事件响应属性,这些属性对应着触摸事件不一样阶段。经过设置这些属性可以实现事件与事件处理者函数的关联。函数
EventListenerTouchOneByOne中触摸事件响应属性:性能
std::function<bool(Touch*,Event*)> onTouchBegan。当一个手指触碰屏幕时回调该属性所指定函数。若是函数返回值为true,则能够回调后面的两个属性(onTouchMoved和onTouchEnded)所指定的函数,不然不回调。网站
std::function<void(Touch*,Event*)> onTouchMoved。当一个手指在屏幕移动时回调该属性所的指定函数。this
std::function<void(Touch*,Event*)> onTouchEnded。当一个手指离开屏幕时回调该属性所的指定函数。spa
std::function<void(Touch*,Event*)> onTouchCancelled。当单点触摸事件被取消时候回调该属性所的指定函数。.net
说明 std::function是一种通用的函数封装。std::function的实例能够是任何能够调用的目标,这些目标包括:函数、Lambda表达式、绑定表达式以及其它函数对象等。code
EventListenerTouchAllAtOnce 中触摸事件响应属性:orm
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。当多点触摸事件被取消时回调该属性所指定的函数。
使用这些属性的代码片断演示了它们的使用:
[html] view plaincopy
auto listener =EventListenerTouchOneByOne::create();
listener->onTouchBegan =CC_CALLBACK_2(HelloWorld::touchBegan, this);
... ...
bool HelloWorld::touchBegan(Touch*touch, Event* event) {
......
returnfalse;
}
首先咱们须要使用EventListenerTouchOneByOne::create()建立单独触摸事件监听器对象。而后设置它的listener->onTouchBegan属性,其中CC_CALLBACK_2(HelloWorld::touchBegan, this)是使用CC_CALLBACK_2宏绑定回调函数,该函数是下面定义的bool HelloWorld::touchBegan(Touch*touch, Event* event)函数。
其它触摸事件的阶段也须要采用相似的代码,这里再也不赘述。
二、触摸事件的空间方面
空间方面就是每一个触摸点(Touch)对象包含了当前位置信息,以及以前的位置信息(若是有的话),下面的函数是能够得到触摸点以前的位置信息:
Point getPreviousLocationInView() //UI坐标
Point getPreviousLocation() //OpenGL坐标
下面的函数是能够得到触摸点当前的位置信息。
Point getLocationInView() //UI坐标
Point getLocation() //OpenGL坐标
更多内容请关注Cocos2d-x系列图书《Cocos2d-x实战(卷Ⅰ):C++开发》
本书交流讨论网站:http://www.cocoagame.net
欢迎加入cocos2d-x技术讨论群:25776038六、327403678