专栏首页拂晓风起事件响应的优先级、stopProgapation禁止下层组件响应

事件响应的优先级、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 条评论
登录 后参与评论

相关文章

  • JS获取事件对象,获取事件的源对象(Firefox,IE)

    用户1258909
  • java web部署 启动线程 (监听socket等)

    用户1258909
  • cocos2d-js 自定义事件监听派发

    用户1258909
  • MyFlash——美团点评的开源MySQL闪回工具

    由于运维、DBA的误操作或是业务bug,我们在操作中时不时会出现误删除数据情况。早期要想恢复数据,只能让业务人员根据线上操作日志,构造误删除的数据,或者DBA使...

    美团技术团队
  • 第7章、备份与恢复

    默认情况下mysqldump导出的是标准的SQL语法,因此你可以使用标准输出写入文件。

    幺鹿
  • 【行业】注意!腾讯在Google的AI平台TensorFlow中发现了主要的漏洞

    Google被认为是推动全球AI革命的领导者,但它给开发人员提供的工具可能并不像许多人想象的那么安全。中国社交游戏巨头腾讯的一个安全团队最近声称,它在Googl...

    AiTechYun
  • 基于Go的语义解析开源库FMR,“屠榜”模型外的NLP利器

    在 2013 年分布式词向量表示(Distributed Representation)出现之前,one-hot 是最常用的字词数值表示形式。在这样的词袋模型下...

    AI科技大本营
  • cmake:gperftools性能分析工具find libprofiler 脚本暨profiler的静态连接问题

    gperftools是一个很好用的性能分析工具,但没有提供官方的用于查找profiler库的cmake脚本,所以在基于cmake管理的项目中如果要在系统查找li...

    用户1148648
  • Debian8安装TeamViewer远程协助软件

    TeamViewer是一个能在任何防火墙和NAT代理的后台用于远程控制,桌面共享和文件传输的简单且快速的解决方案。为了连接到另一台计算机,只需要在两台计算机上同...

    Debian社区
  • 7 Papers | 周志华等NeuralPS2019接收论文;网易用GAN建立游戏角色

    论文 1:Deep Learning: Computational Aspects

    机器之心

扫码关注云+社区

领取腾讯云代金券