- 浏览: 128411 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
zhanchaojiang:
...
Flash使用到数学、物理的公式 -
沈冠军:
太好啦,呵呵···
用Flex Builder创建第一个Flex AIR程序 -
zht110227:
代码能加上点注释吗?看着效果更好。
Flex的通信方式(N)——URLLoader -
yangkd548:
可能是SWF是2.0的原因吧,你用3.0的试试吧
Flex与Flash的交互_1(初级简单示例) -
aotie:
你好我套用你的模式!做为什么这句 flashMc=flashC ...
Flex与Flash的交互_1(初级简单示例)
1.先说一些基础的东西(直接从网上copy过来)
(1) 事件是一个对象,它由flash play产生和管理。事件流分捕获阶段,目标阶段和冒泡阶段。事件流的示意图如下,这里说明一下target和 currentTarget的概念。当一个事件流产生时,就产生了一个显示对象列表,而target是最里层的对象,而 currentTarget是捕获阶段和冒泡阶段被"遍历"的显示对象,当然它只有注册了时间监听器,我们才能获得 event.currentTarget。
(2)
(3)不是所有的事件都有这三个阶段。如Timer、URLLoader,它们的事件对象将直接派送给目标对象(target).它们只包含目标阶段而没有捕获阶段和冒泡阶段。它们不会像显示对象容器(DisplayObjectContainer)那样有可能被一个DisplayObjectContainer对象包含或者自己包含一个DisplayObjectContainer对象,它们往往是单独存在的。也就是说如果一个显示对象不在显示列表中时,FlashPlaye会把事件直接派送给它,这个时候就没有事件流,也没有捕获阶段和冒泡阶段,只有目标阶段。
(1)请仔细看上面的图中的事件流,图中的假定的事件派发的对象是子节点1,从图中我们可以看出,事件流并没有经过子节点2,也就是说如果子节点2中监听事件,那子节点无法监听到事件。
(2)如果如果父节点监听子节点1的事件可以监督到吗?当然可以因为事件流有经过父节点;有两种方式可以监听到子节点1的事件:
自定义事件:
1)在父节点里面用子节点监听事件(如子节点1.addEventListener(。。。。))此时不需要设置addEventListener中的useCapture参数和new Event时Event的bubbles参数。就可以直接监听到子节点1的事件,因为此时直接在目标阶段捕捉事件。
2)直接用在父节点中加入但是addEventListener(。。。)也可以监听子节点1的事件,但是前提条件是在父节点监听事件的时候要把addEventListener中的useCapture参数设置成true(如addEventListener(MenuEvent.MENU_Event, handler,true)或者字节点1中new Event时将Event的bubbles参数设置为true( new MenuEvent(MenuEvent.MENU_Event,true))。如果都不这样的话,父节点是无法监听到事件的。
因为addEventListener中的useCapture的default模式是false也就是侦听器只在目标或冒泡阶段处理事件,而new Event时将Event的bubbles参数default也是false也就是说不参与事件流的冒泡阶段。如果不设置useCapture或者bubbles为true那父节点肯定无法监听到事件。
(3)如果非要在子节点2中监听子节点1中发出的事件怎么办?
1)办法有很多种,说一下最常用的一种,就是向子节点1 与子节点2 都传入一个相同的对象的实例,在子节点1中用这个对象实例发出事件,在子节点2中用这个对象实例监听事件(在目标阶段捕获事件)。这样就可以收到字节点1的事件了。
非自定义事件(如mouseEvent):
1)当是非自定义事件时。直接用在父节点中加入但是addEventListener(。。。)就可以监听子节点1的事件。
2)有人可能要问如果我要在子节点2监听子节点1的非自定义事件呢?可以用(上面的2 标题里面 3)),但是完全没有必要,比如,你说你在子节点2中监听子节点1的mouseClick 事件干吗??
摘录Flash帮助文档中的规范解释:
addEventListener () 方法
public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
语言版本 : ActionScript 3.0
RuntimeVersions: AIR 1.0, Flash Player 9
使用 EventDispatcher 对象注册事件侦听器对象,以使侦听器能够接收事件通知。可以为特定类型的事件、阶段和优先级在显示列表的所有节点上注册事件侦听器。
成功注册一个事件侦听器后,无法通过额外调用 addEventListener() 来更改其优先级。要更改侦听器的优先级,必须首先调用 removeListener()。然后,可以使用新的优先级再次注册该侦听器。
请记住,注册该侦听器后,如果继续调用具有不同 type 或 useCapture 值的 addEventListener(),则会创建单独的侦听器注册。例如,如果首先注册 useCapture 设置为 true 的侦听器,则该侦听器只在捕获阶段进行侦听。如果使用同一个侦听器对象再次调用 addEventListener(),并将 useCapture 设置为 false,那么便会拥有两个单独的侦听器:一个在捕获阶段进行侦听,另一个在目标和冒泡阶段进行侦听。
不能只为目标阶段或冒泡阶段注册事件侦听器。这些阶段在注册期间是成对出现的,因为冒泡阶段只适用于目标节点的始祖。
如果不再需要某个事件侦听器,可调用 removeEventListener() 删除它,否则会产生内存问题。由于垃圾回收器不会删除仍包含引用的对象,因此不会从内存中自动删除使用已注册事件侦听器的对象。
复制 EventDispatcher 实例时并不复制其中附加的事件侦听器。(如果新近创建的节点需要一个事件侦听器,必须在创建该节点后附加该侦听器。) 但是,如果移动 EventDispatcher 实例,则其中附加的事件侦听器也会随之移动。
如果在正在处理事件的节点上注册事件侦听器,则不会在当前阶段触发事件侦听器,但会在事件流的稍后阶段触发,如冒泡阶段。
如果从正在处理事件的节点中删除事件侦听器,则该事件侦听器仍由当前操作触发。删除事件侦听器后,决不会再次调用该事件侦听器(除非再次注册以备将来处理)。
参数 type:String — 事件的类型。
listener:Function — 处理事件的侦听器函数。此函数必须接受 Event 对象作为其唯一的参数,并且不能返回任何结果,如下面的示例所示:
function(evt:Event):void函数可以有任何名称。
useCapture:Boolean (default = false) — 确定侦听器是运行于捕获阶段、目标阶段还是冒泡阶段。如果将 useCapture 设置为 true,则侦听器只在捕获阶段处理事件,而不在目标或冒泡阶段处理事件。如果 useCapture 为 false,则侦听器只在目标或冒泡阶段处理事件。要在所有三个阶段都侦听事件,请调用 addEventListener 两次:一次将 useCapture 设置为 true,一次将 useCapture 设置为 false.
priority:int (default = 0) — 事件侦听器的优先级。优先级由一个带符号的 32 位整数指定。数字越大,优先级越高。优先级为 n 的所有侦听器会在优先级为 n -1 的侦听器之前得到处理。如果两个或更多个侦听器共享相同的优先级,则按照它们的添加顺序进行处理。默认优先级为 0。
useWeakReference:Boolean (default = false) — 确定对侦听器的引用是强引用,还是弱引用。强引用(默认值)可防止您的侦听器被当作垃圾回收。弱引用则没有此作用。
类级别成员函数不属于垃圾回收的对象,因此可以对类级别成员函数将 useWeakReference 设置为 true 而不会使它们受垃圾回收的影响。如果对作为嵌套内部函数的侦听器将 useWeakReference 设置为 true,则该函数将作为垃圾回收并且不再是永久函数。如果创建对该内部函数的引用(将该函数保存到另一个变量中),则该函数将不作为垃圾回收并仍将保持永久。
(1) 事件是一个对象,它由flash play产生和管理。事件流分捕获阶段,目标阶段和冒泡阶段。事件流的示意图如下,这里说明一下target和 currentTarget的概念。当一个事件流产生时,就产生了一个显示对象列表,而target是最里层的对象,而 currentTarget是捕获阶段和冒泡阶段被"遍历"的显示对象,当然它只有注册了时间监听器,我们才能获得 event.currentTarget。
(2)
<1> 捕获阶段 (EventPhase.CAPTURING_PHASE)包括从舞台到目标节点范围内的所有节点 <2> 目标阶段 (EventPhase.AT_TARGET)权包括目标节点 <3> 冒泡阶段 (EventPhase.BUBBLING_PHASE)从目标节点的父节点返回到舞台的行程中遇到的节点
(3)不是所有的事件都有这三个阶段。如Timer、URLLoader,它们的事件对象将直接派送给目标对象(target).它们只包含目标阶段而没有捕获阶段和冒泡阶段。它们不会像显示对象容器(DisplayObjectContainer)那样有可能被一个DisplayObjectContainer对象包含或者自己包含一个DisplayObjectContainer对象,它们往往是单独存在的。也就是说如果一个显示对象不在显示列表中时,FlashPlaye会把事件直接派送给它,这个时候就没有事件流,也没有捕获阶段和冒泡阶段,只有目标阶段。
(1)请仔细看上面的图中的事件流,图中的假定的事件派发的对象是子节点1,从图中我们可以看出,事件流并没有经过子节点2,也就是说如果子节点2中监听事件,那子节点无法监听到事件。
(2)如果如果父节点监听子节点1的事件可以监督到吗?当然可以因为事件流有经过父节点;有两种方式可以监听到子节点1的事件:
自定义事件:
1)在父节点里面用子节点监听事件(如子节点1.addEventListener(。。。。))此时不需要设置addEventListener中的useCapture参数和new Event时Event的bubbles参数。就可以直接监听到子节点1的事件,因为此时直接在目标阶段捕捉事件。
2)直接用在父节点中加入但是addEventListener(。。。)也可以监听子节点1的事件,但是前提条件是在父节点监听事件的时候要把addEventListener中的useCapture参数设置成true(如addEventListener(MenuEvent.MENU_Event, handler,true)或者字节点1中new Event时将Event的bubbles参数设置为true( new MenuEvent(MenuEvent.MENU_Event,true))。如果都不这样的话,父节点是无法监听到事件的。
因为addEventListener中的useCapture的default模式是false也就是侦听器只在目标或冒泡阶段处理事件,而new Event时将Event的bubbles参数default也是false也就是说不参与事件流的冒泡阶段。如果不设置useCapture或者bubbles为true那父节点肯定无法监听到事件。
(3)如果非要在子节点2中监听子节点1中发出的事件怎么办?
1)办法有很多种,说一下最常用的一种,就是向子节点1 与子节点2 都传入一个相同的对象的实例,在子节点1中用这个对象实例发出事件,在子节点2中用这个对象实例监听事件(在目标阶段捕获事件)。这样就可以收到字节点1的事件了。
非自定义事件(如mouseEvent):
1)当是非自定义事件时。直接用在父节点中加入但是addEventListener(。。。)就可以监听子节点1的事件。
2)有人可能要问如果我要在子节点2监听子节点1的非自定义事件呢?可以用(上面的2 标题里面 3)),但是完全没有必要,比如,你说你在子节点2中监听子节点1的mouseClick 事件干吗??
摘录Flash帮助文档中的规范解释:
addEventListener () 方法
public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
语言版本 : ActionScript 3.0
RuntimeVersions: AIR 1.0, Flash Player 9
使用 EventDispatcher 对象注册事件侦听器对象,以使侦听器能够接收事件通知。可以为特定类型的事件、阶段和优先级在显示列表的所有节点上注册事件侦听器。
成功注册一个事件侦听器后,无法通过额外调用 addEventListener() 来更改其优先级。要更改侦听器的优先级,必须首先调用 removeListener()。然后,可以使用新的优先级再次注册该侦听器。
请记住,注册该侦听器后,如果继续调用具有不同 type 或 useCapture 值的 addEventListener(),则会创建单独的侦听器注册。例如,如果首先注册 useCapture 设置为 true 的侦听器,则该侦听器只在捕获阶段进行侦听。如果使用同一个侦听器对象再次调用 addEventListener(),并将 useCapture 设置为 false,那么便会拥有两个单独的侦听器:一个在捕获阶段进行侦听,另一个在目标和冒泡阶段进行侦听。
不能只为目标阶段或冒泡阶段注册事件侦听器。这些阶段在注册期间是成对出现的,因为冒泡阶段只适用于目标节点的始祖。
如果不再需要某个事件侦听器,可调用 removeEventListener() 删除它,否则会产生内存问题。由于垃圾回收器不会删除仍包含引用的对象,因此不会从内存中自动删除使用已注册事件侦听器的对象。
复制 EventDispatcher 实例时并不复制其中附加的事件侦听器。(如果新近创建的节点需要一个事件侦听器,必须在创建该节点后附加该侦听器。) 但是,如果移动 EventDispatcher 实例,则其中附加的事件侦听器也会随之移动。
如果在正在处理事件的节点上注册事件侦听器,则不会在当前阶段触发事件侦听器,但会在事件流的稍后阶段触发,如冒泡阶段。
如果从正在处理事件的节点中删除事件侦听器,则该事件侦听器仍由当前操作触发。删除事件侦听器后,决不会再次调用该事件侦听器(除非再次注册以备将来处理)。
参数 type:String — 事件的类型。
listener:Function — 处理事件的侦听器函数。此函数必须接受 Event 对象作为其唯一的参数,并且不能返回任何结果,如下面的示例所示:
function(evt:Event):void函数可以有任何名称。
useCapture:Boolean (default = false) — 确定侦听器是运行于捕获阶段、目标阶段还是冒泡阶段。如果将 useCapture 设置为 true,则侦听器只在捕获阶段处理事件,而不在目标或冒泡阶段处理事件。如果 useCapture 为 false,则侦听器只在目标或冒泡阶段处理事件。要在所有三个阶段都侦听事件,请调用 addEventListener 两次:一次将 useCapture 设置为 true,一次将 useCapture 设置为 false.
priority:int (default = 0) — 事件侦听器的优先级。优先级由一个带符号的 32 位整数指定。数字越大,优先级越高。优先级为 n 的所有侦听器会在优先级为 n -1 的侦听器之前得到处理。如果两个或更多个侦听器共享相同的优先级,则按照它们的添加顺序进行处理。默认优先级为 0。
useWeakReference:Boolean (default = false) — 确定对侦听器的引用是强引用,还是弱引用。强引用(默认值)可防止您的侦听器被当作垃圾回收。弱引用则没有此作用。
类级别成员函数不属于垃圾回收的对象,因此可以对类级别成员函数将 useWeakReference 设置为 true 而不会使它们受垃圾回收的影响。如果对作为嵌套内部函数的侦听器将 useWeakReference 设置为 true,则该函数将作为垃圾回收并且不再是永久函数。如果创建对该内部函数的引用(将该函数保存到另一个变量中),则该函数将不作为垃圾回收并仍将保持永久。
发表评论
-
Flash Builder 4 安装SVN
2010-11-28 00:48 1426选择菜单 帮助–> 安装新软件 在使用里键入地址: ... -
FLEX 为DataGrid 添加序号列(1)
2010-05-11 10:49 4035下面的实现方式,基本思路就是用itemrender访问父文档的 ... -
Flex设定Textinput圆角矩形输入框(转)
2010-05-07 20:20 4920(英文)原文地址 1、以下的例子展示如何通过设置focus ... -
Flex程序启动事件的顺序initialize、creationComplete、applicationComplete(转)
2010-05-06 20:01 2309<?xml version="1.0&qu ... -
用Flex Builder创建第一个Flex AIR程序
2010-04-30 10:20 1685创建一个AIR工程 先安装好Adobe AIR运行时以及设置 ... -
target和currentTarget的区别
2010-04-26 23:08 1543target和currentTarget的区别 ... -
跨域策略文件——解决Flash安全沙箱问题
2010-04-26 16:20 3533一、基础解说 用 Flash 文档访问另一个域中的数据。F ... -
Flash Builder 入门学习资源
2010-04-06 13:48 2021Flash Builder 资源 Flash Builder ... -
Flex 开源框架及工具 整理和更新转帖
2010-03-23 13:06 11091.Caringorm 2.PureMVC 3.Mode ... -
Flex的通信方式(N)——URLLoader
2010-02-10 16:01 1495URLLoader交互的例子 < ... -
flex amf的使用
2009-12-07 15:32 5288AMF是Adobe独家开发出来的通信协议,它采用二进制压缩,序 ... -
Flex设置TextInput的默认焦点、切换焦点的例子
2009-11-29 11:03 86051、首先,在加载swf的页面上写下下面的代码,控制页面将焦点设 ... -
Flex与Flash的交互_2(深层对象交互示例)
2009-11-25 11:37 1872Flex端程序 1、主程序文件TestFlex_Flash ... -
Flex与Flash的交互_1(初级简单示例)
2009-11-25 10:26 3186其实就是Flex将Flash以资源的形式加载到Flex项目中, ... -
Flex的通信方式(五)——HTTPService_3
2009-11-23 19:42 2249转载自:http://hi.baidu.com ... -
Flex的通信方式(四)——HTTPService_2
2009-11-23 19:08 1497转载自:http://cs.ntsky.com/flex3-j ... -
Flex的通信方式(三)——HTTPService_1
2009-11-18 13:38 1537MXML代码: <?xml version ... -
Flex的通信方式(二)——Webservice-2
2009-11-18 12:47 1113这里主要介绍Webservices使用AS代码的操作方法 A ... -
Flex的通信方式(一)——Webservice-1
2009-11-18 12:12 2130flex与Webservices与简单通信 1、格式: f ... -
在ActionScript工程中中实现绑定
2009-09-28 15:17 1284在ActionScript中实现绑定 这种方法是使用mx.bi ...
相关推荐
Flex事件机制是Adobe Flex框架中一个关键的概念,它允许组件之间通过事件进行通信。在Flex中,事件机制的分发主要包括三个主要阶段:捕获阶段、目标阶段和冒泡阶段。下面将详细介绍这些阶段以及自定义事件的创建与...
在编程领域,事件机制和观察者模式是两个重要的概念,特别是在ActionScript 3(AS3)中被广泛应用。本文将详细探讨这两个主题,以及如何在AS3中实现一个基于观察者模式的事件处理机制。 首先,事件机制是编程中一种...
### Flex事件机制详解 #### 一、引言 Flex是一个强大的框架,用于构建高性能的Web应用程序。对于初学者而言,理解和掌握Flex中的事件机制是非常重要的一步。本文将深入探讨Flex事件机制的基础概念、事件注册通道、...
Flash Player的核心运行机制可以概括为核心周期,它涵盖了事件处理、用户代码执行、运行时环境以及输出等多个方面。具体来说: 1. **事件**:包括鼠标点击、键盘输入等外部触发的动作。 2. **用户代码**:指由...
### 深入浅出讲解Flex中的事件机制 #### 一、引言 Flex是一种用于构建高度交互式、跨平台的Web应用程序的技术框架。它基于Adobe的Flash平台,并且使用ActionScript 3作为编程语言。Flex的核心优势在于其强大的用户...
3. 用户交互:Flash事件监听机制使得游戏能够响应用户的鼠标点击,确定落子位置,并通过ActionScript进行合法性检查。 三、游戏逻辑实现 1. 象棋规则:ActionScript代码实现了中国象棋的完整规则,包括棋子的移动...
在Flash 3.0中,这通常通过时间轴上的事件监听器和函数实现,如帧事件(onEnterFrame)用于每帧执行的更新。 2. 玩家控制:玩家的飞机可以通过键盘输入进行移动和射击。ActionScript中的键盘事件(onKeyDown、...
3. **事件处理和交互性**:由于Flash Player播放器与Flash媒体文件可以实现交互,因此需要理解QT的信号和槽机制,这是QT中实现对象间通信的重要方式。当用户与Flash内容交互时,如点击按钮或触发某些动作,这些事件...
2. **事件通知机制**:在描述中提到,代码实现了Flash事件通知到Delphi。这意味着当Flash中发生特定事件(如点击按钮、完成加载等)时,会触发一个事件处理程序,该处理程序可以由Delphi端编写,从而实现对这些事件...
例如,你可以通过“DisplayObject”和“EventDispatcher”类了解如何控制舞台上的对象以及事件处理机制。 二、数据类型与变量 AS3.0引入了静态和动态类型的概念,理解数据类型的使用和变量声明是编写高效代码的关键...
本主题的焦点是一个定时Flash闹钟及其源码,这为我们提供了一个深入理解Flash编程和时间管理机制的机会。 首先,"clock.fla"是Flash中的主要工作文件,它包含了项目的所有元素,包括图形、动画、代码等。FLA文件是...
通过以上内容,我们了解了Flash CS3与AS3中的键盘事件处理机制,这为创建丰富的交互体验奠定了基础。实际应用中,开发者可以根据需求进行更复杂的逻辑设计,如组合键、延迟处理、按键持续时间等。结合`keyCodes.fla`...
4. **事件处理**:VB可以监听Flash控件的事件,例如`Flash1_FlashReady`事件,当Flash加载完成时触发,允许在VB代码中执行后续操作。 5. **数据交换**:VB可以向Flash传递数据,如更改动画的帧速率或设置变量值,...
总之,Flash打字动画是ActionScript编程中的一个经典案例,通过研究源代码,我们可以深入了解其背后的机制,提升自己的编程和动画制作水平。无论你是初学者还是经验丰富的开发者,都应该尝试去挖掘这个技术的潜力,...
3. **大富翁游戏机制**:游戏的核心玩法是通过掷骰子决定移动步数,棋盘上的格子可能包含各种事件,如购买地产、支付租金、机会卡、命运卡等,通过策略和运气来赢得游戏。 4. **答题系统**:在Flash大富翁游戏中,...
源码应包含适当的错误捕获和反馈机制。 9. **性能优化**:考虑到音乐播放器可能需要处理多个音频文件,源码中可能存在内存管理和性能优化的策略。 10. **调试与测试**:FlashBuilder的调试工具允许开发者逐步执行...
这种通信机制使得VB可以控制Flash的行为,如触发动画、更改显示内容等,反之亦然。 "编辑器"标签则表明该软件的核心功能是编辑和创作。在VB+FLASH编辑器中,用户可以创建、编辑和预览电子书内容,包括文本布局、...
首先,我们需要理解VB与Flash之间的交互机制。Flash电影(SWF文件)通常通过ActiveX控件在Windows环境中进行播放。在VB中,我们可以使用Shockwave Flash Object(也称为Flash ActiveX控件)来嵌入和控制SWF文件。这...
通过监听编辑器的“选择文件”事件,我们可以使用File API读取用户选择的图片,然后使用FormData对象将其数据发送到服务器。在客户端,可以使用HTML5的FileReader API预览选定的图片,避免了对Flash的依赖。 三、...