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

转载 2012年03月21日 17:33:48

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

   以下内容转载自:http://blog.sina.com.cn/s/blog_623ed7840100yhw9.html ,对原作者表示感谢。

   

简介

Cocos2d中,CCLayer类被设计用来获取触摸信息,该类实现了两个协议:CCStandardTouchDelegate和CCTargetedTouchDelegate,我们可以使用这两者中的任何一个来获取触摸事件。

开启触摸

CCLayer默认是不捕获触摸事件的,要使得其能够捕获到相应的触摸实践,我们需要将 isTouchEnabled 属性设置成 YES:

self.isTouchEnabled = YES;

CCStandardTouchDelegate

当设置好属性后,就可以使用很多方法来捕获触摸事件。CCLayer默认使用的CCStandardTouchDelegate,该协议的方法有:

-(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
-(void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
-(void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
-(void)ccTouchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;

我们可以看到,该协议中的方法于CocoaTouch的用法类似,在这里就不多说了。

CCTargetedTouchDelegate

除了CCStandardTouchDelegate,也可以使用CCTargetedTouchDelegate来捕获触摸。该协议定义如下:

@protocol CCTargetedTouchDelegate
-(BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event;
@optional 
-(void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event;
-(void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event;
-(void)ccTouchCancelled:(UITouch *)touch withEvent:(UIEvent *)event;
@end

使用CCTargetedTouchDelegate有两点优点:

  1. 你不需要处理NSSets,事件的发送者已经将NSSets分割,确保在每次调用时有且只有一个UITouch对象。
  2. 如果在ccTouchBegin中返回True,就可以对当前的UITouch对象具有所有权,这样就可以在后续的move/ended/cancelled方法中确认时当前的触摸,这样就可以在多点触摸中减少工作量。

于通常直接在代码中添加要响应的方法外,还需要多一步操作。CCLayer的定义中有一个函数:(以下是standard的方法)

-(void) registerWithTouchDispatcher { [[CCTouchDispatcher sharedDispatcher] addStandardDelegate:self priority:0]; }

该函数的作用就是指定需要使用哪种协议来处理触摸事件,上述的代码就是指定使用CCStandardTouchDelegate。为了不使用默认的协议,需要在CCLayer中重写该函数:(以下是target方法)

-(void) registerWithTouchDispatcher { [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:INT_MIN+1 swallowsTouches:YES]; }

经过修改后,就可以使用CCTargetedTouchDelegate来处理触摸事件了。

target方法中,有三个参数,其中第二个参数很重要,指的是优先级,比如你有两个Layer都设置了相应触摸事件,那么优先级高的,会先响应触摸事件。(数值越低表示优先级越高)

cocos2d-触摸分发原理-----------------cococs2d-x 3.0正式版本(7.18)

触摸是iOS程序的精髓所在,良好的触摸体验能让iOS程序得到非常好的效果,例如Clear。 鉴于同学们只会用cocos2d的 CCTouchDispatcher 的 api 但并不知道工作原理,但了...
  • tang_bo_hu_2011
  • tang_bo_hu_2011
  • 2014年07月20日 08:00
  • 499

cocos2d-x触摸事件优先级

 CCTouchDispatcher是管理cocos2d-x中所有Touch事件派发的类, CCTouchDispatcher中包含了两个CCTouchHandler的列表, 分别存...
  • zhanghefu
  • zhanghefu
  • 2014年04月20日 21:19
  • 9590

cocos2d-x添加触摸层阻止后端事件

由于cocos2d-x中的优先级小的,先响应触摸事件,这是,我们只需要设置新添加的cclayer层的优先级即可,但由于ccmenu的优先级较高,所以,很有可能透过我们添加的触摸层,响应之前的绑定的bu...
  • somestill
  • somestill
  • 2013年10月15日 17:31
  • 15138

Cocos2d-x实例:单点触摸事件

为了让大家掌握Cocos2d-x中的事件机制,下面我们以触摸事件为例,使用事件触发器实现单点触摸事件。该实例如图8-3所示,场景中有三个方块精灵,显示顺序如图8-3所示,拖拽它们可以移动它们,事件响应...
  • tonny_guan
  • tonny_guan
  • 2014年07月24日 20:37
  • 9149

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

cocos2d ccLayer响应触摸事件方法:CCStandardTouchDelegate 与 CCTargetedTouchDelegate    以下内容转载自:http://blo...
  • volcan1987
  • volcan1987
  • 2012年07月31日 23:30
  • 974

Cocos2d-x之Touch事件处理机制 提供两种触摸事件处理机制:CCStandardTouchDelegate和CCTargetedTouchDelegate。

一、两种机制的四种不同的事件 CCStandardTouchDelegate 默认事件 virtual void ccTouchesBegan(CCSet *pTo...
  • merryken
  • merryken
  • 2014年01月13日 17:45
  • 556

cocos2d-x 详解之 CCLayer(触摸事件)

点击打开链接 http://blog.csdn.net/ganpengjin1/article/details/18403411
  • gl5773477
  • gl5773477
  • 2014年03月26日 10:53
  • 1100

Cocos2d-js 触摸事件的简单封装

基于cocos2d-js 3.6.1的触摸事件简单封装
  • PT_xxj
  • PT_xxj
  • 2017年04月14日 17:31
  • 295

cocos2d开发之触摸事件

CCLayer类是用来接收触摸输入的。不过你要首先启用这个功能才可以使用它。你通过设置isTouchEnabled为YES来让层接收触摸事件: self.isTouchEnabled = YES...
  • xiangzilv1987
  • xiangzilv1987
  • 2012年06月26日 21:15
  • 1887

cocos2d 触摸事件的传递

原文:http://labs.ywlx.net/?p=2410 cocos2d中触摸事件的传递不同与android 不是那一层在前,就先传递到那一层。而是通过优先级来传递,优先级的值越低,就越先接...
  • kaciya
  • kaciya
  • 2012年12月10日 18:59
  • 381
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:cocos2d ccLayer响应触摸事件方法:CCStandardTouchDelegate 与 CCTargetedTouchDelegate
举报原因:
原因补充:

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