Loaderクラスの実験をいろいろしていたら、
ArgumentError: Error #2025: 指定した DisplayObject は呼び出し元の子でなければなりません。
というエラーが出て、かなり悩まされました。
どんなときにエラーが出ているのか調べていったら、
addChild(Loader.content);
をしている状態で、unloadやloadメソッドを呼び出すとこのエラーが出るのです。
ロードしたswfを、新たに作ったMovieClipオブジェクトなどに保持して制御したいと思ったのですが・・・。
クリックイベントで再ロードするように設定したのですが、クリック一回目でエラー表示され、もう一度クリックするとロードされるのです。
なぞです・・・。
いろいろ検証してみましたが、わかりませんでした。
ちなみに、エラーの出るソースはこちら。
package { import flash.display.Sprite; import flash.display.MovieClip; import flash.display.Loader; import flash.events.Event; import flash.events.MouseEvent; import flash.net.URLRequest;
public class LoaderTest2 extends Sprite { private var loader:Loader; private var url:URLRequest; private var mc:MovieClip; //コンストラクタ public function LoaderTest2() { //初期化メソッド呼び出し init(); } //初期化メソッド private function init():void { //ローダーオブジェクトのインスタンス作成 loader = new Loader(); //読み込んだswfを制御するMovieClip作成 mc = new MovieClip(); //ファイルへのパスをURLRequestに渡す。 url = new URLRequest("Test.swf"); //ロードが完了したら、完了時実行メソッドを呼び出すように指定 loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadHandler); //ファイル読み込み開始 loader.load(url); } //ロード完了時実行メソッド private function loadHandler(event:Event):void { addChild(loader); //ステージにロードしたswfを表示 //読み込んだswfをMovieClipに型変換してmcに渡す mc = loader.content as MovieClip; loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, loadHandler); addEventListener(MouseEvent.CLICK, clickHandler); } private function clickHandler(event:Event):void { loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadHandler2); loader.load(new URLRequest("Test2.swf")); addChild(mc); } private function loadHandler2(event:Event):void { trace("完了"); mc.addChild(loader.content); } } }
|