dポイントプレゼントキャンペーン実施中!

こんにちは。
困ったので質問させてください。

今、MX2004のFLASHを使ってあるゲームを作成しています。

「XXX」とリンゲージ名をつけたムービークリップを
    
    for(i=0;i<=100;i++){
    obj = _root.attachMovie("XXX", "mc"+i, i);//MCの作成
    obj._x = table_x[i];//X軸の値の格納テーブル
    obj._y = table_y[i];//Y軸の値の格納テーブル
    }

で100個のムービックリップを画面上に『mc+連番(以下「mc●●」)』と名前をつけてで作成しました。
この画面上に作成したムービークリップmc●●をクリックするとTraceで「OK」と表示したいのですが・・・

    mc1.onMouseUp = function(){
      Trace("OK");
    }
    mc2.onMouseUp = function(){
      Trace("OK");
    }
    mc3.onMouseUp = function(){
      Trace("OK");
    }
    ・
    ・×97回
    ・

この様にmc●●と同じ数だけ100回同じような文を記述する方法しかないのでしょうか?

個人的には
『eval("_root.mc"+i)』を利用して同じような構文は削除したいのですが良い方法が思いつきません。
何か良い方法がありましたらご教授ください。
お願いします。

A 回答 (2件)

どこがわからないのかが疑問である質問ですが。



まず,eval などを使わなくても次のようにすればできますよね。

for (i=0; i<=100; i++) {
obj = _root.attachMovie("XXX", "mc"+i, i); //MCの作成
obj._x = table_x[i]; //X軸の値の格納テーブル
obj._y = table_y[i]; //Y軸の値の格納テーブル
obj.onMouseUp = function() {
trace("OK");
};
}

しかし onMouseUp を使うと,
すべてのムービークリップが一斉に反応して大変なことになってしまいますから,
普通は onMouseUp ではなくて onRelease だと思います

obj.onMouseUp = function() {
trace("OK");
};
    ↓変更では?↓
obj.onRelease = function() {
trace("OK");
};


ここからが本題ですが,

> 『eval("_root.mc"+i)』を利用して同じような構文は削除したいのですが

単にこのようにすれば良いだけではないでしょうか↓?

for (i=0; i<=100; i++) {
eval("_root.mc"+i).onRelease = function() {
trace("OK");
};
}

しかし,これはあまり使われません。
#1 の方の書かれていらっしゃるように,

for (i=0; i<=100; i++) {
_root["mc"+i].onRelease = function() {
trace("OK");
};
}

のようにするのが普通です。

eval というスクリプトを使うことさえわかれば,
ヘルプを検索するとこのようなことはわかると思いますよ。
普通は eval さえわからないので調べようがなくて同様の質問をされている場合が多いです。
またそれであれば質問する意味も理解できます。
しかしなぜ 「『eval("_root.mc"+i)』を利用して…」 までわかっていて,
上のことができないのかがよくわかりません。



---------------------------------

なお,
eval や 配列アクセス演算子 をわかっていても,
trace("OK");
ではなく,
trace(ムービークリップごとに違うことば);
を出力させたい場合は,ひょっとしたら困ることがあるかもしれません。

そのような場合はこのようにすれば対処できます↓。

// ことばの値の格納テーブル
table_kotoba = ["あ", "い", "う", "え", "お", "か", "き", "…"];
for (i=0; i<=100; i++) {
// 動的に変動するMC内の変数に各ことばを代入
_root["mc"+i].kotoba = table_kotoba[i];
_root["mc"+i].onRelease = function() {
trace(this.kotoba);
};
}
    • good
    • 0

obj._y = table_y[i];//Y軸の値の格納テーブル


の下に追加して下さい。

_root["mc"+i].onRelease = function(){
Trace("OK");
}
    • good
    • 0

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