【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,如需转载请自行联系原作者

目录
相关文章
|
1月前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
10天前
|
iOS开发 开发者 MacOS
深入探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】 本文将带领读者深入了解Apple最新推出的SwiftUI框架,这一革命性的用户界面构建工具为iOS开发者提供了一种声明式、高效且直观的方式来创建复杂的用户界面。通过分析SwiftUI的核心概念、主要特性以及在实际项目中的应用示例,我们将展示如何利用SwiftUI简化UI代码,提高开发效率,并保持应用程序的高性能和响应性。无论你是iOS开发的新手还是有经验的开发者,本文都将为你提供宝贵的见解和实用的指导。
93 66
|
20天前
|
开发框架 Android开发 iOS开发
安卓与iOS开发中的跨平台策略:一次编码,多平台部署
在移动应用开发的广阔天地中,安卓和iOS两大阵营各占一方。随着技术的发展,跨平台开发框架应运而生,它们承诺着“一次编码,到处运行”的便捷。本文将深入探讨跨平台开发的现状、挑战以及未来趋势,同时通过代码示例揭示跨平台工具的实际运用。
|
24天前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。
|
26天前
|
存储 前端开发 Swift
探索iOS开发:从新手到专家的旅程
本文将带您领略iOS开发的奇妙之旅,从基础概念的理解到高级技巧的掌握,逐步深入iOS的世界。文章不仅分享技术知识,还鼓励读者在编程之路上保持好奇心和创新精神,实现个人成长与技术突破。