`

[AS3]事件流那点事儿

 
阅读更多

在群里有人问了个问题:
为什么我把父剪辑的 mouseEnabled 设置为 false 但父剪辑还是可以侦听到 鼠标事件?

很有意思的一个问题,不是么!

AS3 里使用了事件流机制。简单说来一个完整的事件流应该从 Flash Player 到目标然后再回到 Flash Player。我们用一个简单的例子看看如何描述这个问题。

假如有如下结构的SWF文件,场景里有一个MovieClip(以下简称MC) A,A 里面包含一个名为 B 的MC,B 里面又包含 MC D。 有些复杂了,还是画个简单的图吧。
|-stage
..|-A
….|-B
……|-D

然后我们假设 D 触发了CLICK 事件,那么事件流程应该是:

stage  ->  A  ->  B  -> D  ->  B  ->  A  -> stage

这里有几个定义, 先看这一段:[ stage  ->  A  ->  B ], 这段在事件流当中我们定义为  捕获阶段(是否记得addEventListener的第三个参数?);

我们触发事件的对象 [ D ] 也给它定义一个阶段,命名为:目标阶段;

最后 [ B  ->  A  -> stage ] 这阶段定义为 冒泡阶段。

PS:小建议,如果觉得搞不清为什么事件为什么会从stage跑到目标再回到stage这样的问题的话,还是别去管它了。只要记住不管这个事件在哪里发生, 总是会从stage 出发,然后找到触发事件的对象,再回到stage。

这样,一个完整的事件流由 捕获, 目标和冒泡 这三个阶段构成。

更多事件流的信息请访问黑羽博客:http://www.kingda.org/archives/kingda/2006/07/as305.html

扯了这么远,回到开始的话题。

当 我们设置对象的 mouseEnabled 值的时候,它只影响对象本身不会触发事件,但这并不影响对象在事件件中的地位。也就是说当对象的子对象触发鼠标事件的时候,自身也会伴随发送事件。想想整 个事件流,也就不难理解为什么我把父剪辑的 mouseEnabled 设置为 false 但父剪辑还是可以侦听到 鼠标事件。

所以,要禁止一个对象的触发交互事件,完整的做法是 mouseEnabled=false; mosueChildren=false; 同时设置这两个值。

好了,说了一堆全是文字。动手试一下:

  1. 在场景里画一个圆,选个红色或是什么的,保存为影片剪辑;
  2. 继续在场景里画一个方框,颜色和前面的圆区分开就行,位置最好重叠;
  3. 同时选中的圆(影片剪辑)和刚画好的方框,保存影片剪辑;
  4. 再在主时间轴上添加代码:getChildAt(0).addEventListener(MouseEevnt.MOUSE_OVER, function (e){trace(“overed”);});
  5. Ctrl+ENTER 运行测试,看看运行效果。
  6. 再添加一行代码:getChildAt(0).mouseEnabled = false;
  7. 再测试运行。是不是注意到区别了呢?
分享到:
评论

相关推荐

    AS3移动端多点触摸带例子

    `TouchEvent`类是AS3处理多点触摸的核心,它包括了`TOUCH_BEGIN`、`TOUCH_MOVE`、`TOUCH_END`等常量,分别对应触摸开始、移动和结束的事件。每个触摸事件都有一个唯一的`touchPointID`,用于区分不同的触摸点。 2....

    as3事件属性

    本文将深入探讨AS3事件流中的两个关键属性——`target`与`currentTarget`,并通过具体的示例来阐述它们的区别及实际应用。 #### 二、事件流基础 在AS3中,事件流主要分为三个阶段:捕获阶段(CAPTURING PHASE)、...

    基于as3的多点触摸

    1. **触摸事件(TouchEvent)**:AS3提供了`TouchEvent`类,它包含了与触摸输入相关的所有事件。主要有三个基本的触摸事件: - `touchStart`:当一个或多个手指首次接触舞台时触发。 - `touchMove`:当手指在舞台...

    flash as3 多点触控-缩放-旋转-滑动.zip

    在Flash AS3中,我们可以通过StageGestureEvent类来监听和处理触控事件,如TOUCH_MOVE、TOUCH_BEGIN和TOUCH_END等。 缩放功能的实现依赖于计算两个触点之间的距离变化。当用户同时用两个手指在屏幕上张开或收拢时,...

    flash as3 的例子

    以下是一些关于AS3事件处理的关键知识点: 1. **事件类**:AS3中所有的事件都继承自Event类,比如MouseEvent、KeyboardEvent和TimerEvent等。每个事件类都有特定的类型,比如"click"或"keydown"。 2. **事件流**:...

    AS3 特效 demo 鼠标事件

    AS3 特效 demo 鼠标事件 鼠标顶球

    as3 视频播放器 纯as3

    6. **事件处理**:AS3中的事件模型允许开发人员对用户操作和播放状态变化作出反应。例如,`NetStatusEvent.NET_STATUS`用于监控网络状态,`VideoEvent.COMPLETE`表示视频播放完毕。 7. **自定义功能**:纯AS3的...

    UDP.rar_as3 udp_flash as3.0 UDP_flash发送udp_udp as3_windows as3.0

    总结来说,这个"UDP.rar"压缩包中的"UDP.fla"文件很可能是为了展示如何在AS3环境中使用UDP进行通信,这对于开发实时互动的Flash应用,如多人在线游戏或音视频流媒体服务,具有重要的学习价值。通过解析和运行这个...

    as3帮助文档

    3. **事件驱动编程** - AS3中的事件模型是其核心特性之一,允许程序响应用户输入或其他外部事件。事件监听器和事件对象的使用是理解AS3程序工作方式的关键。 4. **动作脚本组件** - AS3引入了一系列预定义的UI组件...

    开源码 as3 扩展瀑布流功能的DataGrid组件

    开源码 AS3 扩展瀑布流功能的 DataGrid 组件是一种强大的工具,它允许开发者在 ActionScript 3(AS3)环境中实现具有视觉吸引力和高度交互性的数据展示。这个组件扩展了标准的 Flex DataGrid 控件,引入了瀑布流布局...

    解决flash/flex/as3 访问中文域名时的流错误示例

    在《潮汕IT男》网站的文章《解决flash/flex/as3 访问中文域名时的流错误》中,作者陈林生提供了详细的步骤和代码示例,帮助开发者理解和解决这个问题。文章地址是:[http://chenlinsheng.com/?p=990]...

    AS3 多点旋转缩放类

    "AS3 多点旋转缩放类"是实现这一功能的关键组件,它使得开发者能够创建支持多点触控的自定义组件,允许用户同时操作多个触摸点来改变舞台上对象的方向和大小。 `myTouchPoint.as` 和 `MyTouchSprite.as` 是两个关键...

    as3典型的自定义事件模板

    张志晨:as3语言,最为典型的自定义事件 模板,可以自己修改并扩充。

    as3基础模块

    AS3的基础模块涵盖了语言语法、对象模型、类和接口、事件处理、数据结构、网络通信等多个方面。在深入探讨这些知识点之前,让我们先对AS3有一个概览。 一、AS3语言基础 AS3采用了更严格的面向对象编程(OOP)模型,...

    FLASHAS3代码

    8. 媒体处理:Flash Player支持音频和视频播放,AS3提供了Sound和Video类,以及NetStream和NetConnection对象,用于流媒体处理和实时通信。 九、组件使用 9. Flex组件:Flex框架提供了一系列预定义的UI组件,如...

    AS3技术文档

    我们可以总结出一系列关于ActionScript 3.0(简称AS3)的关键知识点,这些知识点覆盖了AS3的多个方面,包括日期和时间管理、字符串操作、数组处理、错误处理、正则表达式使用、XML和JSON处理、事件处理、显示编程、...

    as3-udp test

    本篇文章将详细讲解如何在AS3中使用UDP(用户数据报协议)进行测试,以及相关的知识点。 标题“as3-udp test”暗示了这是一个AS3环境下的UDP通信测试工具。UDP是一种无连接的、不可靠的传输层协议,它不保证数据包...

    as3 界面编辑

    AS3(ActionScript 3)是Adobe Flash Platform的主要编程语言,用于创建富互联网应用程序(RIA)和动画。在本主题中,“as3 界面编辑”指的是使用AS3来设计和构建用户界面(UI)。Flash CS 是一个常用的图形编辑工具...

    Flash CS3 +AS3键盘事件

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

    AS3中文版帮助文档

    2. **事件驱动编程**:AS3的核心之一就是事件驱动模型,这使得它在处理用户交互时表现出色。文档会解释Event类、EventListener接口和事件监听器的工作原理。 3. **数据类型和变量**:AS3支持基本数据类型如Number、...

Global site tag (gtag.js) - Google Analytics