`

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

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

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

        CCMenu对像的默认的优先级是-128(即最高响应级别),CClayer的默认响应级别是0,所以同时存在的情况下CCMenu总是先响应触摸事件,并阻止层接收触摸事件,杯具的是新增一个面板层覆盖在CCMenu按钮上方依然会被下面的按钮接收到触摸事件。

    解决
        基于cocos2d的事件响应规律我们知道新增的层要接收到触摸事件并阻止冒泡必须有大于CCMenu的优先级,或等于CCMenu的优先级但后入栈,即在每次层打开时重设为最高优先级。
        代码如下:
[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:kCCMenuMousePriority 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-x事件类

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

    cocos2d事件响应总结

    ### cocos2d事件响应总结 #### 一、概述 本文主要对cocos2d中的事件响应机制进行总结,包括sprite(精灵)、layer(图层)等元素如何响应事件的原理及实践中可能遇到的问题。 #### 二、iOS触摸事件基础 在iOS中...

    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中...

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

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

    Cocos2d-JS游戏开发

    同时,Cocos2d-JS的事件系统使得响应用户输入和游戏事件变得简单,如触摸事件、键盘事件等,这对于游戏的交互设计至关重要。 在Cocos2d-JS中,动画是游戏生动性的关键。通过序列帧动画(SpriteSheet)和动作组合,...

    Cocos2d-x实战 JS卷

    5. **事件处理**:掌握事件监听和响应机制,包括触摸事件、键盘事件以及自定义事件的处理,实现用户交互。 6. **游戏逻辑**:学习如何组织游戏逻辑,包括状态管理、游戏循环、时间管理和AI设计。 7. **资源管理**...

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

    《Cocos2d-x实战 JS卷 Cocos2d-JS开发》是一本深入探讨Cocos2d-x游戏引擎JavaScript版本使用的专业书籍。Cocos2d-x是全球范围内广泛采用的游戏开发框架,尤其适用于2D游戏的制作,而Cocos2d-JS则是其JavaScript接口...

    经典版本 方便下载 源码 旧版本 3.8 官网找不到了 cocos2d-x-3.8.zip

    cocos2d-x 是一个跨平台的游戏开发框架,它基于C++,同时提供了Lua和JavaScript的绑定,让开发者可以方便地在多种操作系统上创建2D游戏、演示程序和其他图形交互应用。这个“cocos2d-x-3.8.zip”压缩包包含的是cocos...

    Cocos2d-x实战:C++卷(2版)源代码

    5. **事件处理**:Cocos2d-x提供了事件处理机制,包括触摸事件、键盘事件、网络事件等,使得游戏能够响应用户的输入。 6. **声音与音乐**:Cocos2d-x支持音频播放,包括背景音乐和音效,可以实现音效的同步和控制。...

    cocos2d-x 3.0

    本篇文章将深入探讨cocos2d-x 3.0中实现人物行走的关键技术和步骤,以及如何结合提供的代码和图片资源进行实践。 一、cocos2d-x 3.0简介 cocos2d-x 3.0是cocos2d-x系列的一个重要升级,它基于C++编写,支持跨平台...

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

    《Cocos2d-x 3.x游戏开发实战》是一本深度探讨Cocos2d-x 3.x框架的游戏开发书籍,适合对游戏编程有兴趣的开发者学习。Cocos2d-x 是一个开源的、跨平台的2D游戏开发框架,广泛应用于iOS、Android、Windows等多平台的...

    cocos2d-android jar包全套.zip

    同时,别忘了Cocos2d支持事件处理,如触摸事件和键盘事件,这使得游戏的用户交互变得更加灵活。 总之,"cocos2d-android jar包全套.zip"提供的是一整套Cocos2d-x在Android平台上的开发环境,包含了游戏开发所需的...

    cocos2d学习资源汇总

    * cocos2d-x的FAQ:提供了详细的cocos2d-x常见问题和解决方案。 cocos2d-x是一个功能强大且广泛应用于游戏开发的游戏引擎,通过学习和实践,开发者可以快速掌握cocos2d-x的使用和开发技能,从而快速开发出高质量的...

    Cocos2D-X开发学习笔记-触屏事件使用示例

    Cocos2D-X是一款强大的跨平台2D游戏开发框架,被广泛应用于iOS、Android...通过合理的事件监听和响应,可以创建出丰富、互动性强的游戏体验。不断实践和研究,你将能灵活运用这些知识,创造出更多精彩的Cocos2D-X游戏。

    Cocos2d-x实战C++卷关东升著完整版pdf

    接着,书中会讲解Cocos2d-x的事件处理机制,包括触摸事件、键盘事件等,这些都是游戏交互必不可少的部分。同时,还会涉及动画和物理引擎的使用,如动作(Action)、序列(Sequence)、组(Group)以及Box2D物理引擎...

    cocos2d-x_v3.16安装及环境变量配置文档

    cocos2d-x 是一个开源的游戏开发框架,使用 C++ 语言编写,支持多平台发布,包括 iOS、Android、Windows、macOS、Linux 和 Web。cocos2d-x v3.16 是该框架的一个版本号,本文档主要介绍了该版本的安装流程以及环境...

    cocos2d-android.jar.zip_CoCos2d_android jar_android game_cocos2d

    cocos2d-android游戏引擎是著名游戏引擎cocos2d游戏引擎的Android版。cocos2d-android游戏引擎性能优越、易学、可以进行纯java编程、具有极高的研 究价值、大大的降低了开发者的学习成本。您只需要一台普通配置的...

    cocos2d-x windows vs2010配置

    接下来,把 F:\cocos2d-1.0.1-x-0.9.1\cocos2dx 和 F:\cocos2d-1.0.1-x-0.9.1\CocosDenshion 这两个文件夹里面的全部内容拷贝一份到 D:\cocos2d-xProjects\HelloWorld 中去。 九、设置静态链接库 接下来,打开 F:\...

    cocos2d-x-3.13.1 spine3.6.zip

    Cocos2d-x是一个广泛使用的开源游戏开发框架,它基于C++,同时支持Lua和JavaScript等多种脚本语言,为开发者提供了高效、跨平台的游戏开发解决方案。在3.13.1版本中,Cocos2d-x对Spine动画引擎的集成进行了更新,这...

    cocos2d游戏引擎

    10. **社区支持和扩展**:cocos2d拥有活跃的开发者社区,提供了大量的插件、教程和示例,方便开发者学习和解决问题。 总的来说,cocos2d游戏引擎是一个强大且全面的开发工具,无论是对于初学者还是经验丰富的开发者...

Global site tag (gtag.js) - Google Analytics