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

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都设置了相应触摸事件,那么优先级高的,会先响应触摸事件。(数值越低表示优先级越高)

分享到: 

时间: 2024-10-23 07:58:51

cocos2d ccLayer响应触摸事件方法:CCStandardTouchDelegate 与 CCTargetedTouchDelegate的相关文章

android 如何实现点击事件和触摸事件分开执行

问题描述 android 如何实现点击事件和触摸事件分开执行 我得手机分为两部分:整个屏幕的上部分是SurfaceView视频,下部分为按钮部分.现在需求是这样: 按钮部分屏蔽触摸事件,只能响应电击事件:视频部分不做限制.现在的问题是这样:按钮部分现在也响应触摸事件,怎么屏蔽掉触摸事件呢(我想让下半部分整体屏蔽掉触摸事件). 请教大神怎么做呀? public boolean onTouchEvent(MotionEvent event) { if (mIsLocked) { // locked,

RelativeLayout 中两个上下view的触摸事件分发(不是子view和父view的关系)

问题描述 RelativeLayout 中两个上下view的触摸事件分发(不是子view和父view的关系) 有个RelativeLayout布局 ``` xmlns:weather="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@

iOS开发中使用cocos2d添加触摸事件的方法_IOS

CCLayer类是用来接收触摸输入的.不过你要首先启用这个功能才可以使用它.你通过设置isTouchEnabled为YES来让层接收触摸事件: 复制代码 代码如下: self.isTouchEnabled = YES; 此项设定最好在init方法中设置.你可以在任何时间将其设置为NO或者YES. 一旦启用isTouchEnabled属性,许多与接收触摸输入相关的方法将会开始被调用.这些事件包括:当新的触摸开始的时候,当手指在触摸屏上移动的时候,还有在用户手指离开屏幕以后.很少会发生触摸事件被取消

FLASH中响应键盘事件的四种方法

响应 响应键盘的方法作为AS中的一个重要组成部分,在如今已经越来越广泛的使用,尤其是在 FLASH游戏制作中,如果缺少了响应键盘的方法,那是不可能的,而响应键盘的方法主要的四种,分别是: 1.利用按钮进行检测 2.利用KEY对象 3.利用键盘侦听的方法 4.利用影片剪辑的keyUp和keyDown事件来实现响应键盘 只有熟练掌握了这些方法,然后加以变通的话,就会得到很多意想不到的效果,下面我就结合理论和自己的想法简要的介绍一下. 第一种响应键盘的方法:利用按钮进行检测来实现响应键盘 在按钮的on

FLASH中响应键盘事件的方法

响应键盘的方法作为AS中的一个重要组成部分,在如今已经越来越广泛的使用,尤其是在 FLASH游戏制作中,如果缺少了响应键盘的方法,那是不可能的,而响应键盘的方法主要的四种,分别是: 1.利用按钮进行检测 2.利用KEY对象 3.利用键盘侦听的方法 4.利用影片剪辑的keyUp和keyDown事件来实现响应键盘 只有熟练掌握了这些方法,然后加以变通的话,就会得到很多意想不到的效果,下面我就结合理论和自己的想法简要的介绍一下. 第一种响应键盘的方法:利用按钮进行检测来实现响应键盘 在按钮的on事件处

举例讲解iOS应用开发中hitTest触摸事件的编写方法_IOS

 hitTest:withEvet  调用过程 比如如果是当前的View A, 还有一个viewB 如果不重写 hitTest 方法,那么 系统默认是先调用viewA的hitest 方法,然后再调用viewB的htest方法. 系统的调用过程,跟下面的重写hitest的方法是一模一样的. 复制代码 代码如下: -(UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event  {      if ([self pointInside:poin

详解jQuery向动态生成的内容添加事件响应jQuery live()方法_jquery

jQuery live()方法是给所有匹配的元素附加一个事件处理函数,即使这个元素是以后通过append,prepend,after等事件生成后的内容也依然有效. 这个方法可以看做是 .bind() 方法的一个变体.使用 .bind() 时,选择器匹配的元素会附加一个事件处理函数,而以后再添加的元素则不会有.为此需要再使用一次 .bind() 才行.比如说: <body> <div class="clickme">Click here</div> &

Cocos2d-x触摸事件实例_C 语言

在玩手机游戏的时候,屏幕接收我们的触摸消息是必不可少的,根据我们的触摸事件,去实现相应的功能,这里我们就来学习一下cocos2d-x中的触摸是怎么实现的.触摸分为单点触摸和多点触摸,先来看单点触摸,就是接收一个点的触摸.代码将实现过程清楚的写了下来,仔细分析代码吧. bool HelloWorld::init() { bool bRet = false; do { CC_BREAK_IF(! CCLayer::init()); //开启触摸 this->setTouchEnabled(true)

为jQuery添加Webkit的触摸的方法分享

 这段代码是我在做13年一份兼职的时候无聊加上去的,为jQuery添加触摸事件的支持.因为做得有点无聊,所以就帮客户添加了用响应式网页+JS touch兼容了移动设备,主要是Webkit的移动设备 这段代码是我在做13年一份兼职的时候无聊加上去的,为jQuery添加触摸事件的支持.因为做得有点无聊,所以就帮客户添加了用响应式网页+JS touch兼容了移动设备,主要是Webkit的移动设备.   这里就分享下我的实现. 先贴上代码:    代码如下: //Published by Indream