`

深度探索as3的事件机制

阅读更多

 

as3的事件机制很好用了。但要用好,用对,就得详细了解它的事件模型。本文将深度探索as3事件的各个方面

  • 事件模型
  • as3的事件系统包括 dispatchers(派发器),listeners(监听器)和event object(事件对象)。它们的关系用一句话概括:dispatchers向已注册的listeners派发event object。具体的关系图可以参考下面的图

     

  • 冒泡机制
  • as3的事件过程包括三个阶段 捕获,目标和冒泡阶段。下面我举一个很简单的例子来说明。舞台stage上有一个元件mc,mc上有一个子按钮元件btn。现在点击btn,发生了什么事呢?看下图

    捕获阶段:鼠标在btn上发出点击事件。首先捕获该事件的是stage,然后向下传递到mc,再到btn
    目标阶段:找到鼠标的最底层的目标btn,如果它注册了监听函数,就执行该监听函数了
    冒泡阶段:开始冒泡,自底向上。从btn到mc,最后到stage

     

    mc.addEventListener(MouseEvent.CLICK,onClickMc);
    mc.btn.addEventListener(MouseEvent.CLICK,onClickBtn);
    function onClickMc(event:MouseEvent) {
            trace("点击mc");
    }
    function onClickBtn(event:MouseEvent) {
            trace("点击btn");
    }

     

    执行结果:
    点击btn
    点击mc

     

  • addEventListener的参数
  • 我们通常只用了前面两个参数,后面的都是默认参数。下面详细讨论一下
    第三个参数 useCapture
    “确定侦听器是运行于捕获阶段、目标阶段还是冒泡阶段。如果将 useCapture 设置为 true,则侦听器只在捕获阶段处理事件,而不在目标或冒泡阶段处理事件。如果 useCapture 为 false,则侦听器只在目标或冒泡阶段处理事件。要在所有三个阶段都侦听事件,请调用 addEventListener 两次:一次将 useCapture 设置为 true,一次将 useCapture 设置为 false.”

    第四个参数 priority优先级
    默认是0.可以设置成任意的整数。当你为同一个事件监听了两个处理函数,设置不同的优先级,就可以决定他们被处理的顺序了

    第五个参数 useWeekReference 是否弱引用
    决定监听器的引用是否弱引用。如果是弱引用,当listener只剩下这一个弱引用的时候,GC就可以回收了

  • target和currentTarget的区别
  • 先来看看它们的定义。target是事件的调用者(event dispatcher)。currentTarget是事件的处理者。

    在一般情况下,两者指向的是同一对象。例如我们对某个单独的mc监听鼠标点击事件。在MouseEvent.CLICK处理函数中 target和currentTarget是同一个对象
    现在来看看不同的情况。有两个元件 m1和m2,m2是m1的子元件。给m1监听鼠标点击事件。
    现在点击m1(不包括m2)的部分,处理函数中显示:target和currentTarget均指向父容器m1。
    点击m2,处理函数中显示 target指向m2,currentTarget指向m1。

    这是为什么呢?因为as3的事件处理默认是采用冒泡机制的。currentTarget应该先指向低层,再向上冒泡。
    小结一下:target一般来说都是最里层的对象。currentTarget则是注册监听器的对象,一般是容器

  • 阻止冒泡
  • 冒泡机制是很有好处了,但是我们有时要阻止冒泡。as3也提供了阻止冒泡的机制
    1.stopImmediatePropagation():void
    防止对事件流中当前节点中和所有后续节点中的事件侦听器进行处理。

    2.stopPropagation():void
    防止对事件流中当前节点的后续节点中的所有事件侦听器进行处理。

    两者的区别在于是否阻止当前节点?处理到当前节点了,还要阻止当前节点?头脑有些转不过弯吧。当你为同一个对象的同一个事件监听处理时,这个功能就有用了。处理了第一个监听函数,调用stopImmediatePropagation()。其他的监听函数就无法收到事件了

  • 自定义事件
  • 很简单,继承Event就行啦。如果可能,顺便重新clone和toString函数,因为派发事件的事件的时候会自动调用

  • 自定义事件派发器
  • 也很简单,继承EventDispatcher就行了,或者实现IEventDispatcher接口

  • 还有
  • 不是所有的事件都有这三个阶段。如Timer、URLLoader,它们的事件对象将直接派送给目标对象(target).它们只包含目标阶段而没有捕获阶段和冒泡阶段。因为她们根本不需要显示列表

     

    分享到:
    评论

    相关推荐

      Flash CS3 +AS3键盘事件

      《Flash CS3 + AS3键盘事件深度解析》 在Flash CS3中,ActionScript 3(AS3)作为强大的编程语言,为开发者提供了丰富的交互功能。其中,键盘事件的处理是构建用户界面和游戏控制不可或缺的一部分。这篇内容将深入...

      as3实现的连连看源代码

      通过研究这些源代码,开发者不仅可以了解AS3的游戏开发技巧,还可以进一步探索如何优化搜索算法、实现更丰富的动画效果、增加多人在线对战等功能。这对于提升AS3编程技能,以及对游戏开发的理解都大有裨益。 总结,...

      基于as3 stage3d 的基础2d渲染 练手的时候写的,跟opengl原理很像

      了解这些基本概念后,开发者可以进一步探索更高级的主题,如混合模式、深度测试、顶点着色器和片段着色器的编写,以及如何使用Stage3D实现复杂的2D动画和交互效果。尽管此项目可能不是最优雅的实现,但它提供了一个...

      Flash_ActionScript3殿堂之路 绝对完整清晰版

      - **事件处理**: 提供了标准的DOM3事件实现,使得事件处理更加规范和高效。 - **异常处理**: 异常处理机制完善,包括详细的信息记录,便于调试和维护。 - **开源支持**: ActionScript3积极参与开源运动,AVM2...

      3D中国象棋-flex-away3d实现

      《3D中国象棋:Flex与Away3D的深度整合》 在当今的数字时代,游戏开发技术日新月异,3D技术的应用已经深入人心,不仅在大型游戏领域,小型休闲游戏中也得到了广泛运用。本项目“3D中国象棋”就是这样一个例子,它...

      flash10 3d 引擎

      在实际开发中,开发者可以结合3D引擎与ActionScript 3的其他功能,如加载和处理3D模型文件(如 COLLADA 或自定义格式),实现复杂的3D动画,或者利用ActionScript的事件处理机制来响应用户的交互。 虽然在某些方面...

      Flash3D引擎-Papervision3D

      Papervision3D是由Carlos Ulloa创建的,它为ActionScript 3.0(AS3)提供了一个完整的3D解决方案,使开发者能够在Flash Player环境中创建复杂的3D场景和交互式应用。这个引擎允许开发者利用ActionScript编程语言,...

      Prediction as a candidate for learning deep hierarchical models of data

      这暗示了研究的核心在于探索如何利用预测来训练深度学习模型,并通过这种方式更好地理解数据的复杂结构。 #### 描述解析: **作者介绍**:Rasmus Berg Palm 是一位在深度学习领域有深入研究的学者。他的工作主要...

      基于深度强化学习的网约车动态路径规划.docx

      综上所述,基于深度强化学习的网约车动态路径规划是一种有效的解决方案,尤其是通过引入AS-AC算法,不仅能够处理复杂多变的供需环境,还能显著提升服务质量。未来的研究可以进一步探索如何结合更多元化的数据源(如...

      探索深度学习的未来:Transformer-XL模型解析与实践

      ### 探索深度学习的未来:Transformer-XL 模型解析与实践 #### 1. Transformer-XL 模型概述 Transformer-XL 是由百度研究院团队于 2019 年提出的一种新型深度学习模型,它在传统的 Transformer 模型基础上进行了...

      away3d引擎Flash

      ActionScript3.0(AS3)是Flash平台的主要编程语言,与之前的版本相比,它具有更现代的语法结构、面向对象编程支持以及显著的性能提升。在Away3D中,开发者使用AS3编写3D场景、对象交互以及动画效果,这使得在浏览器...

      dqn走迷宫matlab-深度强化学习DQN(DeepQNetwork)原理及例子:如何解。。。 深度学习原理.pdf

      该机制将智能体探索环境时收集到的经验存储在记忆库中,并在训练时随机抽取一定数量的样本进行训练。这样可以避免样本之间的相关性,提高算法的稳定性。 损失函数 DQN的损失函数是基于Q函数的,目标是使预测的Q值...

      2018 cvpr the unreasonable effectiveness of deep features as a perceptual metric

      - **深度特征的作用机制**:深度网络能够捕获图像中的多层次信息,从低层次的边缘和纹理到高层次的对象和场景理解,这使得它们能够更好地模拟人类对图像的感知过程。 - **不同网络架构的对比**:论文中提到了几种...

      ActionScript3.0开发人员指南

      - **ActionScript3.0事件处理与早期版本事件处理的不同之处**:对比AS3与其他版本的事件处理机制,突出其改进和新特性。 - **事件流**:详细解析事件的传播过程,即捕获阶段、目标阶段和冒泡阶段,以及如何利用这些...

      比较基因组学Comparative Genomics Using Fungi as Models

      总之,《比较基因组学:使用真菌作为模型》这本书不仅是对比较基因组学领域内使用真菌作为研究模型的一次全面总结,也是对真菌生物学、进化生物学以及分子遗传学等多个交叉学科的深度探索。它不仅为专业研究者提供了...

      flex drilldown 例子应用

      Flex Drilldown是一种在Adobe Flex应用程序中实现数据深度探索和交互式数据分析的技术。它允许用户逐层深入数据,从高层次的概览逐步细化到具体的细节,从而提供了一种强大的数据可视化和交互体验。在这个"flex ...

      Flash制作的扑克对对碰小游戏源码。

      本篇文章将深度剖析一款基于AS3.0(ActionScript 3.0)编程语言的Flash扑克对对碰小游戏源码,帮助读者理解其背后的逻辑和设计思路,以期提升对AS3.0和游戏开发的理解。 首先,ActionScript 3.0是Adobe Flash ...

      DeepSORT特征提取网络权重管理:深度学习在目标跟踪中的巧妙应用

      1. **深度学习目标检测器**:DeepSORT采用先进的深度学习模型(如YOLOv3、YOLOv4等)来实现目标检测和特征提取,这一步骤确保了能够准确地定位视频中的各个目标并获取其特征信息。 2. **SORT跟踪器**:在此基础上,...

      actionscript3.0学习资料

      这些只是ActionScript 3.0学习过程中的部分关键知识点,通过深入研究提供的“as3.0资料”文档,你可以逐步掌握这些技能,并进一步探索更高级的主题,如粒子系统、游戏开发、以及与服务器的深度集成等。不断实践和...

    Global site tag (gtag.js) - Google Analytics