[原创]为Actionscript 3添加自定义事件


为Actionscript 3添加自定义事件




1. EventDispatcher 相关说明:

包 flash.events
类 public class EventDispatcher
继承 EventDispatcher  Object
实现  IEventDispatcher
子类  Animator, Camera, ContextMenu, ContextMenuItem, DataProvider, DisplayObject, FileReference, FileReferenceList, IME, LoaderInfo, LocalConnection, Locale, Microphone, NetConnection, NetStream, PrintJob, RadioButtonGroup, SharedObject, Socket, Sound, SoundChannel, StyleSheet, Timer, Transition, TransitionManager, Tween, URLLoader, URLStream, XMLSocket


语言版本 :  ActionScript 3.0
Player 版本 :  Flash Player 9

EventDispatcher 类实现 IEventDispatcher 接口,并且是 DisplayObject 类的基类。 EventDispatcher 类允许显示列表上的任何对象都是一个事件目标,同样允许使用 IEventDispatcher 接口的方法。
事件目标是 Flash ® Player 事件模型的重要组成部分。 事件目标是事件如何通过显示列表层次结构这一问题的焦点。 当发生鼠标单击或按键等事件时,Flash Player 会将事件对象调度到从显示列表根开始的事件流中。 然后该事件对象在显示列表中前进,直到到达事件目标,然后从这一点开始其在显示列表中的回程。 在概念上,到事件目标的此往返行程被划分为三个阶段:捕获阶段包括从根到事件目标节点之前的最后一个节点的行程,目标阶段仅包括事件目标节点,冒泡阶段包括回程上遇到的任何后续节点到显示列表的根。

通常,使用户定义的类能够调度事件的最简单方法是扩展 EventDispatcher。 如果无法扩展(即,如果该类已经扩展了另一个类),则可以实现 IEventDispatcher 接口,创建 EventDispatcher 成员,并编写一些简单的挂钩,将调用连接到聚合的 EventDispatcher 中。

2.完整代码:

代码一(EventDispatcherDemo.as):

package com.demo.fr
{
    import flash.events.Event;
    import flash.events.EventDispatcher;
    
    
//在自定义类中定义自定义事件。
    public class EventDispatcherDemo
    
{
        public static 
var Event_Key_One = "com.demo.fr.Event_Key_One";
        private 
var _eventDispatcher : EventDispatcher = null;
        
        public 
function EventDispatcherDemo()
        
{
            
this._eventDispatcher = new EventDispatcher();
        }

        
        public 
function doAction():void
        
{
            
var event : Event = new Event(Event_Key_One);
            
this._eventDispatcher.dispatchEvent(event);
        }

        
        public 
function addEventListener(type : String , listener : Function):void
        
{
            
this._eventDispatcher.addEventListener(type,listener);
        }

    }

    

}


代码二(EventDispatcherDemoTest.as):

package com.demo.fr
{
    import flash.events.Event;
    
    public class EventDispatcherDemoTest
    
{
        private 
var _eventDispatcherDemo : EventDispatcherDemo = null;
        
        public 
function EventDispatcherDemoTest()
        
{
            
this._eventDispatcherDemo = new EventDispatcherDemo();    

        }

        
        public 
function Test() : void
        
{
            
this._eventDispatcherDemo.addEventListener(EventDispatcherDemo.Event_Key_One,listenerHandler);
            
this._eventDispatcherDemo.doAction();
        }

        
        private 
function listenerHandler(ev : Event) : void
        
{
            trace(
"当前事件类别为:" + ev.type);
        }

    }

}

调用代码:

import com.demo.fr.EventDispatcherDemoTest;

var edDemo : EventDispatcherDemoTest = new EventDispatcherDemoTest();
edDemo.Test();

debugf运行,trace输出为:(当前事件类别为:com.demo.fr_Event_Key_One)。
注意:要在debug模式下运行,才能看到trace输出。

posted @ 2008-03-15 11:13 有容乃大 阅读(...) 评论(...) 编辑 收藏