重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

環境:Flash8 actionscript2.0

10こ程度のムービークリップをそれぞれクリックした時に同じ動きをさせる文を1つにまとめることは可能でしょうか?

ムービークリップそれぞれに

mc1 mc2 mc3 …mc10

とインスタンス名をつけています。
さらにその下位層に

mc1
 └kai_mc
mc2
└kai_mc



mc10
└kai_mc

と置いています。

このそれぞれのムービークリップをクリックした際、その下位層のムービークリップを次のフレームに移動させたいと考えています。

それぞれ個別に書くと

_root.mc1.onRelease=function(){
_root.mc1.kai_mc.nextFrame()
}

と書いていたのですが、ムービークリップの数を増やすかも知れずムービークリップの数分書くのは大変なので1つにまとめたいと考えています。

自分で以下のように書いてみました。

i=0
for(i=1; i>10; i++){
_root["mc"+i].onRelease.function(){
_root["mc"+i].kai_mc.nextFrame()
}
}

うまくいかないので試行錯誤したりtraceで調べたりしたのですがどうもよくわかりません。
i=0
for(i=1; i>10; i++){
_root["mc"+i].onRelease.function(){
trace(i)
}
}
で出力すると
11と表示されるのでpassが違うとは思うのですが・・・
iを1~10で指定しているのになぜ11となるのでしょうか?
どうすればpass指定できるのでしょうか?
そもそものやり方、考え方が違うかどうかも含め、教えて頂きたく質問しました。
よろしくお願いします。

A 回答 (2件)

#1です。



> なぜfunctionのあとだとi=11になるのでしょうか?

Flash の ActionScript に限らず
for 文で i を変えれば普通はそうなります。
それがルール(言語仕様)です。

ActionScript 限定で話をすると
例えば次の文をフレームに書いたとします。

---------------------
for (i=1; i<=10; i++) {
trace(i);
}

trace(i);
---------------------

上の文はパブリッシュ時に
次のように変換されて処理されます。

---------------------
i = 1;

while(i<=10){
trace(i);
i++;
}

trace(i);
---------------------
※ HugFlash の HugDimension モードでの 自作SWF 解析結果

for文 を使って書いても,
結局内部マシン語的には while文 と同値のものとして扱われるということです。
またその while文 には上のように変換されるので
i は 11 となって for文 から抜けます(while文 から抜けます)。


==================

> onRelease時に
>
> _global.hensuu=i
> //iはクリックしたmcの番号
>
> などとしたい場合はどうすれば可能なのでしょうか?

それは #1 の回答自体がヒントになっていると思いますが,
各 MC 内に i を固定してしまえば良いでしょう。

---#1のスクリプトを変更----------------
for (i=1; i<=10; i++) {
_root["mc"+i].num = i;
_root["mc"+i].onRelease = function() {
this.kai_mc.nextFrame();
trace(this.num);
};
}
-------------------------------------

「制御」→「ムービープレビュー」で
各 MC クリックをすれば動作検証できると思います。

その他,私の最近の回答より
「スクリプトをまとめて書くには」
http://okwave.jp/qa/q6341073.html
    • good
    • 0
この回答へのお礼

重ねてご丁寧に説明頂きましてありがとう御座います。
それぞれのMC内に変数を入れてしまうことで固定するということですか…大変勉強になりました。
whileに変換されるなど色々内部的に変換されてるんですね。自分で横道にそれて色々やってみて楽しかったです。
初心者なものでwhile文も使ったことなかった為いろいろと勉強になりました。
過去に回答されてる分も拝読させて頂きます。
深夜遅くにもかかわらず回答頂きまして本当にありがとう御座いました。

お礼日時:2010/12/11 10:18

次のような感じでできると思います。



for(i=1; i<=10; i++){
_root["mc"+i].onRelease=function(){
this.kai_mc.nextFrame();
};
}
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

なるほどthisを使うとできるんですね。

すこしずれてしまいますけどなぜfunctionのあとだとi=11になるのでしょうか?
onRelease時に

_global.hensuu=i
//iはクリックしたmcの番号

などとしたい場合はどうすれば可能なのでしょうか?
重ねての質問ですが回答いただければ幸いです

お礼日時:2010/12/11 05:05

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