ライブラリにおいてあるムービークリップに対して、リンゲージでActionScriptに書き出しをチェックを入れてクラス化したモノを、var 変数名:クラス名 = new クラス名();で生成して、stage.addChild(変数名);でステージに配置するのは基本だと思います。が、この一連の流れで一体どこにインスタンス名を設定するのか非常に悩んでしまいました。

単純にMovieClipを生成するだけなら、 var 変数名:MovieClip = new MovieClip(); でできちゃいます。ActionScript2以下の場合では、createEmptyMovieClipを使って空のMovieClipを生成していたと思います。

インスタンスを作成する場所.createEmptyMovieClip(インスタンス名, 深度)

第二引数にインスタンス名を設定ができ、例えばforで繰り返し生成する場合は、インスタンス名に対して「i」を連結させて連番名などにしたりしていました。さて、、ActionScript3.0ではどうするのでしょうか。。。

まず、空のMovieClipを生成した時の名前を調べました。

ActionScript3
1
2
var mc:MovieClip = new MovieClip();
trace(mc.name);//「instance1」と出力

name はActionScript2以下の場合は _name でアンダーバーがいりましたが、ActionScript3.0ではアンダーバーがいらなくなりました。newしたMovieClipの名前をtraceしてみると instance1 と出力されました。
これをforで繰り返して生成したMovieClipにアクセスする為には「instance1」「instance2」とかのまま作られたらダメですよね。。。

そこで調べました。なんと!ActionScript2以下ではインスタンス名を調べることしかできなかったnameが、ActionScript3.0からnewしたインスタンス名に設定できることが分かりました、つまり、

ActionScript3
1
2
3
var mc:MovieClip = new MovieClip();
mc.name = "myMc";
trace(mc.name);//「myMc」と出力

こう書けちゃうんです!勘の鋭い方はもう分かると思いますが、forで繰り返すときは、変数名.nameに代入する文字列に対して「i」とかを連結すればOK!

ActionScript3
1
2
3
4
5
for(var i:int = 0; i<5; i++){
    var mc:MovieClip = new MovieClip();
    mc.name = "myMc"+i;//←ここで連番名にできる
    trace(mc.name);
}

これは、ActionScript3.0を覚える最初のほうの壁ですね。。。どなたか同じ壁にぶち当たってこれみて助かれば御の字です。

[2012/04/03追記]

名前を付けたMovieClipにアクセスするには、getChildByName(“インスタンス名”);でアクセスする事ができます。

ActionScript3
1
2
3
4
5
6
7
for(var i:int = 0; i<5; i++){
    var mc:MovieClip = new MovieClip();
    mc.name = "myMc"+i;//←ここで連番名にできる
    stage.addChild(mc);
    trace(mc.name);
}
stage.getChildByName("myMc3").y = 30;