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



Cocos(也称为Cocos2d-x)是一款用于开发游戏和交互式应用程序的开源跨平台游戏引擎。它支持多点触控,允许开发者在应用程序中实现多个手指的触摸操作。 在Cocos中,多点触控功能可以通过以下方式实现: 1. 触摸事件:Cocos提供了处理触摸事件的功能,包括开始、移动和结束事件。开发者可以通过注册触摸事件处理函数来监听这些事件,并在函数中处理多个手指的触摸操作。 2. 触摸监听:Cocos提供了触摸监听器类,例如`EventListenerTouchOneByOne`,它允许开发者单独处理每个触摸事件。通过创建一个触摸监听器,并将其附加到事件循环中,可以监听并响应多个手指的触摸操作。 3. 触摸区域:Cocos提供了触摸区域的概念,即当多个手指在屏幕上同时触摸时,它们所在的区域。开发者可以使用`Rect`类来表示触摸区域,并在代码中处理与该区域相关的操作。 4. 手势识别:Cocos还支持手势识别,包括双指缩放、捏合和旋转等。通过使用手势识别器类,如`EventListenerGesture`,开发者可以识别并响应这些手势,并在应用程序中实现相应的功能。 总之,Cocos是一款支持多点触控的跨平台游戏引擎,开发者可以使用它来开发具有多点触控功能的游戏和应用。通过注册触摸事件处理函数、使用触摸监听器和触摸区域、以及识别手势,可以轻松实现多点触控功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值