- ベストアンサー
FlashMXでのスクリプトの質問。
FlashMXでのスクリプトの質問です。 1~30フレームまで5回繰り返して、その後31フレームに移り最後の60フレームでストップするというアクションをさせるには、どのようなスクリプトを使えばいいのでしょうか? 30フレーム目に1フレーム目に戻り5回繰り返すというアクション(これが分かりません。)、その後、6回目には31フレームに移り(gotoAndPlay(31);でしょうか?)そのまま最後の60フレームまで進み、60フレーム目で停止(stop();)。 これくらいしか私には分かりません。 どうか知恵をお貸し下さい。 宜しくお願いします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
変数を用意して、ループするごとにカウントを取り、その値を元にフレーム 30 で分岐してはいかがでしょう。 フレーム1で、ループした回数を保持する変数を1つ、用意します。ここでは仮に、loop_cnt という名前にします。初期値はとりあえず、1を入れます。 ただ、フレーム1で単純に loop_cnt = 1; とすると、フレーム 30 から戻ってくる度にカウンタがリセットされ、いつまでもループが終了しないことになります。 参照しようとした変数が存在しない場合、undefined という値が返されます。これを利用して、最初の1度だけ、変数を初期化することができます。 スクリプトにしますと、次のようになります。 (↓以下のスクリプトをコピーして利用する場合は、各行頭の全角のスペースを、全て半角のスペースかタブに置き換えてください。このまま使うとシンタックスエラーになります) ・フレーム1に設定するスクリプト //最初の1度だけ、ループカウンタを初期化 if( loop_cnt == undefined ) { loop_cnt = 1; } フレーム 30 では、ループカウンタの更新と、再生するフレームの分岐を行います。 if 文の条件は、ループカウンタを if 文の前で更新するか、if 文の中で更新するかによって、5以下か5未満かが変わります。どちらでも結果は同じですので、分かりやすい方で書いて下さい。ここでは、if 文の前で加算することにします。 ・フレーム 30 に設定するスクリプト //ループカウンタを更新 loop_cnt++; //フレーム1~30を5回ループ if( loop_cnt <= 5 ) { gotoAndPlay( 1 ); } 5回ループした後は if 文の条件が不成立になり、gotoAndPlay( 1 ); は実行されず、再生ヘッドはそのまま先のフレームに進みます。改めて gotoAndPlay( 31 ); を実行する必要はありません。 最後に、フレーム 60 に stop(); を入れて、完成です。 「ムービープレビュー」の「制御」メニューで、巻き戻して再度再生させてみると分かりますが。 最初は問題ないのですが、2回目以降の再生では、フレーム1~ 30 のループは1回しか行われません。 これは、loop_cnt が既に定義されているため、フレーム1での変数の初期化が、2回目以降の再生では実行されないことが原因です。 2回以上再生させる場合や、あるいは、閲覧者の操作によって再生される可能性がある場合( Flash Player のメニューを表示させる場合など)は、ループ終了後に loop_cnt の値を1に戻しておきましょう。 細かい話ですけれど、閲覧者は制作者が予期しない操作をすることがあります。どんな操作をされても一定の処理ができるよう、できる限り頑丈な設計にしておくことをおすすめします。
お礼
出来ました。有難うございました。 説明が分かりやすくて、とても助かりました。