0

我已经设置了一个自定义事件(见下文),但是当我在我的主类中侦听该事件并且它从子类中分派时,它永远不会被捕获。

试过:

this.b.addEventHandler(GameLaunchEvent.GAME_LAUNCH_EVENT, this.eventHandler)


package com.thom.events 
{
    import flash.display.MovieClip;
    import flash.events.Event;

    /**
     * ...
     * @author 
     */
    public class LaunchEventAbstract extends Event
    {
        public var parent:MovieClip;
        public function LaunchEventAbstract(type:String, parent:MovieClip = null) 
        {
            super(type, true);  
            this.parent = parent;
        }   
    }
}

package com.thom.events 
{
    import flash.display.MovieClip;
    import flash.events.Event;

    /**
     * ...
     * @author
     */
    public class GameLaunchEvent extends LaunchEventAbstract 
    {
        public static const GAME_LAUNCH_EVENT:String = "GameLaunchEvent";
        public function GameLaunchEvent(parent:MovieClip = null) {
            trace("GameLaunchEvent");
            super(GAME_LAUNCH_EVENT, parent);
        }
    }

}

//example code
package {
   import com.thom.events.*;
   public class A extends MovieClip{
         public var b:B;
         public function A(){
              addEventListener(GameLaunchEvent.GAME_LAUNCH_EVENT, eventHandler);
              this.b = new B();
              addChild(b);
         }
         public function eventHandler(e:GameLaunchEvent){
             trace("Success");
         }
    }
}
package {
    import com.thom.events.*;
    public class B extends MovieClip{
         public function B() {
              dispatchEvent(new GameLaunchEvent(this));
         }
     }
}
4

2 回答 2

3

事件冒泡是你想要的:

Parent:
childClip.addEventListener('CUSTOM_EVENT', handler);

Child:
this.dispatchEvent(new Event('CUSTOM_EVENT', true, true));

这会将其传播到显示列表中。直接监听加载器的问题是它看起来像这样:

Loader
  - Content

如果没有冒泡,您将不得不直接收听内容,这是没有意义的,因为在加载内容之前您无法收听。

于 2010-10-04T19:06:04.583 回答
0

您实际上并不需要将 parent 作为参数传递,特别是如果您打算在 parent 本身中收听您的事件。您可以做的是将调度程序作为参数传递,并让调度程序同时调度和侦听事件。

包裹
{
   导入 flash.display.MovieClip;
   导入 flash.events.Event;
   导入 flash.events.EventDispatcher;

   公共类 A 扩展了 MovieClip
   {
         公共变量 b:B;
         私有 var _dispatcher:EventDispatcher = new EventDispatcher();

         公共函数 A()
         {
         _dispatcher.addEventListener('test', eventHandler);   
             this.b = new B(_dispatcher);
         }

         公共函数事件处理程序(e:事件):无效
         {
             跟踪(“成功”);
         }
    }
}


包裹
{
    导入 flash.display.MovieClip;
    导入 flash.events.Event;
    导入 flash.events.EventDispatcher;

    公共类 B 扩展了 MovieClip
    {
        私人 var _dispatcher:EventDispatcher;

        公共函数 B(调度程序:EventDispatcher)
        {
            this._dispatcher = 调度员;
            _dispatcher.dispatchEvent(new Event('test'));
        }

    }
}
于 2010-10-03T19:44:50.807 回答