プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (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 …



それと「%」は剰余演算子です。

その他
Google検索「配列アクセス演算子」
http://www.google.co.jp/search?q=%94z%97%F1%83A% …
「画像をランダムに表示するには」の回答画像1
    • good
    • 0
この回答へのお礼

できました!(T.Tぶわっ

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

お礼日時:2011/02/09 21:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!