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

根本的に考え方が違うのでしょうか。
よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (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);
};
}
-----------------------------------------------
    • good
    • 0

ひとつ関数を挟みましょう。



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);
 };
}
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング

おすすめ情報