• ベストアンサー

flashのActionscriptでのムービーとの連携(再生、停止)

if文で値によってgotoAndPlayで指定フレームへ移動しムービーを再生させ、そのフレームが再生されたら、再生後でムービー止めその状態を保持したまま、プログラムへ戻り次の処理をし、その値に応じたフレームへ移動しムービーを再生させていくという繰り返しをしたいと思ったのですが、ネットで調べたり本などを呼んでも解決策が見つかりません。困ってます。 flash MX でこのような事をするのは無理なのでしょうか?アドバイスくださいお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.2

No.1で回答した者です。 フレーム1 に書くスクリプトを書き間違えて意味不明なスクリプトになっていることに今気づきました。 訂正させていただきます。 また,注釈行は入れない方がわかりやすい気もしたので取ります。 stop(); function my_program() { var my_hensuu = Math.floor(Math.random()*3); if (my_hensuu == 0) { gotoAndPlay(30); } else if (my_hensuu == 1) { gotoAndPlay(50); } else if (my_hensuu == 2) { gotoAndPlay(80); } } my_program();

その他の回答 (1)

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

具体的なスクリプトを書かれていないため, 具体的に答えることができませんが, その if文 の分岐するステートメントを function で関数に定義してしまって, 定義した関数を,各フレームの最後で実行させれば良いのではないでしょうか。 具体的には答えられないので,こちらで勝手に決めたサンプルで書きます。 _root のタイムラインが 100フレームあったとします。 まず最初のフレーム(フレーム1)に以下のように書きます。 ・・・・・・・・・・・・・・・・・・・・・・・・ //とりあえずストップ(安全策です。無くても良いです。) stop(); //関数 my_program の定義 function my_program() { //変数 my_program に 0~2 のランダムな整数を代入 var my_program = Math.floor(Math.random()*3); //もし,変数 my_program の値が 0 であれば if (my_hensuu == 0) { //フレーム30 に gotoAndPlay gotoAndPlay(30); //もし,変数 my_program の値が 1 であれば } else if (my_hensuu == 1) { //フレーム50 に gotoAndPlay gotoAndPlay(50); //もし,変数 my_program の値が 2 であれば } else if (my_hensuu == 2) { //フレーム80 に gotoAndPlay gotoAndPlay(80); } } //関数 my_program の実行 my_program(); ・・・・・・・・・・・・・・・・・・・・・・・・ これで,乱数により,フレーム30 もしくは 50 もしくは 80 に飛ぶ関数が定義できて, その関数が,最後の行の my_program(); によって実行されます。 _root のタイムラインが 100フレームあったとしますから, フレーム100 にキーフレームを作って,そこには, ・・・・・・・・・・・・・・・・・・・・・・・・ my_program(); ・・・・・・・・・・・・・・・・・・・・・・・・ と書くと,最初に定義した 関数my_program が実行されます。 同様に,フレーム49 にも フレーム79 にも,キーフレームを作って ・・・・・・・・・・・・・・・・・・・・・・・・ my_program(); ・・・・・・・・・・・・・・・・・・・・・・・・ と書けば最初に定義した 関数my_program が実行されます。 >> 再生後でムービー止めその状態を保持したまま、 と書かれている意味が良くわかりませんが, フレーム100,49,79に ・・・・・・・・・・・・・・・・・・・・・・・・ stop(); ・・・・・・・・・・・・・・・・・・・・・・・・ を書いておいてムービー止め, そのフレームにボタンシンボルを用意して, ・・・・・・・・・・・・・・・・・・・・・・・・ on (release) { my_program(); } ・・・・・・・・・・・・・・・・・・・・・・・・ でも同様にできます。

remonedo
質問者

お礼

サンプルを作って丁寧に説明してくださりありがとうござます。さっそく明日試してみたいと思います。

remonedo
質問者

補足

スクリプトの途中だけの部分ですが・・・・ 再帰の中で // ここで実際に○を移動させる Pofmaru1(l); Pofmaru2(r); 再帰の外で // maru1を移動させる関数Pofmaru1 function Pofmaru1(l) { if (l == 1) { gotoAndPlay("maru1",2); }else if (l == 2) { ・・・・・・ // maru2を移動させる関数Pofmaru2 function Pofmaru2(r) { if (r == 1) { gotoAndPlay("maru2",2); }else if (r == 2) { ........ と言った感じで書いています。

関連するQ&A