阅读527 返回首页    go 阿里云 go 技术社区[云栖]


Cocos2d-x中触摸事件

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

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++卷》现已上线各大商店均已开售

京东https://item.jd.com/11584534.html

亚马逊https://www.amazon.cn/Cocos2d-x%E5%AE%9E%E6%88%98-C-%E5%8D%B7-%E5%85%B3%E4%B8%9C%E5%8D%87/dp/B00PTYWTLU

当当https://product.dangdang.com/23606265.html

互动出版网https://product.china-pub.com/3770734

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

源码下载地址https://51work6.com/forum.php?mod=viewthread&tid=1155&extra=page%3D1 

样章下载地址https://51work6.com/forum.php?mod=viewthread&tid=1157&extra=page%3D1

欢迎关注智捷iOS课堂微信公共平台

最后更新:2017-04-03 05:39:30

  上一篇:go 【北大夏令营笔记-深度优先搜索】POJ1011-Sticks
  下一篇:go Linux内核剖析 之 内存寻址(二)