dispatchEvent의 원리(본문은 다음과 같다)
2241 단어 Dispatch
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);
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Reducing Dynamic Dispatch지난 포스트에서 소개했던 final 키워드는 Reducing Dynamic Dispatch 중 한가지 방법이라고 말씀드렸었는데요, 이번 포스트에서는 Dynamic Dispatch와 그 외에 다른 방법에 대해 알아보려...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.