• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:100種類の画像をランダムに読み込みたい(AS2))

100種類の画像をランダムに読み込みたい(AS2)

このQ&Aのポイント
  • 100種類の画像をランダムに読み込み、表示できるスクリプトを作成したいです。また、読み込みが遅くなる場合の解決方法も教えてください。
  • 現在、100枚の画像ファイルが連番でimgフォルダに保存されています。また、URLはLink.asに記述されています。
  • AS2とFlash Player8を使用していますが、初心者のため苦戦しています。ご教授いただけると幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.2

#1です。 > 100枚の画像から100枚をランダムな順にチョイスしたい > と考えています。(ページを開くたびに順番は変わる) > 重複についてはしても大丈夫です。 と言うことでしたら 次のようにすれば良いのではないかと思います。 //------------------------------------------- import mx.transitions.Tween; import mx.transitions.easing.*; var num:Number = 10; //最高数字の設定(「img/p100.jpg」まであった場合) var max_num:Number = 100; var bar_h:Number = 200; var bar_w:Number = 150; var bar_n:Number = 10; var margin:Number = 0; var lag:Number = 1000; var speed:Number = 1; var transMode:Boolean = true; //setInterval参照用IDの宣言 var ID:Number; //ランダムな整数を入れる変数rの宣言 var r:Number; //ロード監視用にするObjectインスタンス「obj」を作成 var obj:Object = new Object(); //MovieClipLoaderインスタンス「mcl」を作成 var mcl:MovieClipLoader = new MovieClipLoader(); //カウンタの初期化 var cnt:Number = 0; //JPEGロード完了時の動作定義 obj.onLoadInit = function(target:MovieClip):Void { cnt++; if (cnt == 10) { ID = setInterval(bar_trans, lag); } }; //「mcl」のリスナーとして「obj」を登録 mcl.addListener(obj); for (i=1; i<=num; i++) { mc = this.createEmptyMovieClip("p"+i, i); mc.createEmptyMovieClip("inner", i); //r に 1~max_num のランダムな整数を代入 r = Math.floor(Math.random()*max_num)+1; //ランダムな外部JPEGをロード mcl.loadClip("img/p" + r + ".jpg", mc.inner); mc._x = margin+(bar_w+margin)*(i-2); mc._y = 0; mc._alpha = 100; //mc内の変数nにrを代入 mc.n = r; mc.onRollOver = rollover; mc.onRollOut = rollout; mc.onRelease = releas; } function rollover() { this._alpha = 100; transMode = false; } function rollout() { this._alpha = 100; transMode = true; } function releas() { transMode = true; url = _root["link"+this.n]; getURL(url); } function bar_trans() { if (transMode) { for (i=1; i<=num; i++) { bar_mc = _root["p"+i]; bar_mc.x0 = bar_mc._x; if (bar_mc.x0>margin+(margin+bar_w)*(num-3)) { bar_mc._visible = false; bar_mc.targetx = -bar_w; //r に 1~max_num のランダムな整数を代入 r = Math.floor(Math.random()*max_num)+1; //ランダムな外部JPEGをロード bar_mc.inner.loadMovie("img/p" + r + ".jpg"); //bar_mc内の変数nにrを代入 bar_mc.n = r; } else { bar_mc._visible = true; bar_mc.targetx = margin+bar_w+bar_mc.x0; } myTween(bar_mc); } } } function myTween(bar_mc) { new Tween(bar_mc, "_x", Regular.easeOut, bar_mc.x0, bar_mc.targetx, speed, true); } #include "Links.as" //-------------------------------------------  

yumiduti
質問者

お礼

具体的なコードを教えていただいて、ありがとうございます。 無事理想的なもの作成することができました。 本当にありがとうございました!

その他の回答 (1)

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

> 100種類の画像をランダムに読み込み、 > 表示できるようにしたい と書かれましても 100枚の画像から10枚をランダムにチョイスしたいのか 100枚の画像から100枚をランダムな順にチョイスしたいのかがわかりませんし さらに 重複を許すのか(←いわゆる普通のランダムか) 重複を許さないのかがわかりません。 (重複を許す=1,3,1,2) (重複を許さない=1,3,2) また上で書いた4通り以外のランダムも考えられます。 (選ぶ枚数制限は無しで延々と100枚からランダムチョイスするとか) ですから具体的な回答はしにくいですが どの場合であっても ランダムな1~100までの数字が入った配列を作成して その配列の要素にアクセスすれば良いのではないかと思います。 ですからあらかじめ 何らかの方法で次のような要素の配列を用意しておきます。 var arr:Array = new Array(); arr[0] = 56; arr[1] = 69; arr[2] = 1; // ~略~ arr[97] = 100; arr[98] = 8; arr[99] = 22; それで, その配列を使って次のようにしてJPEGをロードし, for (i=1; i<=num; i++) { mc = this.createEmptyMovieClip("p"+i, i); //~略~ mc.inner.loadMovie("img/p"+arr[i-1]+".jpg"); //~略~ } さらに 次のようにしてリンクを設定します。 function releas() { transMode = true; url = _root["link"+arr[this.n-1]]; getURL(url); } だいたいそんな感じで行けると思いますよ。 重複を許さないランダムな要素を持つ配列を作成する場合は 次のページが参考になると思います。 「FN0212003 - 配列を偏りなくランダムに並替える - Flash : テクニカルノート」 http://fumiononaka.com/TechNotes/Flash/FN0212003.html === === === > たまに読み込みが間に合わず空白ができてしまいます。 > 解決するには… これに関しても 「では,どうしたいのか。」 がかかれていないため具体的な回答はできませんが, 漠然と,一般的なお決まり手段で考えると 『MovieClipLoaderクラスのメソッドを使って 「ロード完了」などを検知して何かの対処をするかなあ』 とは思います。 MovieClip.loadMovie() で JPEG をロードするのではなく MovieClipLoader.loadClip() で JPEG をロードするんです。 そうすると 1枚のJPEGロード完了を MovieClipLoader.onLoadInitイベントリスナーによって検知することが可能になります。 その onLoadInitイベント 発生時に カウントをとって行って, 10枚なら10枚,100枚なら100枚分のカウントがとれてから setInterval をセットするとか, または onLoadInitイベント 発生時に 目的のJPEGロード完了を待って, setInterval をセットするとか, または 各JPEGに対する onLoadInitイベント 発生時に その各JPEGをロードしたMCのアルファを0にして 全JPEGロードのカウントがとれてから 全JPEGをフェードインさせ(アルファ100に徐々に近づけ) アルファが100になってから setInterval をセットするとか,,, どんなことをするか知りませんが 何かそのようなことをするには MovieClipLoader が使えると思います。 (使わなくてもできますが,手段のうちの1つにはなると思います。) これに関しては 次のような感じでそのままを検索すれば 使用例や注意点などの情報が集まると思います。 Google検索「MovieClipLoader.onLoadInit」 http://www.google.co.jp/search?hl=ja&source=hp&q=MovieClipLoader.onLoadInit Google検索「MovieClipLoader.loadClip」 http://www.google.co.jp/search?hl=ja&source=hp&q=MovieClipLoader.loadClip ---簡易例------------------------------------ //ロード監視用にするObjectインスタンス「obj」を作成 var obj:Object = new Object(); //MovieClipLoaderインスタンス「mcl」を作成 var mcl:MovieClipLoader = new MovieClipLoader(); //カウンタの初期化 var cnt:Number = 0; //JPEGロード完了時の動作定義 obj.onLoadInit = function(target:MovieClip):Void{ trace(target + "にJPEGロード完了"); cnt++; if(cnt == 10){ trace("setIntervalをセット!"); } } //「mcl」のリスナーとして「obj」を登録 mcl.addListener(obj); //親子二重の空のMCを作って子MCにJPEGをロード for (i=1; i<=10; i++) { mc = this.createEmptyMovieClip("p"+i, i); mc.createEmptyMovieClip("inner", i); mcl.loadClip("img/p"+i+".jpg",mc.inner); } //-------------------------------------------

yumiduti
質問者

お礼

BlurFiltanさん丁寧な回答、本当ありがとうございます。 大変勉強になりました。 また、曖昧な質問をしてしまい申し訳ありませんでした。 まずランダムについてですが、100枚の画像から100枚をランダムな順にチョイスしたいと考えています。(ページを開くたびに順番は変わる)重複についてはしても大丈夫です。 教えていただいたコードにどのようなものプラスすれば可能でしょうか? 空白については教えていただいたことを参考に作ったところ、望んだ結果が得られました。ありがとうございました。 もうひとつ初歩的なことをお聞きしたいのですが、現在左から右へ流れるようになっていますが、これを右から左へ流れるようにするにはどうしたら良いのでしょうか?

yumiduti
質問者

補足

BlurFiltanさん丁寧な回答、本当ありがとうございます。 大変勉強になりました。 また、曖昧な質問をしてしまい申し訳ありませんでした。 まずランダムについてですが、100枚の画像から100枚をランダムな順にチョイスしたいと考えています。(ページを開くたびに順番は変わる)重複についてはしても大丈夫です。 教えていただいたコードにどのようなものプラスすれば可能でしょうか? 空白については教えていただいたことを参考に作ったところ、望んだ結果が得られました。ありがとうございました。 もうひとつ初歩的なことをお聞きしたいのですが、現在左から右へ流れるようになっていますが、これを右から左へ流れるようにするにはどうしたら良いのでしょうか?

関連するQ&A