通过AS2.0来使用Event Bubbling

ubb

Event Bubbling (事件浮升机制)
ok,我姑且这么称呼Event Bubbling吧.原来Ralf在自己的Blog上发表了在As2.0中使用Event Bubbling的方法.实在是个有创意的想法.
Event Bubbling原本是只能在AS3.0中使用的.在Event Bubbling机制里面,产生事件的对象首先会收到事件。然后,事件会依照对象的等级结构向上传播.那么简单的说在Flash中的使用Event Bubbling则是使处理嵌套的MC显得简单很多.Event Bubbling的使用主要便是很好的加强了事件处理的连续性.
Ralf的方案是用自己的方法来替换dispatch的方法,下面这段方法是Ralf的一个范例,你也可以自己修改:

public static initializeBubbling(dispatcher:MovieClip){ 
       var parentDispatcher = dispatcher._parent; //add traversal optionally, see comments below 
       var oldDispatchEvent = dispatcher.dispatchEvent; 
       dispatcher.dispatchEvent = function( evt){ 
            oldDispatchEvent.call( dispatcher, evt); 
            if( evt.bubbles){ 
                parentDispatcher.dispatchEvent( evt);                  
            } 
       } 

更详细的文章,我想还是看原文比较好
同时,Peter Elst也写了一个使用的范例.
比如,当你不使用Event Bubbling时,你需要通过以下的方法来让mc1.mc2广播事件.

mc1.mc2.addEventListener("someEvent",someEventHandler); 
如果使用Event Bubbling则可以这样.
mc1.addEventListener("someEvent",someEventHandler); 
由于这样的事件链机制,你就不用担心时间出自哪里了.
import mx.events.EventDispatcher; 
// Ralf Bokelberg’s AS2.0 event bubbling workaround 
initializeBubbling = function(dispatcher:MovieClip) { 
  var parentDispatcher = dispatcher._parent; 
  var oldDispatchEvent = dispatcher.dispatchEvent; 
  dispatcher.dispatchEvent = function( evt){ 
    oldDispatchEvent.call( dispatcher, evt); 
      if( evt.bubbles){ 
        parentDispatcher.dispatchEvent(evt);                  
      } 
    } 

// create empty movieclips 
var mc1:MovieClip = createEmptyMovieClip("mc1",1); 
var mc2:MovieClip = mc1.createEmptyMovieClip("mc2",1); 
// initialize EventDispatcher 
EventDispatcher.initialize(mc1); 
EventDispatcher.initialize(mc1.mc2); 
// initialize event bubbling 
initializeBubbling(mc1.mc2); 
// add event listeners to movieclips 
mc1.mc2.addEventListener("customEvent",function() {  
  trace("customEvent captured by mc1.mc2");  
}); 
mc1.addEventListener("customEvent",function() {  
  trace("customEvent captured by mc1");  
}); 
// dispatch event 
mc1.mc2.dispatchEvent({type:"customEvent",bubbles:true}); 

时间: 2025-01-21 19:48:53

通过AS2.0来使用Event Bubbling的相关文章

进阶:学习As2.0与AS3.0的尴尬

从macromedia大刀阔斧对As1.0进行改革到AS2.0,这一段过程看上去还算长一些,从flashmx到flash mx2004到flash 7.2再到flash8. 它们的核心actionscript都是as2.0.在flash8刚刚发布不长时间,macromedia又紧罗密鼓的推出了flash9预览版,大家都已经知道了Adobe发布的预览版可以对AS3.0进行编译,而As3.0经过测试它的速度可以说要比之前的as2.0快10倍.拿着as3.0与As2.0相对比,虽然有些东西看着面熟,但

学习As2.0与AS3.0的尴尬

从macromedia大刀阔斧对As1.0进行改革到AS2.0,这一段过程看上去还算长一些,从flashmx到flash mx2004到flash 7.2再到flash8. 它们的核心actionscript都是as2.0. 在flash8刚刚发布不长时间,macromedia又紧罗密鼓的推出了flash9预览版,大家都已经知道了Adobe发布的预览版可以对AS3.0进行编译,而As3.0经过测试它的速度可以说要比之前的as2.0快10倍.拿着as3.0与As2.0相对比,虽然有些东西看着面熟,

AS2.0中实现数据结构-哈希表

数据|数据结构 在游戏制作中我们经常需要存储一些离散的对象数据,比如道具箱里的道具,经常需要执行插入和删除操作,而且道具之间没有联系是无序排列的.有些人会说直接用数组不就得了,但是有大量数据存储时的数组的删除插入操作的效率是很低的.因此我们需要哈希表这样的可以提供快速的插入和删除,查找操作的数据结构,不论哈希表中有多少数据,插入和删除操作只需要接近常量的时间:即O(1)的时间级.既然这么好那么我们的AS可以实现吗?当然可以!AS发展到AS2.0,已经成为在语法上更接近于Java + Pascal

AS1.0的OOP 与 AS2.0的OOP对比

    AS1.0用Function构造的OOP并不是完善的OOP.而AS2.0在定义时就严格要求.这对写程序有很大帮助--     以前用AS1.0做OOP架构时,使用的是Function构造函数和定义子(私有)函数通过prototype比如建立一个textField,用于显示一个文本集合.     FLA的第一帧,以下内容为程序代码: #include "mytestload.as" //如果用AS2.0这句不需要_root.createTextField("mytext

AS2.0 制作切换菜单效果

AS2.0 制作切换菜单效果 var 设置 = {}; 设置.数量 = 10; 设置.间距 = 150; 设置.比例 = 250; 设置.速度 = 4; ////////////////////////////////////////////// var 中心MC = 0; var 按 = false; var 转 = false; var H = Stage.height/2; var W = Stage.width/2; for (var i = 0; i<设置.数量+1; i++) { v

AS2.0 高级滤镜代码与总结

AS2.0 高级滤镜代码与总结 //主语句  import fl.awt.img.filter.*;  import flash.display.BitmapData;  //各种滤镜的写法:  /*浮雕滤镜的写法,ReliefFilter(浮雕方向,浮雕强度)  var lvjing = new ReliefFilter(1, 10);  var filterArray:Array = new Array();  filterArray.push(lvjing);  pic.filters =

AS2.0大步更新 Google强势逆天

AS2.0大步更新 Google强势逆天 就在不久前,Google高调发布了Android Studio 2.0,是的,他19号才发布了Android Studio 1.5,才过了一个礼拜,很多人都是昨天才更新了1.5,一看今天就2.0了,步子跨的太大,不会疼嘛.不过没事,程序员还怕死嘛,马上更新. New Features in Android Studio 2.0 Instant Run: Faster Build & Deploy 逆天吗?你还在羡慕iOS的playground吗?Andr

怎么修改flash里as2.0组件样式

flash里as2.0的组件样式用代码修改很麻烦, 有时候还改不出来, 现在有一个方法直接修改元件就能改掉组件的显示效果啦! 方法: 1. 新建一个fla文件test.fla(flash cs3以上的记得要选2.0的哦); 2. 在flash的安装目录下找到zh_cnConfigurationComponent SourceActionScript 2.0FLAHaloTheme.fla(这是第二版的组件样式,第一版的是SampleTheme.fla)<为了别误删除, 你可以把他copy到其他地

AS和JS互相调用有个很酷的特性(as2.0)

JavaScript和ActionScript互相调用时,其实有个非常好的特性,不过貌似很少有人提到这个 特性:它们之间的数据类型对方均可以识别.因此,你可以通过swf提供的接口来传递对象.数组.字符串等等.不过它们之间传递的参数的值的长度有限制(具体长度还没仔细测试),因此你不能把JavaScript中的一个超大的对象直接传递进去.不过即使是这样,已经非常好用了,看看示例代码: as2 代码: import flash.external.*;  // 创建一个行的TextField来显示调用结