- 締切済み
外部ファイルの読み込みで
初心者ですがよろしくお願いいします。 外部ファイルの読み込みでLoadMovie("~.jpg")を使用しているのですが 例えばA.jpgを読み込もうとしたけれど A.jpgが見つからなかった場合の処理を設定するには どのような方法があるのでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
#1です。 > 残念ながら、MXを使用していますので > MovieClipLoaderは使用できないようです……。 そうでしたか。 一応私なりに考えてみました。 しばらく待ってみてロードが完了しなければ→何かを実行 の方法例の1つを書きます。 ステージ上には,「my_mc」というインスタンス名の, 空(カラ)のムービークリップを用意し, そこに外部JPEG A.jpg を読み込むものとします。 まず,フレームに書くスクリプト例です。 ---------------------------------------- // ロードしたかどうかのフラグ load_flag の初期化 load_flag = 0; // my_mc に外部 JPEG ファイルを読み込む this.my_mc.loadMovie("A.jpg"); // // 一定時間待って処理する関数を定義 function mySyori() { if (load_flag == 0) { trace("★ロード失敗★"); } // setIntervalを解除 clearInterval(myID); } // // 200ミリ秒(2秒)待って mySyori を実行 myID = setInterval(mySyori, 2000); ---------------------------------------- これで, this.my_mc.loadMovie("A.jpg"); を実行した後2秒後に, function mySyori() というユーザー定義関数が実行されます。 その function mySyori() の中身は, もし 変数 load_flag が 0 であった場合, 「★ロード失敗★」を trace するというものです。 ですから, もし2秒以内に読み込まれた場合, load_flag の値を 0 以外の値にしてやれば, trace("★ロード失敗★"); は実行されないということになります。 したがって,ロードされた場合, load_flag の値を 0 以外にするスクリプトが必要になりますが, これは A.jpg を読み込む 「my_mc」 に書きます。 次のコードは, インスタンス名「my_mc」の空のムービークリップに書くスクリプトです。 --------------------------------------------- onClipEvent (load) { // もしこのムービークリップの幅が10pxより大きければ if (this._width>10) { _root.load_flag = 1; } } --------------------------------------------- 空の状態であれば,「my_mc」の横幅が 10px になっているはずはありません。 もし 10px 以上の JPEG が読み込まれれば, load_flag の値を 1 にします。 これで, フレームのスクリプトと,ムービークリップのスクリプトが連動して, A.jpgを読み込もうとしたけれど A.jpgが見つからなかった場合, trace("★ロード失敗★"); が実行されるしくみが完成します。 traceはおそらくご存じだと思いますが, 「制御」→「ムービープレビュー」で動作確認をしてみたとき, 何かを出力表示させる関数です。 ですから,「A.jpg」を存在させたり,名前を変えたりして繰り返しムービープレビューしてみると, ちゃんと動作するかどうかがわかります。 画像のファイル容量や閲覧する側の回線によって, 2秒間の間に A.jpg が読み込まれるかどうかはわかりませんが, もし,2秒の間に読み込まれるべきものであったとして, A.jpg が存在しない場合は,一応うまく行くはずの方法です。 他の方法はないものか考えてみましたが, 私が知っている範囲では, もっと良い方法は考えつきませんでした。
そういうことをする場合は, loadMovie ではなく,MovieClipLoader クラスのメソッドを使用するのが普通です。 ただし,Flash MX 2004 以上をお持ちであり, Flash Player 7 以上の SWF をパブリッシュする必要がありますが。 例として, my_mc というインスタンス名のムービークリップに, A.jpg をロードする場合についての MovieClipLoader クラスのメソッドを使用したスクリプトを書きます。 つまり,loadMovie メソッドでする場合は, this.my_mc.loadMovie("A.jpg"); この↑ようになる場合のスクリプトです。 ------------------------------------------------- // my_mcl という MovieClipLoader クラスのインスタンスを作成 var my_mcl = new MovieClipLoader(); // my_obj というリスナーオブジェクトを作成 var my_obj = new Object(); // ロードできなかった(見つからなかった)ときの処理 my_obj.onLoadError = function(targetMC, errorCode, httpStatus) { trace("targetMC ="+targetMC); trace("errorCode ="+errorCode); trace("httpStatus ="+httpStatus); }; // イベントリスナーの登録 my_mcl.addListener(my_obj); // 外部ファイルのロード my_mcl.loadClip("A.jpg", my_mc); ------------------------------------------------- その他たくさんの例を書いてくれています↓。 「MovieClipLoaderクラスについて」 http://www.fumiononaka.com/TechNotes/Flash/FN0501003.html onLoadError に関しては ヘルプ の方がわかりやすいです。 Flashドキュメンテーション onLoadError (MovieClipLoader.onLoadError イベントリスナー) http://livedocs.macromedia.com/flash/8_jp/main/00002544.html Flash MX 以下しか持たれていなかったら難しいですね。 ロード完了後→何かを実行 でしたら loadMovie でも仕組みをつくれば簡単にできますが, ロード失敗→何かを実行 となると...., しばらく待ってみてロードが完了しなければ→何かを実行 みたいに工夫する必要があると思います。
お礼
非常に詳しい解説ありがとうございます。 残念ながら、MXを使用していますので MovieClipLoaderは使用できないようです……。 >しばらく待ってみてロードが完了しなければ→何かを実行 この方法でやってみようと思います。ありがとうございました。