• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:[Flash Lite]分割画面でのランダム設定)

[Flash Lite]分割画面でのランダム設定

このQ&Aのポイント
  • 携帯用の待ち受け画像を作成する際に、分割した画面に同じ画像が表示されないようにランダム表示させる方法について質問します。
  • ランダムな画像表示は作成したことがありますが、分割画面での同じ画像の重複回避方法がわかりません。
  • どのようなアプローチが効果的か、if文やswitch文などを使用して対応するのか、具体的なヒントを教えてください。

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

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

Flash Lite1.1 用 SWF には そもそも "配列などという概念はありません" が, 考え方としては次のページの方針が参考になると思います。 「配列を偏りなくランダムに並替える」 http://fumiononaka.com/TechNotes/Flash/FN0212003.html === 以下引用 ==================== // function定義: xShuffleArray // 引数: 配列 // 戻り値: なし function xShuffleArray(l_array) { var i = l_array.length; while (i--) { var j = Math.floor(Math.random()*(i+1)); //ランダムなインデックスを計算 var t = l_array[i]; l_array[i] = l_array[j]; l_array[j] = t; } } === 以上引用 ==================== 上のスクリプトを元に,この先を考えて行きます。 まず6枚の画像は 基準点を左上にしたムービークリップに変換してあって すでにステージ上にあるものとします。 (座標は適当で良いです。) そしてそれら6個のムービークリップには 「mc_a」「mc_b」「mc_c」「mc_d」「mc_e」「mc_f」 というインスタンス名が付けてあるものとします。 その場合のフレームに書くスクリプト例です↓。 //------------------------------------------ //MCの名前を登録する連番付き変数を用意 str0 = "mc_a"; str1 = "mc_b"; str2 = "mc_c"; str3 = "mc_d"; str4 = "mc_e"; str5 = "mc_f"; //引用部分を変更 i = 6; while (i--) { j = random(i+1); t = eval("str" add i); eval("str" add i) = eval("str" add j); eval("str" add j) = t; } //変数「str0」~「str2」該当MCを適当な座標に配置 setProperty(str0, _y, 10); setProperty(str1, _y, 110); setProperty(str2, _y, 210); //「str3」以降のMCを非表示にする i = 3; while (i<=5) { setProperty(eval("str" add i), _visible, false); i++; } //------------------------------------------ (質問されているカテゴリが少し違うかな? という気がします。)  

potapota24
質問者

お礼

ご回答ありがとうございます。 すみません詳しくスクリプトを載せていただきましたが、 自分にはレベルが高すぎてすぐには理解ができそうにないです・・・。 参考サイトも載せていただきましたので勉強しながら進めていければと思っています。 ありがとうございました。

その他の回答 (1)

  • asciiz
  • ベストアンサー率70% (6803/9674)
回答No.1

「かぶらないように3つ選んでから、表示」すれば良さそうですね。 3枚ぐらいだったら、「かぶったら選び直す」というアルゴリズムでも、それほど時間はかからないでしょう。 [例1] (1)画像1=ランダムに選ぶ (2)画像2=ランダムに選ぶ:画像1と同じ物になったら戻って2を選び直し (3)画像3=ランダムに選ぶ:画像1または2と同じ物になったら戻って3を選び直し (4)画像1・2・3を表示する。 汎用的に考えるならば、例えば次のような方法があります。 [例2] (1)画像の数だけ、配列要素を用意します。 (2)配列の各要素に、順番に数を入れます。要素(1)=1、要素(2)=2、…要素(6)=6。 (3)適当な回数、配列をシャッフルします。例えば10回、要素(ランダム番目)と要素(ランダム番目)の値を入れ替えます。 (4)配列要素(1)~(3)に入っている番号の画像を、表示画像として採用します。 もし、選択しなければならない画像が9枚(9分割)とか16枚(16分割)になった時のことを考えると、例1の方法では比較対象の変数がどんどん多くなり、また、いつまでもどれかと同じ画像が選ばれてしまって、無限ループ的な動作になってしまうかもしれません。 例2のアルゴリズムならば、規定回数ループしたら終了することが保証され、番号が重複して選ばれることもありません。 ※どちらのアルゴリズムであっても、画像が3枚未満(分割枚数未満)である場合のことは一応想定しておかなければいけませんけどね。 例1の場合の想定はまあ書くまでもないでしょう。 例2の場合…9分割で画像が5枚しか無かったときは、最低9要素は用意して、次のように初期化すれば良いでしょう。 要素(1~9)=「1、2、3、4、5、1、2、3、4」

potapota24
質問者

お礼

ご回答ありがとうございます。 配列に関しての知識不足のため、完全に理解することが 今の私では難しいですが、勉強しながら進めていければと思っています。 ありがとうございました。