cocos2d: 单击,双击,及双指捏合事件的判断


  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,一个是单一监听,一个是分发监听;

 

转自http://xiaominghimi.blog.51cto.com/2614927/632985

posted @ 2012-06-27 10:48  optimus  阅读(1444)  评论(0编辑  收藏  举报