博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cocos2d: 单击,双击,及双指捏合事件的判断
阅读量:6879 次
发布时间:2019-06-26

本文共 1832 字,大约阅读时间需要 6 分钟。


  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

转载于:https://www.cnblogs.com/optimus/archive/2012/06/27/2565421.html

你可能感兴趣的文章
有序的组合
查看>>
MySQL----基本数据类型
查看>>
wpgcms---详情页面数据怎么渲染
查看>>
oracle数据库存储过程中NO_DATA_FOUND不起作用解决
查看>>
node之版本号升级和管理
查看>>
Java与设计模式-策略模式
查看>>
tengine 的优化
查看>>
C++编译器与链接器工作原理
查看>>
软件缺陷分析-软件测试之犯罪心理学
查看>>
Python实战之自己主动化评论
查看>>
spring boot下使用logback或log4j生成符合Logstash标准的JSON格式
查看>>
iOS面试题合集(77道)
查看>>
hadoop安装及配置入门篇
查看>>
[原] KVM 虚拟化原理探究(2)— QEMU启动过程
查看>>
使用Java程序调用MatLab
查看>>
什么是C++虚函数、虚函数的作用和使用方法
查看>>
Atitit.cto 与技术总监的区别
查看>>
关于【自证清白】
查看>>
手把手教你crontab排障
查看>>
订单编号
查看>>