アプリ版:「スタンプのみでお礼する」機能のリリースについて

FlashMXでのスクリプトの質問です。

1~30フレームまで5回繰り返して、その後31フレームに移り最後の60フレームでストップするというアクションをさせるには、どのようなスクリプトを使えばいいのでしょうか?

30フレーム目に1フレーム目に戻り5回繰り返すというアクション(これが分かりません。)、その後、6回目には31フレームに移り(gotoAndPlay(31);でしょうか?)そのまま最後の60フレームまで進み、60フレーム目で停止(stop();)。

これくらいしか私には分かりません。
どうか知恵をお貸し下さい。
宜しくお願いします。

A 回答 (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に戻しておきましょう。
細かい話ですけれど、閲覧者は制作者が予期しない操作をすることがあります。どんな操作をされても一定の処理ができるよう、できる限り頑丈な設計にしておくことをおすすめします。
    • good
    • 0
この回答へのお礼

出来ました。有難うございました。
説明が分かりやすくて、とても助かりました。

お礼日時:2005/01/11 17:55

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