ActionScript3.0 勉強部屋

自分が勉強して覚えた、Flash(flex)のActionScript3.0の使い方を、後から見てわかるようにデータベース化していこうというサイトです。 他にもHTMLやCSSのことについても触れていく予定です。

プロフィール 

Author:mayu
FC2ブログへようこそ!

カレンダー 

04 | 2012/05 | 06
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -

カテゴリー 

最近の記事 

最近のコメント 

最近のトラックバック 

月別アーカイブ 

ブログ全記事表示 

全ての記事を表示する

おすすめ 

アフィリエイト・SEO対策

サーバー・ホスティング

無料blog

ホームページ

入室してくださった方の数 

スポンサーサイト 

上記の広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書く事で広告が消せます。
--/--/-- --:--|スポンサー広告
 

ArgumentError: Error #2025: 指定した DisplayObject は呼び出し元の子でなければなりません。 

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);
}


}

}

2008/01/10 18:48|ActionScript3.0TB:0CM:5
 

外部swfファイルの読み込みと制御 

外部のswfファイルをActionScript3.0で読み込みを行い、呼び出し側で制御したい、と思いいろいろ調べたりしてみました。

外部swfファイルは、Loaderクラスで読み込みできます。
Loaderクラスを作成して、loadメソッドを呼び出すことで読み込みます。
loadメソッドには、ファイルのパスを引数に渡しますが、そのパスはURLRequestクラスの形で渡す必要があります。

この辺の話は結構いろいろなところで書かれているのですが。

その読み込んだswfのタイムライン制御ってどうしたらいいのだろう?といろいろ試行錯誤してみたのです。

Loaderクラスのプロパティには、
・contentLoaderInfo
・content
というものがあります。

仕様によると、contentLoaderInfoは、ロードしたswfの
ロードの進行状況、
ロードする側とロードされたコンテンツの URL、
メディアの総バイト数、
メディアの規格高さと幅などが含まれるらしい。

contentは、ロードしたswfの
ルート表示オブジェクトが含まれるらしい。


読み込んだswfの制御は、このcontentを介して行うのです。

例えばこんな感じ。


package {
import flash.display.Sprite;
import flash.display.MovieClip;
import flash.display.Loader;
import flash.events.Event;
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("loading.swf");
//ロードが完了したら、完了時実行メソッドを呼び出すように指定
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadHandler);
//ファイル読み込み開始
loader.load(url);
}

//ロード完了時実行メソッド
private function loadHandler(event:Event):void {
//ステージにロードしたswfを表示
addChild(loader);
//読み込んだswfをMovieClipに型変換してmcに渡す
mc = loader.content as MovieClip;
//読み込んだswfのタイムライン制御をmcを使って行う
mc.stop();
}


}

}


重要なのは、addChildで表示させるもの。
今回のaddChild(loader);
読み込んだswfそのものを表示しているわけではなくて、Loaderクラスを表示しています。
Loaderクラスは、1つの表示オブジェクトしか保持できないので、他のswfをロードすると、今までのものは消えてしまいます。

しかし、addChild(loader.content)に変えてみると、他のswfをロードしても今までのものは消えず、新たに読み込んだものは表示されません。

Loaderはコンテナなのに対して、Loader.contentはswfそのもののルート情報なわけですね。
2008/01/10 18:19|ActionScript3.0TB:0CM:5
 
ブログ内検索 

Amazon商品一覧【新着順】 

RSSフィード 

リンク 

このブログをリンクに追加する

Amazon人気商品 

ブロとも申請フォーム 

この人とブロともになる

Copyright(C) 2006 ActionScript3.0 勉強部屋 All Rights Reserved.
Powered by FC2ブログ. FC2ブログ template designed by 遥かなるわらしべ長者への挑戦.