crtl
イベントをディスパッチするときにバブルオプションをtrueに設定することで、外部swfからディスパッチされたイベントを表示オブジェクトに受信させることができます。SWFB.swfがSWFA.swfにロードされる次の例を見てください。
SWFB:
package swfb
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.TimerEvent;
import flash.utils.Timer;
public class Main extends Sprite
{
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}// end function
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
const SECOND:int = 1000;
var timer:Timer = new Timer(5 * SECOND, 1);
timer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);
timer.start();
}// end function
private function onTimerComplete(e:TimerEvent):void
{
dispatchEvent(new TimerEvent(TimerEvent.TIMER_COMPLETE, true, true));
}// end function
}// end class
}// end package
SWFA:
package swfa
{
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.TimerEvent;
import flash.net.URLRequest;
public class Main extends Sprite
{
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}// end function
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaderComplete);
loader.load(new URLRequest("swf/SWFB.swf"));
}// end function
private function onLoaderComplete(e:Event):void
{
var loaderInfo:LoaderInfo = LoaderInfo(e.target);
var container:Sprite = new Sprite();
container.addChild(loaderInfo.content);
container.addEventListener(TimerEvent.TIMER_COMPLETE, onContainerTimerComplete);
addChild(container);
}// end function
private function onContainerTimerComplete(e:TimerEvent):void
{
trace("TIMER COMPLETE!");
e.stopPropagation();
}// end function
}// end class
}// end package
SWFB.swfはTimer
、ステージに追加されてから5秒後にイベントをディスパッチします。イベントをディスパッチすると、バブルとキャンセル可能なオプションがtrueに設定されます。
SWFA.swfでは、SWFB.swfがロードされてから、と呼ばれる表示オブジェクトコンテナに追加されますcontainer
。Timer
次に、ディスパッチされるSWFB.swfからのイベントをリッスンするイベントリスナーがコンテナーに追加されます。ディスパッチされると、onContainerTimerComplete()
イベントハンドラーはTimerイベントのstopPropagation()
メソッドを呼び出して(その名前が示すように)イベントの伝播を停止します。