• 締切済み

アクションスクリプト2.0でfor文の出力結果

for (i = 1; i < 53; i++) { this["pad"+i].onRelease = function() { trace("pad"+i); }; } pad1~pad52というインスタンス名のムービークリップを配置します。 ムービークリップを押したときに各番号をtraceしたいのですが、 すべて"pad53"という同じ結果(出力)になってしまいます。 よくよく考えてみるとそうなってしまうな・・・ というのはわかるのですが、どこをどのように変更すれば よいのか思いつきません。。。 根本的に考え方が違うのでしょうか。 よろしくお願いいたします。

みんなの回答

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.2

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)
回答No.1

ひとつ関数を挟みましょう。 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);  }; }

関連するQ&A