dispatchEvent의 원리(본문은 다음과 같다)

2241 단어 Dispatch
먼저 사용자 정의 이벤트 유형 My Event가 있다고 가정하십시오.OPEN_QQ(QQ를 여는 사용자 정의 이벤트)는 먼저 디스플레이 대상을 정의합니다. (모든 디스플레이 대상은 이벤트 디스패치의 직접 또는 간접 하위 클래스이고 이벤트 디스패치에 디스패치 이벤트 방법이 정의되어 있음을 주의하십시오)
var a:Sprite = new Sprite(); 
a.addEventListener(MyEvent.OPEN_QQ, openqq);  // QQ 

가장 관건적인 부분이 왔다. 당신이 qq를 열었을 때 이론적으로 말하자면 당신은 qq를 열었다는 사건을 촉발했다.하지만 My Event. 때문에.OPEN_QQ 이벤트는 사용자 정의 이벤트로 플래시 시스템은 a 대상에게 My Event가 발생했음을 알릴 수 없습니다.OPEN_QQ 이 이벤트의 경우 My Event가 발생했음을 a에게 알려야 합니다.OPEN_QQ 이 이벤트의 메커니즘으로 디스패치 이벤트가 등장했습니다. 아래 문장 3과 같이 언제든지 호출하면 플래시가 a에게 My 이벤트가 발생했음을 알려 줍니다.OPEN_QQ 이 이벤트는 이벤트 처리 함수를 실행할 수 있습니다. (여기는 Openqq입니다.) 그래서 Openqq (e: My Event) 함수가 실행됩니다.
3、a.dispatchEvent(new MyEvent(MyEvent.OPEN_QQ));

다음은 이 두 줄 코드에 대해 디스패치 이벤트의 원리를 분석하고자 한다. 이곳의 a는 원리에서 언급한 호출자가 디스패치 이벤트(Object) 방법의 매개 변수인 것을 우리는 알고 있다. 매개 변수는 반드시 이벤트 유형이어야 하기 때문에 매개 변수 Object는 이벤트류의 실례가 되어야 하기 때문에 위 코드에서 new My 이벤트(My Event.OPEN QQ)에서 My Event의 클래스 정의는 다음과 같은 형식이어야 한다는 것을 알 수 있다.
public class MyEvent extends Event{
    // , QQ 
    public static const OPEN_QQ:String = "openQQ";
    // 
    public function MyEvent(type:String){
        super(type);
    }
}

위의 My Event는 사용자 정의 이벤트 클래스, My Event입니다.OPEN_QQ는 그 중의 사용자 정의 이벤트입니다. 우리는 일반적으로 시스템 이벤트에서 디스패치 이벤트를 호출해서 사용자 정의 이벤트의 발생을 알립니다. (물론 당신은 어디서든 가능합니다.)예: 내가 무대를 눌렀을 때 a에게 My Event가 발생했다고 알렸다.OPEN_QQ 이벤트의 전체 절차는 다음과 같습니다.
var a:Sprite = new Sprite(); 
a.addEventListener(MyEvent.OPEN_QQ, openqq);
stage.addEventListener(MouseEvent.CLICK, handle); // 
private function handle(e:MouseEvent):void{
    // , a qq ,a openqq 
    a.dispatchEvent(new MyEvent(MyEvent.OPEN_QQ));
}
private function openqq(e:MyEvent):void{
    // qq , ...
}

물론 위의 사용자 정의 이벤트는 상응하는 이벤트 속성을 추가할 수 있다. 예를 들어
public class MyEvent extends Event{
    // , QQ 
    public static const OPEN_QQ:String = "openQQ";
    // 
    public var myAttribute:String = "Test";
    // 
    public function MyEvent(type:String){
        super(type);
    }
}

좋은 웹페이지 즐겨찾기