【iOS-Cocos2d游戏开发之五】【2】多触点与触屏事件详解(单一监听、事件分发)

简介:

那么大概介绍了监听事件后,那么触屏中最关心的就应该是多触点啦;

 

 
 
  1. //-----获取多点触摸   
  2. NSSet *allTouches = [event allTouches];   
  3. UITouch *touchOne = [[allTouches allObjects]objectAtIndex:0];   
  4. UITouch *touchTwo = [[allTouches allObjects]objectAtIndex:1];   
  5. //...类推   

获取多点狠简单,那么下面再将基本常用到的几个判断写下:1-判断用户单击还是双击(针对一个触点)

 
 
  1. if([allTouches count]==1) {    
  2.     UITouch *touchOne = [[allTouches allObjects]objectAtIndex:0];   
  3.     switch ([touchOne tapCount]) {   
  4.         case 1:   
  5.              //单击   
  6.             CCLOG(@"%@",@"单击");   
  7.             break;   
  8.         case 2:   
  9.             //双击   
  10.             CCLOG(@"%@",@"双击");   
  11.             break;   
  12.     }   
  13. }   

2-判断用户两个触点之间是合拢还是分开(针对两个触点)

 

 
 
  1. if([allTouches count]==2) {    
  2.     //适当修改处理,不能同时取,否则肯定一样的啦(可以一个在began 一个在end)   
  3.     UITouch *touchOne = [[allTouches allObjects]objectAtIndex:0];   
  4.     UITouch *touchTwo = [[allTouches allObjects]objectAtIndex:1];   
  5.     CGFloat *disFirst  =[self distance:[touchOne locationInView:[self view]]    
  6.                             todistance:[touchTwo locationInView:[self view]]];   
  7.        
  8.     UITouch *touchOne = [[allTouches allObjects]objectAtIndex:0];   
  9.     UITouch *touchTwo = [[allTouches allObjects]objectAtIndex:1];   
  10.     CGFloat *disFinal  =[self distance:[touchOne locationInView:[self view]]   
  11.                             todistance:[touchTwo locationInView:[self view]]];   
  12.     if (disFirst>disFinal) {   
  13.         CCLOG(@"%@",@"合拢");   
  14.     }else{   
  15.         CCLOG(@"%@",@"分开");   
  16.     }   
  17. }   

 

这里我就粗略的写在一起,判定两个触点是否合拢其实就是用户刚触屏时记录两点之间的距离记做disFirst,然后在两个触点离开屏幕(或者移动事件中)的时候计算

当前的两个触点的距离disFinal,那么最后根据disFirst与disFinal距离关系就能知道是合拢还是分开;

(CCLOG 是cocos2d封装的打印方法,此种打印在编译发布正式游戏程序的时候是不会编译到程序中的,但是NSLOG会一直存在!要注意!)

 

最后给出两个函数,用于计算不同方式监听的函数中获取(转换)坐标的,因为cocos2d是openGL进行搭建的框架,所以需要坐标转换;

 

 
 
  1. +(CGPoint) locationFromTouches:(NSSet*)touches   
  2. {   
  3.     return [self locationFromTouch:[touches anyObject]];   
  4. }   
  5. +(CGPoint) locationFromTouch:(UITouch*)touch   
  6. {   
  7.     CGPoint touchLocation = [touch locationInView: [touch view]];   
  8.     return [[CCDirector sharedDirector] convertToGL:touchLocation];   
  9. }   

两个方法一看就能看出区别,一个是UITouch的,一个是NSSet,一个是单一监听,一个是分发监听;

 

ok,本章就到这里~~~(下周进入封闭开发了,吃睡都在公司了,咳咳,带上我的多啦a梦的小裤衩,娃哈哈~)










本文转自 xiaominghimi 51CTO博客,原文链接:http://blog.51cto.com/xiaominghimi/632985,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
iOS开发
求助 iOS 分发的最佳实践
求助 iOS 分发的最佳实践
|
2月前
|
iOS开发 开发者
iOS 分发证书过期或手动吊销,会影响 App 的下架吗?
iOS 分发证书过期或手动吊销,会影响 App 的下架吗?
|
11月前
|
iOS开发
求助 iOS 分发的最佳实践
目前组里准备开一个 iOS 的项目,但是还在调研阶段,不太清楚使用哪种分法方式比较合理。理想的方式是:
|
iOS开发
iOS开发 - touchBegan事件判断点击的位置在View上还是在View的子View上
iOS开发 - touchBegan事件判断点击的位置在View上还是在View的子View上
234 0
iOS开发 - touchBegan事件判断点击的位置在View上还是在View的子View上
|
iOS开发
iOS开发- runtime基本用法解析和用runtime给键盘添加工具栏和按钮响应事件
iOS开发- runtime基本用法解析和用runtime给键盘添加工具栏和按钮响应事件
116 0
|
Android开发 iOS开发
关于监听微信浏览器返回按钮事件处理安卓IOS通用
关于监听微信浏览器返回按钮事件处理安卓IOS通用
279 0
关于监听微信浏览器返回按钮事件处理安卓IOS通用
|
iOS开发
iOS之UIPickerView滚动事件
在开发中,我们会用到pickerview滚动条,那如何监听到pickview的滚动事件呢,之前开发就遇到过一个问题,快速滑动秒选确定按钮,地址显示不对的问题,解决办法为在点选确定辅助按钮的时候判断当时的pickerView是否正在滚动,如果在滚动则不允许触发点选确定后的其他操作。
316 0
iOS之UIPickerView滚动事件
|
iOS开发
iOS事件响应控制(二)
iOS事件响应控制
102 0
iOS事件响应控制(二)
|
iOS开发
iOS事件响应控制(一)
iOS事件响应控制
141 0
iOS事件响应控制(一)