- 締切済み
アクションスクリプト2.0でfor文の出力結果
for (i = 1; i < 53; i++) { this["pad"+i].onRelease = function() { trace("pad"+i); }; } pad1~pad52というインスタンス名のムービークリップを配置します。 ムービークリップを押したときに各番号をtraceしたいのですが、 すべて"pad53"という同じ結果(出力)になってしまいます。 よくよく考えてみるとそうなってしまうな・・・ というのはわかるのですが、どこをどのように変更すれば よいのか思いつきません。。。 根本的に考え方が違うのでしょうか。 よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- BlurFiltan
- ベストアンサー率91% (1611/1754)
ActionScript 2.0(1.0) の場合は ムービークリップのみならずボタンにも勝手なプロパティを与えることができます。 その性質(仕様)を使って 次のようにしても良いと思います。 ----------------------------------------------- for (i=1; i<53; i++) { this["pad"+i].num = i; this["pad"+i].onRelease = function() { trace("pad"+this.num); }; } ----------------------------------------------- === === === === === === === なお(大きなお世話だとは思いますがすみません。) #1の方のスクリプトを フレームに書く ActionScript 2.0 に翻訳すると次のようになります。 ----------------------------------------------- for (i=1; i<53; i++) { this["pad"+i].onRelease = createPrintTrace(i); } function createPrintTrace(x:Number):Function { return function ():Void { trace("pad"+x); }; } ----------------------------------------------- さらに ActionScript 1.0 に翻訳すると次のようになります。 ----------------------------------------------- for (i=1; i<53; i++) { this["pad"+i].onRelease = createPrintTrace(i); } function createPrintTrace(x) { return function () { trace("pad"+x); }; } -----------------------------------------------
- hattorix
- ベストアンサー率80% (4/5)
ひとつ関数を挟みましょう。 for (i = 1; i < 53; i++) { this["pad"+i].onRelease = createPrintTrace(i); } } // ... 上記の処理を含むメソッドの終わり private static function createPrintTrace(x:int):Function { return function():void { trace("pad" + x); }; }