`
fireDragonpzy
  • 浏览: 442252 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

cocos2d(x)事件触发 (一)Touch事件总结:CCStandradTouch,CCTargetedTouch

阅读更多
在使用Touch事件时遇到过很多问题,这里总结一下。
   
    首先,IOS为我们提供了以下的方法来得到并传递用户的输入:
  (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {}
  (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {}
     (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {}
     (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {}
触摸信息可以直接从touches参数中获取
    NSMutableSet *mutableTouches = [touches mutableCopy];
也可使用event参数来获取
    NSSet *allTouches = [event allTouches];

    Cocos2d用CCTouchDispatcher类分发从IOS获取的触摸事件。它有两种分发方式一种是CCStandardTouchDelegate,一种是CCTargetedTouchDelegate。前者将所有的Touch信息直接传递给实现该协议的对象,而后者则要求实现该代理的类一次只能处理一个事件,并且吃掉该事件,不再传播。
     所以CCTargetedTouchDelegate这个协议针对单点触控,而CCStandardTouchDelegate则可以处理当前屏幕触摸的每个触摸点,好像最多是十个吧。CCLayer默认情况下如果设定接受Touch事件,是使用标准协议。
    我们可以看到,在注册协议的时候分别对应这样的方式:
-(void) addStandardDelegate:(id<CCStandardTouchDelegate>) delegate priority:(int)priority;
 
-(void) addTargetedDelegate:(id<CCTargetedTouchDelegate>) delegate priority:(int)priority swallowsTouches:(BOOL)swallowsTouches;
      他们的区别在swallowsTouches参数,它表示是否吃掉该事件,而且只在目标协议里有意义。我们来分析各个协议的工作机理:
      Standard这套协议,他会按照优先级给每个层排序。然后把touch按照顺序分别传进去,也就是说从上到下的所有层 只要开启了self.istouchenabled = YES 那么他们都会收到touch,而且不可以吃掉该事件。测试显示即使上面一层相应了该事件,它仍然会传递到下一层。
      targeted这套协议只支持单点触控,即使是多点触控也当单点触控来用,但是返回的UITouch 就不知道是哪个了。他的好处是有swallow选项,即可判断是否继续传递 touch,而且,他的cctouchbegan函数是个bool值,如果你不返回一个yes的话,后面的 move 和 ended 都不会执行,如果要使用该协议,要在layer中手动设定代理:addStandardDelegate。因为CCLayer内部只注册标准代理。
      我们的问题就来了,Standard协议无法吃掉事件,也许多个层都会相应的时候会出问题,而研究target协议实现的源码,也可以发现其实吃掉一个事件很简单,只要在Touch的集合中执行removeObject方法即可。
     CCMenu继承了CCLayer,但是它注册的是targeted协议,所以我们很少发现CCMenu的混乱,因为它会将touch吃掉。


摘自:http://blog.sina.com.cn/s/blog_7a2ffd5c0100v33y.html
分享到:
评论

相关推荐

    cocos2d-x事件类

    谨记,该事件只能用于cocos2d-x中。 事件发送者需要继承EventDispatcher类 事件接收者需要继承EventHandle类,还需要实现handleEvent方法 事件发送者和事件接收者要在构造函数和析构函数中调用一下方法 事件发送者...

    Cocos2d-x实战:JS卷——Cocos2d-JS开发

    资源名称:Cocos2d-x实战:JS卷——Cocos2d-JS开发内容简介:本书是介绍Cocos2d-x游戏编程和开发技术书籍,介绍了使用Cocos2d-JS中核心类、瓦片地图、物理引擎、音乐音效、数据持久化、网络通信、性能优化、多平台...

    cocos2d-x json字符串与cocos2d::Value转换工具

    该资源主要用于cocos2d-x中Value与json字符串的相互转换,提供从json文件读取为cocos2d::Value,cocos2d::Value写入到文件,cocos2d::Value转换为json字符串,json字符串转换为cocos2d::Value。json字符串转换成cocos...

    Cocos2d-x高级开发教程

    Cocos2d-x是移动跨平台开发最流行的游戏引擎,而本书是一本很全面的、比较‘接地气’的游戏开发教程。书中汇聚了热门手机游戏《捕鱼达人》开发的实战经验,作者从最基础的内容开始,逐步深入地介绍了Cocos2d-x的相关...

    cocos2d-x-2.1.5

    cocos2d-x-2.1.5

    Cocos2D-X游戏开发技术精解

    资源名称:Cocos2D-X游戏开发技术精解内容简介:Cocos2D-X是一款支持多平台的 2D手机游戏引擎,支持iOS、Android、BlackBerry等众多平台。当前,很多移动平台流行的游戏,都是基于Cocos2D-X开发的。 《Cocos2D-X...

    cocos2d-x 3.0

    cocos2d-x 3.0 人物行走 . 包里有代码和 图片资源.

    大富翁手机游戏开发实战基于Cocos2d-x3.2引擎

    资源名称:大富翁手机游戏开发实战基于Cocos2d-x3.2引擎内容简介:李德国编著的《大富翁手机游戏开发实战(基于 Cocos2d-x3.2引擎)》使用Cocos2d-x游戏引擎技术,带领读者一步一步从零开始进行大富翁移动游戏的开发...

    cocos2d-x实战项目

    cocos2d-x实战项目 01.cocos2d-x原理及环境配置.rar 03.cocostudio使用方法及UI控制.rar 04.XML文件读取与骨骼动画.rarcocos2d-x实战项目 01.cocos2d-x原理及环境配置.rar 03.cocostudio使用方法及UI控制.rar 04.XML...

    cocos2d-x TouchDemo

    cocos2d-x中两种定义触屏事件的方法和总结

    Cocos2d-x实战 JS卷

    Cocos2d-x实战

    cocos2d-x-3.2旧版引擎下载

    cocos2d-x-3.2下载,不多说。或者可以下载另一个资源 cocos引擎老版本集合(cocos2d-x-2.2.1 - 3.5) http://download.csdn.net/download/crazymagicdc/9982656

    Cocos2d-x高级开发教程制作自己的《捕鱼达人》

    Cocos2d-x高级开发教程:制作自己的《捕鱼达人》 图书简介: 《Cocos2d-x高级开发教程:制作自己的《捕鱼达人》》是国内第一本全面深入讲解Cocos2d-x进阶内容的图书,Cocos2d-x创始人王哲作序推荐,《捕鱼达人》开发...

    Cocos2d-x 3.x游戏开发实战pdf含目录

    Cocos2d-x 3.x游戏开发实战pdf含目录,内容详细,强烈推荐给大家。

    cocos2d-x游戏代码

    cocos2d-x游戏代码

    cocos2d-touch事件

    cocos2d touch 事件 添加cclayer层

    cocos2d-x游戏实例-纵版射击游戏(cocos2d-x 2.0.4)

    本人提交源码进行了版本移植并修改了一个bug,目前使用VS2008+cocos2d-x,2.0.4版本编译测试过(需要注意的是,我的IDE环境中是将COCOS2d-x的头文件和库文件设置到了VS环境中对所有项目生效,并没有单独对特定的COCOS...

    Cocos2D-X游戏开发技术精解.pdf

    《Cocos2D-X游戏开发技术精解》详细介绍如何使用Cocos2D-X引擎开发自己的移动平台游戏。全书共15章,主要内容包括:Cocos2D-X引擎简介;如何建立跨平台的开发环境;引擎的核心模块——渲染框架;如何实现动态画面和...

    教你用Cocos2D-X开发跨平台移动应用

    Cocos2d-x源于Cocos2d,是一款开源游戏引擎项目,是一款基于对原有iOS平台cocos2d重写为C++的开源代码,封装了OpenGL,Box2d,LibCurl,LibPng等开源的跨平台代码。由于基于C++和STL特点使其广泛应用于游戏开发、移动...

    Cocos2d x手机游戏开发与项目实战详解.part3

     第四章主要介绍Cocos2d-x的环境搭建和HelloWorld的项目实现,通过本章读者可以快速上手开发一个最简单的移动游戏UI,并通过该案例以了解Cocos2d-x的运行原理。  第五章主要介绍Cocos2d-x核心技术,这里包括Cocos...

Global site tag (gtag.js) - Google Analytics