一个关于unity3d中ios设备多点触控顺序的问题

如果只有单个触控,一般直接写Input.GetTouch(0),也许理所当然地会认为,第二个按下去的手指就是Input.GetTouch(1)。事实上有可能顺序恰恰相反。

查看Touch结构体的文档,你会发现有个fingerId变量,这个变量的文档中,官方已经解释了这个问题 :如果有触控信息发生变化(新的触摸按下或松开),已经存在的触控数据的数组索引可能会变化,而它的fingerId是不会变的。这个fingerId指的是触摸发生时,是第几个触控点。

事实上,unity内部应该是用一个固定长度的数组来保存触控数据的(假设为touchDatas),fingerId就是这个数组的索引;GetTouch里调用的数组是另外一个方便遍历的数组(假设为touches),当触控发生变化时,系统会出遍历touchDatas,把有效的触控数据依次放到touches里面。如果有手指松开,会把touchDatas里对应的数据清除掉(或者做了一个标志);有手指按下,会遍历一下touchDatas,看哪个有空位,就填入哪一个。所以,后按下的,有可能在touches里的索引比已经按住的要小。

举个例子,比如我依次按下了3根手指,touchDatas和touches里面数据都是一样的三个数据。如果我松开第二根手指,这个时候touches里面就依次为第1、3个触控信息,它们的fingerId就是0、2,但在touches里面的索引是0、1;如果我再按下一个手指,发现touchDatas里第2个数据是空位,所以这个触控的fingerId就是1,而在touches里的索引也是1。


如果处理一些较复杂的多点触控,这个问题是必须弄明白的。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值