مستمع حدث فلاش للأحداث العالمية
سؤال
لدي سلسلة من movieclips، التي عقدت داخل العديد من movieclips، التي ترسل حدث تحريك مخصص وأود أن الاستماع إلى المرحلة للاستماع إليها والتفاعل معها. هل هناك طريقة للإضافة إلى المرحلة (أو أي كائن) مستمع حدث لأي حدث من نوع واحد، بغض النظر عن المكان الذي تم إرساله منه؟
على سبيل المثال، هل يمكنني إضافة إلى مرحلة مستمع حدث للاستماع لأي EVENT.COMPLETE
التي تم إرسالها من طفل، أو أي من أطفالها، أو أي شخص من أطفال الأطفال؟
نصائح أخرى
حسنا، هذا شيء لن أفهمه أبدا ... لماذا يستخدم الناس دائما الأحداث الفقاعية لالتقاط الأحداث على المسرح؟
إذا نظرت إلى DOC، فسيتم نشر الحدث من المرحلة إلى الكائن الهدف (مرحلة الالتقاط) ثم فقاعات إذا قمت بتمكين الفقاعات.
لذلك ... فقط استخدم التقاط:
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);
}
}
}
لا تنتمي إلى StackOverflow