- ベストアンサー
外部画像の表示について
- Flash初心者ですが、外部画像を表示する方法について質問です。
- 質問内容は、特定のフレームごとに画像を切り替える方法と、条件式を使った画像表示に関するものです。
- ご教示いただけると幸いです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
MovieClip.loadMovieメソッドを使うのではなく, MovieClipLoader()クラスのメソッドを使えばできます。 1フレーム目のスクリプト例 ---------------------------------------------------- // ファイルネームの登録(※可変) my_file = "slide1"; // MovieClipLoaderインスタンスの生成 var my_mcl:MovieClipLoader = new MovieClipLoader(); // リスナーオブジェクト生成 var oListener:Object = new Object(); // ロード失敗時の処理 oListener.onLoadError = function(target_mc:MovieClip, error_str:String, nHttpStatus:Number) { // 外部SWFファイル"slide1.jpg"をインスタンスpictureにロード my_mcl.loadClip(my_file+".jpg", picture); }; // イベントリスナーの登録 my_mcl.addListener(oListener); // 外部SWFファイル"slide1.swf"をインスタンスpictureにロード my_mcl.loadClip(my_file+".swf", picture); ---------------------------------------------------- Flash MX 2004(Flash Player 7)以上 です。 取り急ぎ失礼します。 SWF、JPEGファイルを読み込みたい(FlashMX2004以降) http://hakuhin.hp.infoseek.co.jp/main/as/import.html#IMPORT_03 MovieClipLoaderクラスについて http://www.fumiononaka.com/TechNotes/Flash/FN0501003.html
その他の回答 (1)
#1です。 朝回答しないと,夜まで回答できないので, #1では出勤寸前にドタバタで回答しました。 それで, スクリプト書いた→SWFとJPEG作った→動かした→動いた→回答した という作業を10分くらいで済ませました。 間違った回答をしたわけではありませんが, 妙なゴミが入っていたり, SWF も JPEG も両方ともなかった場合の処理が抜けていたり, フレーム2 以降のことを考えて作ったものではありませんので, もう少しちゃんとした形のスクリプトを回答し直します。 基本的に#1と骨子は全く同じです。 ゴミを取ったのと使い勝手を考えたものです。 1フレーム目のスクリプト例 (コピペ可能) -------------------------------------- // とりあえずストップ this.stop(); // MovieClipLoaderインスタンスの生成 var my_mcl:MovieClipLoader = new MovieClipLoader(); // リスナーオブジェクト生成 var oListener:Object = new Object(); // イベントリスナーの登録 my_mcl.addListener(oListener); // ファイルをロードするユーザー定義関数の定義 function loadFile(my_file:String) { // ロード失敗時の処理 oListener.onLoadError = function() { if (flag == "s") { // 外部JPGファイルをインスタンスpictureにロード my_mcl.loadClip(my_file+".jpg", picture); // flag を j に flag = "j"; // ※エラー処理が不要であればこの↓ else 文をカット } else if (flag == "j") { // インスタンス名my_textのダイナミックテキストにエラー表示 my_text.text = "SWFもJPEGもありません。"; } }; // 変数 flag の値を "s" にする var flag:String = "s"; // 外部SWFファイル"slide1.swf"をインスタンスpictureにロード my_mcl.loadClip(my_file+".swf", picture); // インスタンス名my_textのダイナミックテキストを初期化 my_text.text = ""; } // ファイルをロードするユーザー定義関数の実行 loadFile("slide1"); -------------------------------------- 2フレーム目のスクリプト例 -------------------------------------- // ファイルをロードするユーザー定義関数の実行 loadFile("slide2"); -------------------------------------- 以降3フレーム目なら, loadFile("slide3"); などのように,".swf" や ".jpg" を取ったファイル名を引数にして, フレーム1 の ユーザー定義関数 loadFile(); を実行させる形のものです。 なお,nextボタン と backボタンは 書く必要はないと思いますが次のような感じでしょうね。 nextボタンのスクリプト例 -------------------------------------- on (release) { this.nextFrame(); } -------------------------------------- backボタンのスクリプト例 -------------------------------------- on (release) { this.prevFrame(); } -------------------------------------- ※作成環境: Flash MX 2004以上 パブリッシュ設定: ActionScript 2.0 動作環境: Flash Player7以上 です。 #1のままだと, SWF も JPEG もなかった場合, Flashが,存在しない JPEG のロードを試み続けるので,よろしくない形です。 ですから変数 flag を立てて,両方なかった場合は, 「my_text」というインスタンス名のダイナミックテキストにエラー表示をするしくみのものに変えました。 ですから,「my_text」というインスタンス名のエラー表示用のダイナミックテキストを, ムービークリップ picture より上のレイヤーに作ってくだされば,指定した文字列がエラー表示されます。 もしエラー表示が不要でしたら, 「my_text」というインスタンス名のダイナミックテキストを用意せずに, // ※エラー処理が不要であればこの↓ else 文をカット } else if (flag == "j") { // インスタンス名my_textのダイナミックテキストにエラー表示 my_text.text = "SWFもJPEGもありません。"; この4行を削除してください。 するとSWFもJPEGも両方ともなかった場合のエラー処理は行われません。 このエラーについてですが, > ・もしくは、エラーを無視して次の行へいくという > プログラムはあるのでしょうか。 と書かれている意味がよくわかりません。 Flash は基本的にエラーが起きても何事もなかったかのようにそのことは無視して次の処理へと進みます。 Flash はいつもポーカーフェイスです。 ですから, 上のスクリプトのように「エラーを出させること」の方に苦労するのです。 loadMovie だと,なかなか簡単にエラーの表情を見せてくれないので (出そうと思ったら出せますが普通ではありません), MovieClipLoaderクラスの onLoadError イベントハンドラで, エラーをわざわざ取り出しているのです。 エラーの表情を見せるときは, 本当にFlash Payer が苦悩したときです。 for 文などが,(半)無限ループに入ったときなどに, 死にかけ寸前で 「このまま処理を続けると,どうのこうの…」 「処理を続行する?しない?」というような困窮のダイアログが出てきます。 loadMovie で SWF や JPEG がないくらいのエラーでは, ファイルが表示されないだけで,何事もなかったかのように次々に処理を続けます。 それが,Flash がスマートに見える1つの理由であり,逆に難しくて恐い面です。 参考URLは#1と同じですが1つ増えて…。 SWF、JPEGファイルを読み込みたい(FlashMX2004以降) http://hakuhin.hp.infoseek.co.jp/main/as/import.html#IMPORT_03 MovieClipLoaderクラスについて http://www.fumiononaka.com/TechNotes/Flash/FN0501003.html 関数 http://homepage3.nifty.com/ginga-b/MX/function.html
お礼
sassakun様、早速のご回答ありがとうございます。 お礼が遅くなりましてすいません。 MovieClip.loadMovieメソッドを使うのではなく, MovieClipLoader()クラスのメソッドを使えばいいのですね。 非常に詳しく分かりやすい回答で理解できました。 ありがとうございました。