[AS3] 커스텀이벤트

Flash - as2, as3 2010. 2. 17. 17:11

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
* 커스텀 이벤트를 생성하는 이유는 이벤트 전달 시에 데이터도 함께 전달하고자 하는데 목적이 있다.
package  
{
    import flash.events.Event;
    
    // 커스텀 이벤트 생성
    // 이벤트 클래스 혹은 그 상위 이벤트 클래스를 상속받는다.
    public class CustomEvent extends Event
    {
        static public const CALL:String = "call";
        private var _data:Object;
        
        // 생성자의 파라메터 값을 통해 버블링, cancelable 등을 설정할 수 있다.
        public function CustomEvent( type:String, data:Object
        bubble:Boolean = false, cancelable:Boolean = false )
        {
            super( type, bubble, cancelable );
            this._data = data;
        }
        
        // clone 메서드를 override 하는 이유는 이벤트 재전달 시
        // 커스텀 이벤트 인자들의 값을 그대로 재전달하기 위해서..
        override public function clone():Event
        {
            return new CustomEvent( type, _data, bubbles, cancelable );
        }
        
        public function get data():Object
        {
            return _data;
        }
    }
 
}
 
 
 
package  
{
    import flash.display.Sprite;
    import flash.events.*;
    
    [SWF(backgroundColor="#ff0000"width="300"height="50")]
    public class CustomEventTest extends Sprite
    {
        // CustomEvent 를 전달할 객체를 생성한다.
        private var dispatcher:EventDispatcher = new EventDispatcher();
        private var data:Object = { data1:"data1", data2:"data2" };
        
        public function CustomEventTest() 
        {
            stage.addEventListenerMouseEvent.CLICK, clickHandler );
            dispatcher.addEventListener( CustomEvent.CALL, dataHandler );
        }
        
        // stage 클릭 시 이벤트를 dispatch 하고,
        private function clickHandler( e:MouseEvent ):void
        {
            dispatcher.dispatchEventnew CustomEvent( CustomEvent.CALL, data ) );
        }
        
        // 이벤트와 함께 전달된 데이터들을 출력.
        private function dataHandler( e:CustomEvent ):void
        {
            trace"1번째데이터: ",e.data.data1, "2번째데이터: ",e.data.data2 );
        }
    }
 
}
 
 
cs


: