博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Cocos2d-x中触摸事件
阅读量:6652 次
发布时间:2019-06-25

本文共 2071 字,大约阅读时间需要 6 分钟。

理解一个触摸事件能够从时间和空间双方面考虑。

1、触摸事件的时间方面

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

 

触摸事件有两个事件监听器:EventListenerTouchOneByOne和EventListenerTouchAllAtOnce 。分别相应单点触摸和多点触摸。

这些监听器有一些触摸事件响应属性。这些属性相应着触摸事件不同阶段。通过设置这些属性能够实现事件与事件处理者函数的关联。

EventListenerTouchOneByOne中触摸事件响应属性:

std::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表达式、绑定表达式以及其他函数对象等。

EventListenerTouchAllAtOnce 中触摸事件响应属性:

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。当多点触摸事件被取消时回调该属性所指定的函数。

 

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

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)函数。

其他触摸事件的阶段也须要採用相似的代码。这里不再赘述。

 

2、触摸事件的空间方面

空间方面就是每一个触摸点(Touch)对象包括了当前位置信息,以及之前的位置信息(假设有的话),以下的函数是能够获得触摸点之前的位置信息:

Point getPreviousLocationInView()                 //UI坐标

Point getPreviousLocation()                            //OpenGL坐标

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

Point getLocationInView()                      //UI坐标

Point getLocation()                                           //OpenGL坐标

《Cocos2d-x实战 C++卷》现已上线,各大商店均已开售:

京东:

亚马逊:

当当:

互动出版网:

《Cocos2d-x实战 C++卷》源代码及样章下载地址:

源代码下载地址:

样章下载地址:

欢迎关注智捷iOS课堂微信公共平台
你可能感兴趣的文章
根据字体多少使UILabel自动调节尺寸
查看>>
Discuzee模版社区
查看>>
微信公众号开发简介
查看>>
有人认为“中文编程”是解决中国程序员编程效率的秘密武器,请问它是一个“银弹”吗?...
查看>>
YII 模型model层添加新变量,渲染到视图层
查看>>
dede后台栏目文章问题
查看>>
扩展欧基里德算法模板
查看>>
jqgrid 单元格放超链接文本
查看>>
heartbeat + drbd + nginx
查看>>
UVA458 The Decoder
查看>>
CCF201503-5 最小花费(30分)
查看>>
CCF NOI1145 数字金字塔【DP】
查看>>
HDU5150 Sum Sum Sum
查看>>
UVA11292 HDU1902 POJ3646 The Dragon of Loowater【贪心】
查看>>
python入门知识点(上)
查看>>
ASP.Net页面刷新后自动滚动到原来位置
查看>>
jquery toast消息提示
查看>>
数据结构C语言>3基本链表>3-5链表的结点删除
查看>>
20141114
查看>>
关于如何衡量项目的进度一点思考
查看>>