事件响应的优先级、stopProgapation禁止下层组件响应

cocos2d-js没有完整的鼠标事件处理,这点比js/flash的要差一些,不过凑合着也可以用了。

一般界面编程,可以用显示列表的Node作为监听器的优先级,在上方的会比下方的高优先级。

而cocos2d-js没有stopImmediatePropagation,只有stopProgapation,一旦某个监听器中执行了stopProgapation,后续的监听器都不会被执行。这里并没有js/flash的冒泡概念。

如果在上层Node中stopProgapation,那么效果就有点像设置了swallowTouches:true,但会更灵活

例子:

界面上添加2个sprite,child1在下,child2在上。

如下的代码,child2的监听器优先级高,会首先执行,其中func2会先输出,因为按顺序执行,但由于stopProgapation,所以child1的监听器不会被执行。

        if("touches" in cc.sys.capabilities){
            cc.eventManager.addListener({event: cc.EventListener.TOUCH_ONE_BY_ONE, onTouchBegan: function(){
                trace("func1");
                return true;
            }}, this.child1);
            cc.eventManager.addListener({event: cc.EventListener.TOUCH_ONE_BY_ONE, onTouchBegan: function(touch,event){
                trace("func2");     //按顺序执行,先func2,再func3
                return true;
            }}, this.child2);
            cc.eventManager.addListener({event: cc.EventListener.TOUCH_ONE_BY_ONE, onTouchBegan: function(touch,event){
                trace("func3");
                event.stopPropagation();
                return true;
            }}, this.child2);
        }else{
            cc.eventManager.addListener({event: cc.EventListener.MOUSE, onMouseDown: function(){
                trace("func1");
            }}, this.child1);
            cc.eventManager.addListener({event: cc.EventListener.MOUSE, onMouseDown: function(event){
                trace("func2");     //按顺序执行,先func2,再func3
            }}, this.child2);
            cc.eventManager.addListener({event: cc.EventListener.MOUSE, onMouseDown: function(event){
                trace("func3");
                event.stopPropagation();
            }}, this.child2);
        }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏皮皮之路

【JVM】浅谈双亲委派和破坏双亲委派

笔者曾经阅读过周志明的《深入理解Java虚拟机》这本书,阅读完后自以为对jvm有了一定的了解,然而当真正碰到问题的时候,才发现自己读的有多粗糙,也体会到只有实践...

752
来自专栏你不就像风一样

Hibernate各种基本注解及一对一(多)关系映射采坑笔记

org.springframework.dao.InvalidDataAccessApiUsageException: detached entity pass...

663
来自专栏cmazxiaoma的架构师之路

SpringBoot之路(二)之Web进阶

1884
来自专栏ACM小冰成长之路

51Nod-1203-JZPLCM

ACM模版 描述 ? 题解 这个题的解法好像好多好多,可以线段树解,自然也可以用树状数组解,还有大佬直接莫队推过,我这里用的树状数组搞得。 首先将数进行拆解,拆...

17010
来自专栏Java成神之路

阿里大于短信服务_总结_01_短信验证码接入

964
来自专栏芋道源码1024

Spring Webflux —— 源码阅读之 handler 包

查找给定请求的handler,如果找不到特定的请求,则返回一个空的Mono。这个方法被getHandler(org.springframework.web.se...

1035
来自专栏专注 Java 基础分享

Hibernate框架学习之注解配置关系映射

     上篇文章我们通过注解对映射了单个实体类,但是具体项目中往往实体类之间又是相互关联的,本篇文章就是从实体类之间存在的不同关联角度,具体学习下如何映射他们...

2009
来自专栏菩提树下的杨过

mongodb-java-driver基本用法

1、先下载mongodb-java-driver 目前最新版本是2.9.3 2、下面是基本的CRUD示例代码: 1 package com.cnblogs....

1918
来自专栏Java编程技术

ClassLoader解惑

一个Java程序要想运行起来,首先需要经过编译生成 .class文件,然后创建一个运行环境(jvm)来加载字节码文件到内存运行,而.class 文件是怎样被加载...

731
来自专栏为数不多的Android技巧

Android插件化原理解析——Hook机制之动态代理

使用代理机制进行API Hook进而达到方法增强是框架的常用手段,比如J2EE框架Spring通过动态代理优雅地实现了AOP编程,极大地提升了Web开发效率;同...

772

扫码关注云+社区