AS3-自定义事件攻略

这个Demo讲的是一个Customer去Barbershop消费,而Barbershop提供2种ServerEvent,CUT_HAIR和SPECIAL。

具体代码,先来文档类Barbershop.as:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package {
    import Customer;
    import Waiter;
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.events.MouseEvent;
 
    public class Barbershop extends Sprite {
        var customDF:Customer=new Customer("DFdou");
        var waiter:Waiter=new Waiter("路人A");
        public function Barbershop () {
            addChild (waiter);
            btnCutHair.addEventListener (MouseEvent.CLICK,cutHair);
            btnSpecial.addEventListener (MouseEvent.CLICK,special);
        }
        function cutHair (_evt:MouseEvent) {
            customDF.addEventListener (ServerEvent.CUT_HAIR,waiter.serve);
            customDF.callServe (ServerEvent.CUT_HAIR,"MM1");
            customDF.removeEventListener (ServerEvent.CUT_HAIR,waiter.serve);
        }
        function special (_evt:MouseEvent) {
            customDF.addEventListener (ServerEvent.SPECIAL,waiter.serve);
            customDF.callServe (ServerEvent.SPECIAL,"MM2");
            customDF.removeEventListener (ServerEvent.SPECIAL,waiter.serve);
        }
        public function showInfo (_str:String) {
            txtInfo.appendText (_str+"\n");
        }
    }
}

自定义事件类ServerEvent.as:

1
2
3
4
5
6
7
8
9
10
11
package {
    import flash.events.Event;
    public class ServerEvent extends Event{
        public static const CUT_HAIR:String="cut_hair";
        public static const SPECIAL:String="special";
        public var _server:String;//指定个变量来存放服务人员
        public function ServerEvent (eventType:String):void {
            super(eventType);
        }
    }
}

Customer顾客类Customer.as:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package {
    import flash.events.EventDispatcher;
    public class Customer extends EventDispatcher {
        public var _name:String;
        public function Customer (name:String):void {
            _name=name;
        }
        public function callServe(eventType:String,server:String){
            var serverEvent:ServerEvent=new ServerEvent(eventType);
            serverEvent._server=server;//指定服务的人
            dispatchEvent(serverEvent);//发送事件
        }
    }
}

Waiter类Waiter.as:

1
2
3
4
5
6
7
8
9
10
11
12
13
package {
    import flash.display.Sprite;
    public class Waiter extends Sprite{
        public var _name:String;
        public function Waiter (name:String) {
            _name=name;
        }
        public function serve (_evt:ServerEvent) {
            //调用root里的函数,这里是用来做Demo用到~
            Object(root).showInfo("你需要"+_evt._server+"服务,服务类型为:"+_evt.type);
        }
    }
}

自定义事件的具体流程:
1.自定义好事件类;
2.注册事件侦听器;例子中为Custom callServe
3.发送dispatch事件;
4.侦听事件,处理;例子中为Waiter serve
5.移除侦听。

posted @ 2011-06-15 14:34  rob_2010  阅读(158)  评论(0编辑  收藏  举报