プロが教える店舗&オフィスのセキュリティ対策術

現在、Flashでバナーを作っています。3回ループしてからムービーを停止させるにはどうしたらいいのでしょうか?
for(1=0; i<3; i++){ ←3回繰り返す
gotoAndPlay(1);   ←最初のフレームに戻り再生
}
というスクリプトを最後のフレームで指定していますがうまく再生されません。どなたかご存知でしたらお教えください。よろしくお願いします。

A 回答 (3件)

No.2さんの言われるのが正当な方法だと思います。


でもややこしければ(ややこしくはないけど)
もっと簡単に考えてもできます。

最後のフレームに次のように書く。
これだけ↓

(変数名はNo.2さんと同じくloop_cntを使わせていただきます。何でも良いのですが。)

loop_cnt = Number(loop_cnt)+1;
if (Number(loop_cnt)<3) {
gotoAndPlay(1);
} else {
stop();
}

本当は,変数の初期化などすべきだと思いますが,
しなくても,変数の初期値は"空白"。
数としては0と扱われます。

少なくとも無限ループには落ち込みませんが,たしかに頑丈じゃないですね。
    • good
    • 0

for 文は1つのフレーム内で繰り返し処理をしたい場合に使います。

フレーム間をまたいだループには使えません。
フレーム間をループするには、変数を用意して、ループするごとにカウントを取ります。最後のフレームではその値を見て、ループを継続するか、停止するかの分岐を行うようにします。


フレーム1に、ループした回数を保持する変数を1つ、用意します。ここでは仮に、loop_cnt という変数だとします。
単に loop_cnt = 1; と書くと、ループしてフレーム1に戻ってきた時にループの回数がリセットされて、いつまでもループが終わらなくなってしまいます。
参照しようとした変数が存在しない場合は、undefined という値が返されます。この点を利用して、変数を最初の1度だけ初期化できます。

フレーム1には、次のようなスクリプトを書きます。
(以下のスクリプトをコピーして利用する場合は、各行頭の全角のスペースを、全て半角のスペースかタブに置き換えてください。このまま使うとシンタックスエラーになります)

 //最初の1度だけ、ループカウンタを初期化
 if( loop_cnt == undefined )
 {
  loop_cnt = 1;
 }

最後のフレームでは、ループカウンタの更新と、ループを継続するかしないかの分岐を行います。
スクリプトにしますと、次のようになります。

 //ループカウンタを更新
 loop_cnt++;

 //3回ループした場合は停止
 if( loop_cnt > 3 )
 {
  loop_cnt = 1;
  stop();
 }
 //それ以外はループを継続
 else
 {
  gotoAndPlay( 1 );
 }


「ムービープレビュー」の「制御」メニューで、巻き戻して再生しなおしてみると分かりますが。
最初は上手くいっても、2回目以降の再生では、ループは最初の1度しか行われません。
これは、変数 loop_cnt が既に定義されているので、フレーム1でのループカウンタの初期化が、2回目以降の再生では実行されないことが原因です。
バナーではあまりないかとは思いますが、右クリック( Mac では control +クリック)した時の Flash Player のメニューを表示する場合などは、閲覧者の操作で何度も再生される可能性も、ないとは言い切れません。
頑丈なプログラムにするためにも、ループ終了時にループカウンタを1に戻しておくことをおすすめします。
    • good
    • 0

Flashはさわったことないですけど、forを書く位置がおかしいと思いますよ。


プログラム全体をforで囲いなおせばうまくいきませんか?
    • good
    • 1

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