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

本文深入探讨了Cocos2dx中多点触控处理机制,重点解析了 touches[] 数组的使用及记忆机制,通过实例展示了如何在不同触控场景下正确应用该数组。

        最近在研究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]。这种记忆会在一次连续的触摸中保持存在,如果触摸停止了,记忆机制不会继续延续。



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值