`

COCOS2D2.0 事件冒泡规律 和 CCMenu一直响应事件的解决办法

 
阅读更多

cocos2d把响应事件的对像放入一个栈中,用先进后出的规率来响应事件。可以设置响应的优先级 -128 - 128,最上层的优先级是-128(即值越小越先响应事件)。 

    响应的规则: 
        不同优先级先按优先级响应(即无视入栈顺序,先按优先级响应) 
        同一优先级响应的顺序是先进后出。 
        同一对像不能多次入栈,必须先从栈中移除才能再次加入。(也可能是最高响应等级的不能多次入栈) 
        如果当前对像有优先响应顺序但没有响应事件,则会分发到后面的对像。 
    问题 

        CCMenu对像的默认的优先级是-128(即最高响应级别),CClayer的默认响应级别是0,所以同时存在的情况下CCMenu总是先响应触摸事件,并阻止层接收触摸事件,杯具的是新增一个面板层覆盖在CCMenu按钮上方依然会被下面的按钮接收到触摸事件。 
    解决 
        基于cocos2d的事件响应规律我们知道新增的层要接收到触摸事件并阻止冒泡必须有大于CCMenu的优先级,或等于CCMenu的优先级但后入栈,即在每次层打开时重设为最高优先级。 

 

[[CCDirector shareDirector] addTargetedDelegate:self priority:kCCMenuHandlerPriority-1 swallowsTouches:YES];  
//当前层最先接收事件并阴止冒泡 

 这里只是设置了优先级,还必须要响应事件才能阻止分发。如下代码,响应但不做操作即可 

 

-(BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event  
 {  
        NSLog(@"scoreListPanel:cctouchBegan");  
        return YES;  
}  

 

另外需注意的事件 
            如果新增的层或其它对像中包含有CCMenu对像,因为该层被设为了最高优先级且阻止冒泡,该层上的CCMENU也不能响应事件了。这时只需要再将CCMenu对像用最高优先级重新入栈一次即可 

 

[[CCTouchDispatcher sharedDispatcher] removeDelegate:sysMn];  
  
[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:sysMn priority:kCCMenuMousePriority swallowsTouches:YES];  
分享到:
评论

相关推荐

    模拟真实水-程序实现cocos2d 2.0以上

    在Cocos2D 2.0以上的版本中,引入了更强大的动画和渲染功能,例如OpenGL ES 2.0的支持,这使得我们可以利用着色器(Shader)来实现更复杂的光照和反射效果。着色器语言GLSL可以编写自定义的像素和顶点处理逻辑,以...

    cocos2d 2.0与UIKit结合的例子

    结合Cocos2d 2.0与UIKit,我们可以创建一个混合应用,其中一部分使用Cocos2d进行游戏逻辑和图形渲染,另一部分使用UIKit实现原生的导航、表格视图或按钮等。这通常通过在Cocos2d的CCScene或CCLayer中添加UIView子...

    cocos2d 2.0配置TouchXML

    【Cocos2d 2.0 配置TouchXML】是一个关键的话题,涉及到移动游戏开发中的XML处理。Cocos2d 是一个广泛使用的2D游戏引擎,尤其在iOS平台上非常流行。而TouchXML则是一个Objective-C库,为iOS开发者提供了一个轻量级且...

    cocos2d-2.0-x-2.0.2.zip.002

    cocos2d-2.0-x-2.0.2.zip.002第二部分,总共三部分,都是免费的

    基于cocos2d-2.0-x-2.0.3的游戏实例魔塔(win版)

    《基于cocos2d-2.0-x-2.0.3的游戏实例——魔塔(win版)详解》 在游戏开发的世界里,cocos2d-x是一个广受欢迎的开源跨平台2D游戏引擎,它基于C++,并提供了Python和Lua等语言的绑定,使得开发者能够快速构建游戏。...

    cocos2d-x事件类

    在使用cocos2d-x开发游戏的过程中,为了实现逻辑和显示相分离。 在下通宵了一个晚上,写出了该事件类。 谨记,该事件只能用于cocos2d-x中。 事件发送者需要继承EventDispatcher类 事件接收者需要继承EventHandle类...

    cocos2d-x2.0

    同时,为了满足不同开发者的需求,cocos2d-x2.0还支持Lua和JavaScript,提供了易于学习和使用的脚本语言接口。这使得开发过程更为灵活,无论是经验丰富的C++程序员还是对脚本语言熟悉的开发者,都能快速上手。 2. *...

    cocos2d-iphone-2.0.tar.gz

    "cocos2d-iphone-2.0.tar.gz" 是一个压缩包,包含了Cocos2d-iPhone 2.0版本的所有源代码和相关资源。 Cocos2d-iPhone 2.0是该框架的一个重要版本,引入了许多新特性和改进,旨在提高性能和开发效率。以下是关于这个...

    cocos2d-2.0-x-2.0.2.zip.003

    cocos2d-2.0-x-2.0.2.zip.003第三部分,总共三部分

    cocos2d-x2.0 射击游戏实现 沈大海cocos2d-x教程实例

    《cocos2d-x2.0射击游戏实现详解——沈大海cocos2d-x教程实例》 在游戏开发领域,cocos2d-x是一个广泛使用的2D游戏开发框架,尤其适用于跨平台的游戏开发。本教程将深入探讨如何利用cocos2d-x2.0版本实现一款简单的...

    cocos2d-2.0-x-2.0.2.zip.001

    cocos2d-2.0-x-2.0.2.zip.001 第一部分总共三部分

    cocos2d-x-2.0中CCScrollView的使用Demo

    在Cocos2d-x 2.0版本中,引入了CCScrollView组件,它为开发者提供了一个灵活、高效的滚动视图解决方案,使得在游戏或应用中实现类似iOS的UIScrollView效果成为可能。本Demo将详细讲解如何在Cocos2d-x 2.0中使用...

    cocos2d iphone 2.0

    总的来说,Cocos2d-iPhone 2.0是一个全方位的游戏开发工具,它提供了一整套解决方案,从基本的图形绘制到复杂的物理模拟,再到高效的性能优化,都能让开发者专注于创造精彩的游戏内容,而非底层技术细节。通过学习和...

    CocosBuilder 2.0 examples

    CocosBuilder 2.0 是一个强大的开源工具,主要用于创建Cocos2d-x游戏和应用程序的用户界面。这个工具提供了一种直观的图形界面,使得开发者可以方便地设计、布局和组织游戏场景,而无需深入编写大量的代码。Cocos...

    android cocos2d-2.0-x-2.0.4 jar包

    开发cocos2d-20.0-x-2.0.4用的jar包,这个是最新的。懒人必备!!

    Cocos2d-x教程视频CocosStudio 2.0 容器控件

    Cocos2d-x教程视频CocosStudio 2.0 容器控件提取方式是百度网盘分享地址

    Cocos2d-x教程视频CocosStudio 2.0 文件格式解析

    Cocos2d-x教程视频CocosStudio 2.0 文件格式解析提取方式是百度网盘分享地址

    cocos2d-x -2.0-rc2-x-2.0.1

    《cocos2d-x -2.0-rc2-x-2.0.1:跨平台手机游戏开发的强大引擎》 cocos2d-x是一个广泛使用的开源游戏开发框架,专为构建2D游戏、演示和其它图形交互应用而设计。这个框架的版本"2.0-rc2-x-2.0.1"是其发展过程中的一...

    cocos2d-x 2.0 绘制圆角矩形

    分享个cocos2d-x 2.0.x后绘制圆角矩形的方法,值得一看!

    cocos2d-x-cocos2d-x-2.2.2.zip

    这个压缩包“cocos2d-x-cocos2d-x-2.2.2.zip”包含了cocos2d-x 的2.2.2版本,该版本是cocos2d-x发展中的一个重要里程碑,它提供了许多改进和优化,使得开发者能够更加高效地创建2D游戏和应用。 在cocos2d-x 2.2.2中...

Global site tag (gtag.js) - Google Analytics