详解Cocos2d CCLayer中Touch使用方法

转载 2012年03月25日 10:47:16

Cocos2d CCLayerTouch使用方法是本文要介绍的内容,Cocos2d作为一个开源的2D游戏引擎,最初是用python语言实现,mac app开发流行后,提供了一个Objective-C的版本。采用Cocos2d框架开发iphone游戏,极大提高了开发的速度。简单介绍参见百度百科 ,cocos2d官网。

Cocos2d提供了两种touch处理方式,Standard Touch Delegate和 Targeted Touch Delegate方式(参见CCTouchDelegateProtocol.h中源代码),CCLayer默认是采用第一种方式(参见CCLayer的 registerWithTouchDispatcher方法)。

在CCLayer子类中要能接收touch事件,首先需要激活touch支持,在init方法中设置isTouchEnabled值为YES。

Standard Touch Delegate(CCLayer默认采纳这种方式)

Standard方法中用户需要重载四个基本的touch处理方法,如下:

  1. -(void) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event; 

当touch事件发生时,会调用该方法响应touch事件。如果是单点touch,则只需要调用 UITouch *touch = [touches anyObject],就可以获取touch对象;如果需要响应多点 touch,则需要调用[[event allTouches] allObjects]返回一个UITouch的NSArray对象,然后使用NSArray的objectAtIndex依次访问各个UITouch对象。为了获取UITouch对象的坐标(假设该UITouch名称为touch),调用[touch locationInView: [ touch view]]会返回一个UIView相关的坐标viewPoint。

使用Cocos2d的新建应用程序向导创建一个新的cocos2d application时,在xxxAppDelegate类的applicationDidFinishLaunching方法中CCDirector会将UIView转换为支持OpenGL ES的EAGLView。此时,我们还需要将前面获取的UIView中的viewPoint转换为EAGLView坐标,调用[[CCDirector sharedDirector] convertToGL: viewPoint]即可实现。

  1. -(void) ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;  
  2.  
  3. -(void) ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;   
  4.  
  5. -(void) ccTouchesCancelled:(NSSet*)touch withEvent:(UIEvent *)event;  

这三个方法和ccTouchesBegan类似。

Targeted Touch Delegate方式

在standard方式中的响应处理事件处理的都是NSSet,而 targeted方式只处理单个的UITouch对象,在多点触摸条件下,应该采纳standard方式。在使用targeted方式之前需要重写CCLayer中的registerWithTouchDispatcher方法:

//记得在头文件中导入“CCTouchDispatcher.h”

  1. -(void) registerWithTouchDispatcher {   
  2.          [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];  
  3.    } 

targeted方式中用户需要重载4个基本的处理方法,其中ccTouchBegan必须重写,其他三个是可选的。

  1. - (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event; (必须实现)  
  2. - (void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event;  
  3. - (void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event;  
  4.  - (void)ccTouchCancelled:(UITouch *)touch withEvent:(UIEvent *)event; 

每次touch事件发生时,先调用ccTouchBegan方法,该方法对每个UITouch进行响应并返回一个BOOL值,若为YES,则后续的ccTouchMoved、ccTouchEnabled和ccTouchCancelled才会接着响应。

多点触摸支持

在xxxAppDelegate类的applicationDidFinishLaunching方法中加入下面代码

  1. [glView setMultipleTouchEnabled:YES]; 

小结:详解Cocos2d CCLayerTouch使用方法的内容介绍完了,希望通过本文的学习对你有所帮助!

相关文章推荐

iphone开发笔记——Cocos2d CCLayer中的touch

废话不多说,cocos2d 自带有两套协议 分别是CCTargetedTouchDelegate 和 CCStandardTouchDelegate 这两个都是处理touch inside 但是针对...

cocos2d学习-CCLayer中的touch

Cocos2d 作为一个开源的2D游戏引擎,最初是用python语言实现,mac app开发流行后,提供了一个Objective-C的版本。采用Cocos2d框架开发iphone游戏,极大提高了开发的...

cocos2d ccLayer响应触摸事件方法:CCStandardTouchDelegate 与 CCTargetedTouchDelegate

cocos2d ccLayer响应触摸事件方法:CCStandardTouchDelegate 与 CCTargetedTouchDelegate    以下内容转载自:http://blo...

cocos2d 颜色混合 ccBlendFunc 使用方法

本节参考:http://goldlion.blog.51cto.com/4127613/767801 1、概念     “混合”是指两种颜色的叠加方式。在新图片将要渲染...

cocos2d-android-1 使用方法

此篇博文讲解最基本cocos2d-android-1 使用方法,主要参考此文 对于cocos2d以及cocos2d-android-1 不了解的铜鞋移步这里  或者这里 ...

cocos2d-android-1 使用方法

在开发之前需要做如下的准备工作: android开发环境到这里下载最新的cocos2d-template.zip 解压.在eclipse将刚刚解压的cocos2d-template项目impor...

TexturePacker使用方法及免费申请方法(附带cocos2d中帧动画使用和plist文件解析)

TexturePacker的相关讲解以及cocos2d帧动画和plist文件的使用

cocos2d-x中用CCLayer实现对话框的简单做法,自动屏蔽下层Touch事件

在cocos2d-x中实现对话框是一件比较麻烦的事情,而且由于移植的需要游戏中很多时候不能用系统API实现。现在用CCLayer实现对话框,原理是改写自己写 DialogLayer,DialogMe...

Cocos2D-iphone CCLayer中的两种触摸(touch)处理方式

Cocos2d 提供了两种touch处理方式,StandardTouch Delegate和 TargetedTouch Delegate方式          在CCLayer子类中要能接收tou...

cocos2D(六)----CCLayer

一个游戏中可以有很多个场景,每个场景里面又可能包含有多个图层,这里的图层一般就是CCLayer对象。CCLayer本身几乎没什么功能,对比CCNode,CCLayer可用于接收触摸和加速计输入。其实,...
  • Dev_Ho
  • Dev_Ho
  • 2014-11-05 16:34
  • 1385
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)