微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

cocos2dx 多点触控onTouches侦听细节15/11/10

最近在研究cocos2dx的多点触控,发觉网上的资料大部分只局限在侦听器和侦听函数上,对于多点触控touches[]数组的描述比较少,在这个帖子里可以总结一下。

void ontouchesBegan(const std::vector<Touch*>& touches,cocos2d::Event *unused_event){}

这个函数会在屏幕被点击的时候被调用,需要注意的是虽然参数列表传入的是一个touches数组,但是实际上绝大部分情况下每次函数调用时只会有一个Touch对象,两个手指同时点击出现两个Touch对象是不存在的。

void ontouchesMoved(const std::vector<Touch*>& touches,cocos2d::Event *unused_event){}

这个函数会在手指接触到屏幕并且移动时被调用调用时,不管手指是否移动,只要接触了屏幕,都会被传入touches数组。对于单点触控,touches[0]就是触控点。而对于多点触控,touches数组有一个颇为复杂的“记忆机制”。

我们从一个典型的多点触控情况来分析这个“记忆机制”。

左手拇指接触屏幕并移动,此时touches数组长度为1,touches[0]是第一个接触点。

右手拇指接触屏幕并移动,此时touches数组长度为2,touches[0]是第一个接触点、touches[1]就是第二个接触点。

保持两个手指的接触,无论两个手指如何滑动,数组下标和接触点的对应关系不变。


此时如果右手拇指脱离接触,那么touches数组长度为1,touches[0]是第一个接触点。如果右手拇指重新接触, 那么touches数组长度为2,touches[0]是第一个接触点。touches[1]是第二个接触点。

此时如果左手拇指脱离接触,那么touches数组长度为1,touches[0]是第二个接触点。如果左手拇指重新接触,

那么touches数组长度为2,touches[0]是第一个接触点。touches[1]是第二个接触点。



记忆机制出现在这里touches会记忆单次触控的touch下标,在多点触控中,如果前面的touches[0]对应的触摸停止了,数组长度-1,touches[1]..[2]的下标会暂时前移成..[0]..[1],而当有新的触摸事件之后,新的触摸点会重新绑定到touches[0],而..[0]..[1]会重新回到最初的touches[1]..[2]。这种记忆会在一次连续的触摸中保持存在,如果触摸停止了,记忆机制不会继续延续。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐