Flash:ActionScript3.0で、インスタンスの中に配置したインスタンスを取得してみる
以前作成した動物ルーレットで、動物のインスタンス(inu、ushi…)を5つ配置して、それらをまとめて1つのインスタンス(line1、line2)に変換する、という事をしました。
その後、アクション(ActionScript3.0)で次の様なコードを記述して、手動で配列を作成していました。
//シンボル「ライン」の持つ、各動物のインスタンス名を控えておく
var doubutu: Array = ["inu", "ushi", "neko", "buta", "sai"];
今回は、この手動で作成した配列を、自動にしてみたいと思います。
つまり「動物のインスタンスを入れ替えても、配列定義の際の記述には変更を加える必要がない」ようにします。
準備
以前と同じ要領で、ルーレット用のインスタンスを1列つくります。
動物のムービークリップインスタンスを配置して名前をつけ、
それらをまとめて1つのシンボルに変換。
そのまとめたインスタンスを「line1」という名前にします。
詳しくは「Flash:シンボル・インスタンスを作成して、ActionScript3.0で動かしてみるサンプル2」を参照してください。
Flash:ActionScript3.0で、インスタンスの中に配置したインスタンスを取得してみる
シーン1のレイヤー1:フレーム1に、次の様なActionScript3.0のコードを記述してください。
//空の配列を定義 var doubutu: Array = new Array(); trace(" "); trace("インスタンス「line1」に、いくつインスタンスがあるか取得します"); trace(line1.numChildren); trace(" "); trace("line1のもつインスタンスを、順番に処理します"); if (line1.numChildren > 0) { for (var i: int = 0; i < line1.numChildren; i++) { //変数「tmp」に渡す var tmp: Object; tmp = line1.getChildAt(i); //インデックス番号とインスタンスの名前を出力 trace(i + " : " + tmp.name); //配列に追加 doubutu.push(tmp.name); } } trace(" "); trace("配列「doubutu」のサイズを調べます"); trace("登録されている数 : " + doubutu.length); trace(" "); trace("配列「doubutu」に登録された要素を順番に出力"); if (doubutu.length > 0) { var data: * ; for each(data in doubutu) { trace(data); } }
1)空の「doubutu」という配列を作成します。
2)インスタンス「line1」に、数値インデックスを持って動物インスタンスが登録されているので、「getChildAt」で順に引っ張ってきます。
3)配列「doubutu」に追加していきます。
コード内にも説明を書いていますので、これ以上の解説は不要かと思います。
デバッグ
上メニューより[デバッグ]→[デバッグ]として、デバッグしてみます。
次の様に出力されれば成功です。
