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

2つのボタン(A,B)とそれぞれに対応したムービー(A,B)を用意しました。ボタンAにマウスカーソルを重ねるとムービーAが開始され、ボタンBにマウスカーソルを重ねるとムービーBを開始するというものを作りました。
しかし、ボタンAにマウスカーソルを重ね、ムービーAの再生中にボタンBにマウスカーソルを重ねるとムービーBが開始されるのですが、ムービーAが再生中でも消えてしまいます。この時、ムービーAを最後まで再生させたい場合はどのようにしたらよいのでしょうか?
タイムライン上ではムービーAをフレーム1、ムービーBをフレーム2と連続して配置し、ボタンA,Bにマウスを重ねたときそれぞれのフレームにgotoAndPlayを指定しています。
よろしくお願いします。

A 回答 (1件)

ムービーAとBを同時に表示しておき、それぞれの再生用のボタンにカーソルが重なった時に再生される、といったものでよろしいでしょうか?




フレーム1にムービークリップAとB、ボタンAとBを配置し、ムービークリップAとBにそれぞれインスタンス名を付けます。ここでは仮に、clip_A と clip_B という名前にします。
ボタンAに、次のようなスクリプトを書きます。
(↓以下のスクリプトをコピーして使う場合は、各行頭の全角のスペースを、全て半角のスペースかタブに置き換えてください。このまま使うとシンタックスエラーになります)

 on(rollOver)
 {
  clip_A.gotoAndPlay( 1 );
 }

ボタンBには、clip_A の部分を clip_B に変えて、同様のスクリプトを書きます。

ムービークリップが自動的に再生されたのでは困りますので、最初は止めておきましょう。
”最初の1度だけ”実行すればいい処理は、onClipEvent の load イベントを使います。load は、ムービークリップがステージに登場した、その時1回だけ発生するイベントです。
ステージにあるムービークリップAとB(のインスタンス)に、それぞれ次のようなアクションを設定します。

 //最初は止めておく
 onClipEvent(load)
 {
  this.stop();
 }


このままですと、ボタンにカーソルが重なった時にAが繰り返し再生されます。また、Aが再生中にもう1回ボタンAにカーソルが重なると、再生中でもまたAの最初から再生されてしまいます。
Aを1回だけ再生して止めるようにするには、ムービークリップAのシンボルのタイムラインの最後に、stop(); を入れてください。メインのタイムラインではなく、A自身が持っているタイムラインですので、ご注意を。
Aが再生中にボタンAにカーソルが重なった時、最初に戻らず無視するようにするには、変数を使ってAが再生中かどうかの情報を保存しておき、この値を if 文で判断して、再生されていない時だけ gotoAndPlay を実行します。
メインのタイムラインのフレーム1に次のようなスクリプトを設定して、変数を用意します。

 a_flg = false;
 b_flg = false;

状態を保存しておいて、その値によって分岐するような使い方をする変数は、フラグとも呼ばれます。ムービークリップAとBそれぞれのフラグを用意します。
Aが再生中の時は a_flg に true を入れ、再生していない・再生が終わった時には false を入れるようにします。そして、ボタンAにカーソルが重なった時は、a_flg が false だった場合だけ、clip_A.gotoAndPlay を実行します。
すると、ボタンAに設定するスクリプトは次のように変わります。

 on(rollOver)
 {
  //再生中でなければ、Aを再生
  if( a_flg == false )
  {
   clip_A.gotoAndPlay( 1 );

   //Aが再生中であるという情報を記録
   a_flg = true;
  }
 }

最初は a_flg の中身は false ですので、最初にボタンAにカーソルが重なった時はこれで上手くいきます。
しかし、1度ボタンAの上にカーソルが重なってAが再生されると、a_flg の中身は true に変わります。以降、ボタンにカーソルが重なっても if 文の条件は不成立になりますから、Aは再生されません。
カーソルが重なる度に再生できるようにするには、Aの再生が終了した時に、a_flg を false に直す必要があります。
Aの再生が終わる場合とは、Aのタイムラインが最後まで再生された時、つまり、先ほど stop(); を入れたフレームです。このフレームに、

 _parent.a_flg = false;

というスクリプトを設定します。
_parent は親(1つ上の階層)のタイムラインを参照する時に指定するものです。
a_flg はメインのタイムラインにある変数で、メインのタイムラインとは、clip_A から見ると親にあたります。その、親の持つ変数を参照するには、親までのターゲットパスが必要になります。


さしあたって、こんなところでいかがでしょうか。
長くなってすみませんでした。
不明な点がありましたら、補足してください。
    • good
    • 0
この回答へのお礼

ありがとうございます!
望んでいた動きができたので非常に感謝しております。
詳しくわかりやすいご説明ありがとうございました。
今後また質問させていただくことがあるかもしれませんが、そのときはまたよろしくお願いいたします。

お礼日時:2004/09/19 19:57

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