• ベストアンサー

画像をランダムに表示するには

プログラム初心者ですAS3.0で書いています ステージの幅は横550×縦400 10個のムービークリップをランダムに8個表示したいです 縦が2個、横が4個で少し間を空けて表示 addChildで表示したいです 重複もできればなくしたいです よろしくお願いします

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

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

配置する10個のMC(ムービークリップ)は 例えば違う絵柄や違うアニメーションが入っているような別物であるものとします。 つまり10個のMCはシンボルとしても別物であるとします。 (各MCの "基準点" の位置はご自身でしっかり把握しておいてください。) MCを用意した後のさらに下準備として 作成した10個のMCシンボルに別々のクラス名を付けます。 クラス名を付けることや その先のことも含めて次のページのようなことをして行きます。 「[AS3] クラスを文字列で参照したい」 http://f-site.org/articles/2008/01/17051234.html 上記ページではMCシンボルに「Pen」というクラス名を付けていますが ここでは「MC0」「MC1」「MC2」…「MC9」という 10個のクラス名を付けるとしておきます【添付図↓】。 そしてフレームに次のようなスクリプトを書きます。 --------------------------- //「MC0」を配置するx座標を設定 var start_x:Number = 80; //「MC0」を配置するy座標を設定 var start_y:Number = 40; //ランダム配置するMCの個数を設定 var haiti_n:int = 8; //横に並べる個数を設定 var yoko_n:int = 4; //MCを配置する横間隔を設定 var kankaku_x:Number = 100; //MCを配置する縦間隔を設定 var kankaku_y:Number = 60; //クラス名を入れる配列 var name_arr:Array = new Array(); //「MC0」~「MC9」を配列の要素に代入 for (var i:int = 0; i<=9; i++) { name_arr[i] = "MC" + i; } for (i = 0; i<haiti_n; i++) { //配列の要素分の乱数を取得 var rand_n:int = Math.floor(Math.random() * name_arr.length); //その要素を抜きとり取得 var name_str:String = name_arr.splice(rand_n,1); //文字列のクラス化 var myClass:Class = Class(getDefinitionByName(name_str)); //そのクラスを呼び出して配置 this["mc" + i] = new myClass(); this["mc" + i].x = i % yoko_n * kankaku_x + start_x; this["mc" + i].y = Math.floor(i / yoko_n) * kankaku_y + start_y; addChild(this["mc" + i]); } //(※後の使用方法例) this.mc2.rotation = 30; --------------------------- これでパブリッシュします。 上のスクリプトでは このMCの重複出没を防ぐために Arrayクラスの splice() メソッドを使っています。 このメソッドを使わずに 配列の中身をあらかじめランダムシャッフルしておいた上で 要素0から順に8つの要素を取り出しても良いと思います。 ※人間的にはこちらの方が難しいですが   PC的には多分こちらの方が処理が速いと思います。 「配列を偏りなくランダムに並替える」 http://fumiononaka.com/TechNotes/Flash/FN0212003.html それと「%」は剰余演算子です。 その他 Google検索「配列アクセス演算子」 http://www.google.co.jp/search?q=%94z%97%F1%83A%83N%83Z%83X%89%89%8EZ%8Eq

flash0
質問者

お礼

できました!(T.Tぶわっ ちょうどfor文とか配列とか覚え始めたころなので不安でしたが 説明がとても解りやすくて助かりました!ありがとうございます

関連するQ&A