[AS]外部swfをLoaderで読み込んだ後にunload()で消すときは子swfの中身も綺麗に消す
外部SWFを読み込んで、それを破棄するときはunloadして、removeChildしてnullにするのが良いらしい。
親swfにはこんな感じでかく。
loader.unload() removeChild(loader); loader = null();
親swfで子swfをunload()するとに子swfはaddEventListenerでイベントを受けとれる。
子swfでこんな感じ
this.loaderInfo.addEventListener(Event.UNLOAD , unloadHandler);
そこで子swfで設定した参照なり、イベントは破棄してあげないといけない。
例)
ステージにm0_mc、m1_mcというインスタンス名のMCを二個配置。
m0_mcクリックでm子swfの読み込み、m1_mcクリックで子swfを破棄
親swfのドキュメントクラス
package { //親swfのドキュメントクラス import flash.display.Loader; import flash.net.URLRequest; import flash.display.LoaderInfo; import flash.events.Event; import flash.events.MouseEvent; import flash.display.MovieClip; public class MainP extends MovieClip { var loader:Loader public function MainP() { m0_mc.addEventListener(MouseEvent.CLICK , movieOn); m1_mc.addEventListener(MouseEvent.CLICK , movieOut); } private function movieOn(e:MouseEvent):void { trace("movieOn"); //子SWFの読み込み loader= new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE,xComplete); var urlReq:URLRequest = new URLRequest("child.swf"); loader.load(urlReq); } private function movieOut(e:MouseEvent):void { loader.unload(); removeChild(loader); loader = null; } public function xComplete(e:Event):void { addChild(loader); } } }
子swfのドキュメントクラス
package { //子swfのドキュメントクラス import flash.display.MovieClip; import flash.events.Event; public class Child extends MovieClip { public function Child() { trace("child"); this.addEventListener(Event.ADDED_TO_STAGE, addc); this.addEventListener(Event.REMOVED_FROM_STAGE, removec); this.loaderInfo.addEventListener(Event.UNLOAD, unloadc); } function addc (e:Event):void { trace("child add"); } function removec (e:Event):void { trace("child remove"); } function unloadc (e:Event):void { trace("child unload"); } } }
Tweet