cocos2d 触摸事件跟踪
来源:互联网 发布:巨人网络征途 编辑:程序博客网 时间:2024/04/30 23:10
前些天写程序遇到一个问题,关于cocos2d里的多点触摸事件。
当时,我需要同时跟踪几个完整的触摸事件。这些完整的触摸事件包括了这些触摸点的起始位置,中途的移动位置,以及最后的弹起位置。3个位置,对应cocos2d三个触摸回调函数:
-(void) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
-(void) ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
-(void) ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
这个三个函数,说来也只是硬件上的数据映射,相互之间似乎没有任何联系。比如开始有三个触点,begin带回的touches里,自然有三个对象。然后硬件上,一个触点开始移动,moved带回的touches里也会包含这1个对象,当然只有1个,因为其他两个触点没移动。问题便是,如何才能知道当前移动的触点是三个触点中的哪一个?
说下当时走的弯路,自己查阅了UITouch带回的信息,发现一个info结构体,包含了触点上次的位置,以及当前的位置。便想从这点出发解决问题。自己写了个双向链表记录每个begin传回的触点的位置。然后与moved和ended里传回的位置比较,相同便是同一触点。这个方法在单点触摸的时候能行通,在多点触摸的时候有点问题:moved里传回的触点的位置,与ended里传回的触点上次位置,居然不一致。哪怕是同一个触摸事件,传回的坐标也不一致。这个问题我到现在也没弄明白。如果有人知道,请告诉一声。
最后的解决方法很简单。需要跟踪一个触摸事件,其实只需要跟踪触摸事件的地址便可。也就是说,begin,moved以及ended中传回的UITouch对象,在同一个触摸事件下,只有一个共同点,那便是对象地址是一样的。可以利用这一点来追踪一个完整的触摸事件。
例如在begin里保存UITouch对象地址,在moved的UITouch里比较这个地址,相同便是同一个触摸事件。在多点触摸中需要分辨各个触摸点的情况时,这个方法比较有效。
- cocos2d 触摸事件跟踪
- cocos2d 触摸事件
- cocos2d - 触摸事件
- cocos2d接收触摸事件
- cocos2d-lua 触摸事件
- Cocos2d-JS 触摸事件
- cocos2d开发之触摸事件
- cocos2d 触摸事件的传递
- cocos2d-x触摸事件优先级
- cocos2d-x 精灵触摸事件
- cocos2d-x触摸事件优先级
- Cocos2d-x3.0 触摸事件
- Cocos2d-x中触摸事件
- QUICK COCOS2D-X 触摸事件
- Cocos2d-x屏幕触摸事件
- cocos2d-x lua 触摸事件
- cocos2d.x单点触摸事件
- Cocos2d-X之触摸事件
- javaScript制作下拉表格
- javaScript制作下拉表格
- 写代码的一天
- PKU 1847 最短路径 djistrla
- 全国各地DNS
- cocos2d 触摸事件跟踪
- 用jsp文件传Json 之 “Source Not found”错误
- 什么是多态?为什么用多态?有什么好处?
- iPhone开发基础之动画显示图片的实现
- ORACLE存储过程简明教程
- C++ 实现单例模式
- 【JavaScript】关于垃圾回收CollectGarbage()的使用(
- oracle 存储过程的基本语法
- parameter文件的学习