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

特に親自体でイベントをリッスンする場合は、親をパラメーターとして渡す必要はありません。できることは、ディスパッチャーをパラメーターとして渡し、ディスパッチャーにイベントのディスパッチとリッスンの両方を許可することです。

パッケージ
{{
   インポートflash.display.MovieClip;
   インポートflash.events.Event;
   インポートflash.events.EventDispatcher;

   パブリッククラスAはMovieClipを拡張します
   {{
         public var b:B;
         private var _dispatcher:EventDispatcher = new EventDispatcher();

         パブリック関数A()
         {{
         _dispatcher.addEventListener('test'、eventHandler);   
             this.b = new B(_dispatcher);
         }

         パブリック関数eventHandler(e:Event):void
         {{
             trace( "成功");
         }
    }
}


パッケージ
{{
    インポートflash.display.MovieClip;
    インポートflash.events.Event;
    インポートflash.events.EventDispatcher;

    パブリッククラスBはMovieClipを拡張します
    {{
        private var _dispatcher:EventDispatcher;

        パブリック関数B(dispatcher:EventDispatcher)
        {{
            this._dispatcher=ディスパッチャー;
            _dispatcher.dispatchEvent(new Event('test'));
        }

    }
}
于 2010-10-03T19:44:50.807 に答える