- ベストアンサー
外部画像の読み込み
こんにちは。 いつもココではお世話になっております。 今回は、Flashの外部画像の読み込みについてです。 外部から画像を読み込み、スライドショーを行うものを作っているのですが、 一番はじめにすべての外部ファイルを読み込み、その読み込んでる時だけローダーを表示させたいのです。 画像の枚数は指定は無いです。 1,2,3....などと連番にして読み込むようにしています。 どなたかアドバイス等頂けましたらよろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 > ご回答していただいた写真の枚数は5枚でしたが、 > 枚数制限を無くし、連番での画像の加減で > ロードさせるにはどうすればいいのでしょう。 例を 5 にしただけですから,5 の部分を全て 10 にすれば 10枚 になります。 画像の枚数が変わる旅に一々変更するのが面倒な場合は, 5 を何かの変数に入れておいて, その変数で数を指定すれば良いと思います。 例: // 画像の枚数を5枚に設定(5は変える) gazouNum = 5; // load_mc1~gazouNum を作成(本当は手動で作成すると思いますが) for (var i:Number = 1; i<=gazouNum; i++) { // 空のムービークリップ load_mc1~gazouNum を深度 i に作成 var _mc:MovieClip = this.cr … ~ 略 ~ // ロード中 表示のテキストフィールドを作成(本当は手動で作成...) var _txt:TextField = createTextField("load_txt", gazouNum+1, 120, 100, 60, 20); ~ 略 ~ // カウントが gazouNum になったら if (cnt == gazouNum) { // load_mc1~gazouNum を表示 for (i=1; i<=gazouNum; i++) { me["load_mc"+i]._visible = true; ~ 略 ~ // 1~gazouNum.jpg を load_mc1~gazouNum をターゲットにしてロード for (i=1; i<=gazouNum; i++) { _mcl.loadClip(i+".jpg", "load_mc"+i); } - - - - - - - - - - - - - - > 連番での画像の加減で > ロードさせるにはどうすればいいのでしょう。 これって,ひょっとして, 用意した画像の最終番号を自動取得するというような意味でしょうか? それだと普通 ActionScript では無理ですよ(しません)。 PHP などであるフォルダ内にある画像のファイル名を取得して, なんとか最終番号を判別するようなプログラムが必要になります。 また, その判別した最終番号をFlashで受け取る別のしくみも必要です。 #1 で書いたように一気に5枚のJPEGをロードするのではなく, 1.jpg,2.jpg,3.jpg,… と順次ロードしていって, ロードエラーが出たら(onLoadError)そこまででロードをストップさせる方法もアリかもしれませんが, 普通はしませんね。 Flash でフォルダ内を走査するということは,まずしないことです。 http://pekeflash.atrock.main.jp/?eid=380878
その他の回答 (1)
- BlurFiltan
- ベストアンサー率91% (1611/1754)
前置きとして, FlashやActionScriptのバージョンがわかりませんが...。 AS2,AS1,それ以下 の場合,基本的にムービークリップにロードします。 AS3 ではローダーにロードして後に,後にローダーを何処かにaddChildします。 また, AS2以下でも FlashMX2004以降をお持ちで FlashPlayer7 以降用のSWFをパブリッシュする場合は, MovieClipLoaderクラスを使用するのが簡単な気がしますが, FlashMX以前ではそれが使えませんから, loadMovieを使ってムービークリップに画像をロードし,ムービークリップの機能を駆使することになると思います。 私が回答できるかできないかは別問題で, 少なくともここら辺は書いていただかないと, 誰も回答できないか,できたとしても, 「方向違いの回答」or「実行不可能な回答」or「無駄なことだらけの無数パターンの回答」などが付くだけだと思います。 あと, > その読み込んでる時だけローダーを表示させたいのです。 このローダーの作成方法などもご質問内容に入っているのでしょうか? それは,ここのような文字だけの説明しかできないようなところでは, 回答しにくいか回答しても理解できないように思いますよ。 含むにしても含まないにしても, このローダーの作成方法はどうでも良いのか悪いのか,その辺りもわかりません。 ======================== 以下は, 上で書いた,「方向違いの回答」 または 「実行不可能な回答」 に当たる可能性がありますが, FlashMX2004以降(MX2004系,8系,CS3,CS4)をご使用で, FlashPlayer7 以降の SWF をパブリッシュするという勝手な条件での方法例です。 ファイル構造は次のようになっているとします。 任意のフォルダ ├ (main.fla main.swf作成) ├ main.swf (1~5.jpg をロード) ├ 1.jpg ├ 2.jpg ├ 3.jpg ├ 4.jpg └ 5.jpg 新規で main.fla を作成して, 次のスクリプトをフレーム1にコピペし, 「制御」→「ムービープレビュー」で動作確認できると思います。 ------------------------------------------------ // load_mc1~5 を作成(本当は手動で作成すると思いますが) for (var i:Number = 1; i<=5; i++) { // 空のムービークリップ load_mc1~5 を深度 i に作成 var _mc:MovieClip = this.createEmptyMovieClip("load_mc"+i, i); // 適当にずらして配置 _mc._x = i*20; _mc._y = i*15; } // ロード中 表示のテキストフィールドを作成(本当は手動で作成...) var _txt:TextField = createTextField("load_txt", 10, 120, 100, 60, 20); _txt.text = "ロード中"; // ロードされた画像をカウントする変数 cnt の初期化 var cnt:Number = 0; // this (thisのパス)のオブジェクト化 var me:MovieClip = this; // MovieClipLoaderクラスのオブジェクト _mcl を作成 var _mcl:MovieClipLoader = new MovieClipLoader(); // 画像ロード監視用のオブジェクトを作成 var _obj:Object = new Object(); // 画像ロード開始時の動作を定義 _obj.onLoadStart = function(target:MovieClip):Void { // ロード開始をしたMCを非表示 target._visible = false; }; // 画像ロード完了時の動作を定義 _obj.onLoadInit = function():Void { // カウントを 1 加算 cnt++; // カウントが 5 になっtら if (cnt == 5) { // load_mc1~5 を表示 for (i=1; i<=5; i++) { me["load_mc"+i]._visible = true; } _txt.text = ""; } }; // _obj を _mcl のリスナーオブジェクトとして登録 _mcl.addListener(_obj); // 1~5.jpg を load_mc1~5 をターゲットにしてロード for (i=1; i<=5; i++) { _mcl.loadClip(i+".jpg", "load_mc"+i); } ------------------------------------------------ ロード開始時からロード完了時までローダーを表示すれば良いのですから, 「最初にローダー(上の場合は単なる「ロード中」という文字)を表示させておいて, 各画像のロードが完了するときにその個数をカウントし, ロードが完了が目標の個数になったらローダーを非表示にする。」 ただそれだけのことをスクリプトにした例です。 [要 ActionScript2.0 設定で SWF パブリッシュ]
お礼
BlurFiltan様。 ご丁寧な説明ありがとうございます。 確かに自分の事を書いておらず申し訳ありません。 私はFlash8でAS2で書いていました。 > その読み込んでる時だけローダーを表示させたいのです。 に関してはこれはすでにローダーを制作済みです。 ご回答していただいた写真の枚数は5枚でしたが、 枚数制限を無くし、連番での画像の加減でロードさせるにはどうすればいいのでしょう。 分かりにくい説明等で申し訳ありません。
お礼
ご回答有難うございます。 >用意した画像の最終番号を自動取得するというような意味でしょうか? その通りです! ASだけではあまりしないのですか、、、 枚数が指定されているならBlurFiltan様のおっしゃっている方法でやろうと思います! ご丁寧に有難うございます。 今後とも宜しくお願いします。