[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