여러 무비 클립에서 개최되는 일련의 MovieClip을 통해 무대에서 듣고 상호 작용할 수있는 사용자 정의 무비 클립을 전달합니다. 스테이지 (또는 Object)에 이벤트 유형에 관계없이 이벤트 리스너를 추가 할 수 있습니까?전역 이벤트를위한 플래시 이벤트 리스너
예를 들어, 자식, 또는 그 자식 중 하나 또는 자식 중 하나에서 전달 된 EVENT.COMPLETE
을 수신 대기하는 이벤트 리스너를 스테이지에 추가 할 수 있습니까?
여러 무비 클립에서 개최되는 일련의 MovieClip을 통해 무대에서 듣고 상호 작용할 수있는 사용자 정의 무비 클립을 전달합니다. 스테이지 (또는 Object)에 이벤트 유형에 관계없이 이벤트 리스너를 추가 할 수 있습니까?전역 이벤트를위한 플래시 이벤트 리스너
예를 들어, 자식, 또는 그 자식 중 하나 또는 자식 중 하나에서 전달 된 EVENT.COMPLETE
을 수신 대기하는 이벤트 리스너를 스테이지에 추가 할 수 있습니까?
찾고있는 것은 이벤트 버블 링입니다. 버블 링을 사용하려면 새 이벤트의 세 번째 속성을 true로 설정하고 이벤트를 스테이지로 전달하는 객체부터 시작하여 표시 목록을 버블 링합니다. 자세한 정보는 공식 문서를 참조하십시오.
타일러.
편집 : 변경을
"글쎄 객체가 이벤트를 전달"하는 "단계부터"이것이 내가 결코 이해하지 못할거야 뭔가 ... 사람들은 항상 무대에서 이벤트를 캡처하는 이벤트를 버블 링 사용하는 이유는 무엇입니까?
문서를 보면 이벤트가 스테이지에서 대상 객체 (캡처 단계)로 전파 된 다음 버블 링을 사용하면 거품이 발생합니다.
Main.as
package {
import flash.display.Sprite;
public class Main extends Sprite
{
public function Main()
{
var c:Circle = new Circle();
var r:Rect = new Rect();
c.addChild(r);
addChild(c);
addEventListener(CustomEvent.CUSTOM, customEventHandler, true);//don't forget third parameter to use capture
}
private function customEventHandler(e:CustomEvent):void
{
trace(e.eventPhase == EventPhase.CAPTURING_PHASE);//shows true
}
}
}
Circle.as
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
public class Circle extends Sprite
{
public function Circle()
{
super();
init();
}
private function init():void
{
with(graphics)
{
beginFill(0xFF0000);
drawCircle(25, 25, 50);
endFill()
}
}
}
}
Rect.as
package
{
import flash.display.Sprite;
import flash.events.MouseEvent;
public class Rect extends Sprite
{
public function Rect()
{
super();
init();
}
private function init():void
{
with(graphics)
{
beginFill(0x000000);
drawRect(0, 0, 25, 25);
endFill();
}
addEventListener(MouseEvent.CLICK, mouseClickHandler);
}
private function mouseClickHandler(e:MouseEvent):void
{
dispatchEvent(new CustomEvent(CustomEvent.CUSTOM));
}
}
}
CustomEvent.as
package
{
import flash.events.Event;
public class CustomEvent extends Event
{
public static const CUSTOM:String = "custom";
public function CustomEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
}
}
}
안녕 PeZ, 이것은 마우스 이벤트와 함께 많은 경우에 절대적으로 정확합니다. 그러나 포스터에서 설명한 상황에서 버블 링을 true로 설정해야합니다. 이 경우 수동 이벤트 전달, Event.COMPLETE는 스테이지가 아닌 자식 클립에서 시작하므로 발생하는 실제 캡처 단계가 없기 때문입니다. –
타일러, 귀하의 진술이 잘못되었다고 생각합니다. 이벤트를 전달하는 객체가 스테이지에있는 한 수동 이벤트 전달 인 경우에도 캡처 단계가 있습니다. 내 예제를 살펴 보겠습니다.이 이벤트는 수동 이벤트 전달이며 내 맞춤 이벤트에서는 버블 링이 false로 설정되어 있습니다. –
PeZ, CustomEvent가 어떤 유형의 이벤트를 확장합니까? MouseEvents는 기본적으로 거품을 발생 시키지만 이벤트는 거품을 발생시키지 않습니다. 이 내용을 CustomEvent 핸들러에 추가하여 표시되는 내용을 확인할 수 있습니까? 모든 사람에게이를 명확히하는 데 도움이되는 성격입니다. 추적 (e.eventPhase == EventPhase.CAPTURING_PHASE); –
완벽한을 :
그래서 그냥 ... 캡처를 사용! 나는 항상 "버블 링 (Bubbling)"이라는 용어를 접하게되었지만, 그것이 무엇을 의미하는지 이해하지 못했습니다. +1 –