そろそろActionScript2.0から脱皮できそうな予感がしてきました!(オソw)そこで、ActionScript2.0でできたことで、ActionScript3.0でできないこと、その違いと方法を記録していきたいと思います。

AS3でeval();が使えない

evalは「テキストをインスタンス名のターゲットに変換してくれる」というのがボクのイメージです。
例えば、ステージ上に、mc0からmc9までのムービークリップがあるとします。これらに一気に命令する時は、

ActionScript1.x ~ 2.0の場合

ActionScript
1
2
3
4
5
for(var i:Number = 0; i<10; i++){
    eval("mc"+i).onRelease = function(){
        trace("ほげ");
    }
}

for文の中の変数「i」を利用して、「mc0」「mc1」「mc2」「mc3」…..「mc8」「mc9」まで一気にonReleaseのボタンが設定できました。
ActionScript3.0だとevalが使えないので、下記の方法を使います。

ActionScript3.0の場合

ActionScript3
1
2
3
4
5
for(var i:int = 0; i<10; i++){
    this.["mc"+i].onRelease = function(){
        trace("ほげ");
    }
}

えーっと、実は、この記述の方法はActionScript1.x~2.0で、Flash Player5以上であれば使うことができます。

更にもっと深い階層になると、

ActionScript3
1
2
3
4
5
for(var i:int = 0; i<10; i++){
    this.["mc"+i]["mc2"+i]["mc3"+i].onRelease = function(){
        trace("ほげ");
    }
}

と、ドットで連結させるところを、[ ] ←この括弧で連結することで、インスタンス名にアクセスすることができます。

for文でインスタンスのプロパティに対してアクセスしたい場合、getChildByNameを使ってインスタンス名を参照します。例えばX座標のとき、

ActionScript3
1
2
3
for(var i:int = 0; i<10; i++){
    trace(this.getChildByName("mc"+i).x);
}