Actionscriptでのムービーとのタイミング処理

このQ&Aのポイント
  • FlashのActionscriptでのムービーとのタイミング処理について困っています。再帰の中でフレーム移動の関数を呼び出しているため、タイミング処理がうまくいかず困っています。
  • ムービーの移動先フレームに目的の場所へ移動するムービーを呼び出して再生したいですが、最後のムービーだけしか表示されません。再帰の中でフレーム移動の関数を呼び出しており、タイミング処理の方法がわかりません。
  • Actionscriptとムービー再生のタイミング処理についてアドバイスをいただきたいです。プログラムが得意ではないため、どうしたら良いのかわかりません。
回答を見る
  • ベストアンサー

flashのActionscriptでのムービーとのタイミング処理

スクリプトの途中だけの部分ですが 再帰の中で // ここで実際に○を移動させる 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) { ........ として、移動先のフレームにmaru1,maru2を目的の場所へ移動するムービーを呼び出して再生するようにしたいと思いました。 しかし、最後のムービーだけしか表示さえれない状態です。if文で指定のフレームへ移動してそのムービーが再生されてから、次のプログラムの動きへ移るようにしたいと思いました。そこでタイミング処理をすればいいのではないかと思ったのですが、いろいろ調べてみたのですが、プログラムがあまり得意では無く、再帰の中でフレーム移動の関数を呼び出しているので、どうしたらいいのかわからず行き詰ってしまい困っています。Actionscriptとムービー再生のタイミング処理はどうしたらいいのでしょうか? アドバイスください。お願いします。

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

  • ベストアンサー
  • Tobiuo007
  • ベストアンサー率100% (2/2)
回答No.1

いまいち意味がよく分からないのですが どこか適当な所に変数をおいといて、その変数の値が1であればその変数に0を入れてムービー再生。再生が終了したら、ムービー側でその変数に1を入れる。 というような方法はどうですか?

remonedo
質問者

お礼

なるほど。ありがとうございます。試してみます。

remonedo
質問者

補足

やろうとしてみたのですが、再帰の中であるしで、イマイチ良くわからなく上手く行きませんでした・・・・・。

その他の回答 (2)

  • Tobiuo007
  • ベストアンサー率100% (2/2)
回答No.3

これだとムービー再生と再起が並列に行われてしまうんじゃないですか ムービー側でムービー終了時にメインとなるスクリプトを呼び出すか もしくは メインとなる部分もムービーのループにしてサブムービーが終了したかどうかを判定させて再起処理を行うか くらいしか思いつかないです。

  • Tobiuo007
  • ベストアンサー率100% (2/2)
回答No.2

お役に立てず残念です。 以前の質問等を見させてもらったのですが、 クイックソートのシミュレーションを作ろうとされているのですね 私もその再起の中という所が、いまいち意味がよく分かりません。 提示された部分だけからでは。 いつどこで自らを呼び出すのか見えてこないというのもあります。

remonedo
質問者

補足

// 用意された配列v_date[]をクイックソートする // 配列dのleftからrightまでの間のデータをクイックソートする関数quick function quick(d, left, right) { if (left>=right) { return; } trace("左は"+(left)); trace("右は"+(right)); var a = (left+right)/2; //基準値はとりあえず配列の中心の値で var b = Math.floor(a); //trace(b); var p = d[b]; trace("基準値は"+p); var l = left; var r = right; var tmp; while (l<r) { while (d[l]<p) { l++; } while (d[r]>p) { r--; } // ここで実際に○を移動させる Pofmaru1(l); Pofmaru2(r); if (l <= r) { // ここで値を交換 tmp = d[l]; d[l] = d[r]; d[r] = tmp; // ここで箱の移動が行われる trace("ソート過程"); print_data(d); l++; r--; } } if (left<r) { quick(d, left, r); } if (l<right) { quick(d, l, right); } } //配列内のデータ列を表示する関数print_data function print_data(d) { trace(d); } //最初の状態 v_data = [24, 26, 5, 21, 46, 7, 10, 33]; trace("ソート前の並び"); print_data(v_data); //最初の配列の状態を関数print_dataで表記 quick(v_data, 0, v_data.length-1); //配列v_dataを関数quickでクイックソートする trace("ソート後の並び"); print_data(v_data); //最後の配列の状態を関数print_dataで表記 といった感じです。

関連するQ&A

  • flash mxで処理を待機させておく方法は.....?

    以前にも質問させていただいたのですが、非同期処理であるという事にも手こずって、どうしても解決できなく行き詰ってしまっています。 スクリプトの途中だけの部分ですが 再帰の中で // ここで実際に○を移動させる 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) { ........ と書いてレイヤーmaru1とレイヤーmaru2の指定フレームへ移動しムービー再生後にソートプログラムへ戻り次の処理へ移るようにしたいのですがwhile文でflagを使い処理を待たせることを考えたのですがflashは非同期であるためflagの値のやり取りが上手く行きませんでした。 タイミング処理においてコールバック関数というものがあるという所に行き着いたのですがプログラムがあまり得意でなくイマイチ理解することができません・・。 flash mxで処理を待機させておくといったことを実現するにはどのように対処するといいのでしょうか? 何かアドバイスください。お願いします。

    • ベストアンサー
    • Flash
  • Actionscriptでのフレーム間の移動

    // ここで実際に○を移動させる 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) { ........ maru1を移動させる処理を呼んで、gotoAndplayでmaru1レイヤーの2フレーム目へ飛び、2フレーム目が再生されたら、次にクイックソートのプログラムに戻り、関数 Pofmaru2(r); を処理するようにしたいのですが、うまくいきません。C言語であれば普通if文の処理がされたら自動でプログラムに戻ってきて、Pofmaru2(r);の処理へ移ると思うのですが....Actionscriptはそうならないのでしょうか? ネットや本などで色々調べてみたのですが解決策が見つからず行き詰ってしまって困っています。 flash mxでプログラム通りにフレーム間を移動するようにするのは無理なのでしょうか?

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

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

  • flashのActionscriptについて

    レイヤーを指定して、gotoAndplay("レイヤー名",2)で、2フレームへ飛ぶようにすると、指定されたレイヤーだけが再生され、他のムービーの映像は映らないということになってしまうのでしょうか? 試してみたところ、その他の映像が映らなくなってしまっていたようだったのですが・・・。

  • FlashMXでウェイト処理

    数秒間のウェイトを入れたいとき、 [frame 1]--------------------------  start = getTimer();  limit = 2000; [frame 3]--------------------------  if( getTimer() > start + limit ){   gotoAndPlay( _currentFrame +1 );  }else{   gotoAndPlay( _currentFrame -1 );  } というようにぐるぐる回しているのですが、頻繁に使う処理なので サブルーチンにしようと思います。 ルートのタイムライン 1フレーム目に  function wait( start, limit, nowframe ){   if( getTimer() > start + limit ){    gotoAndPlay( nowframe +1 );   }else{    gotoAndPlay( nowframe -1 );   }  } と書きムービークリップの中から  wait( start(前のフレームで定義), 2000, _currentFrame ); 呼び出したのですが、goto先がムービークリップの中ではなく ルートタイムライン上のフレームになってしまいます。 よくよく考えれば当たり前です。 goto~をサブルーチン化して、呼び出し元のタイムラインに対し 処理させるということは出来ないのでしょうか。

  • FLASH CS5でnow loadingでランダム再生を読み込みたい

    FLASH CS5でnow loadingでランダム再生を読み込みたい FLASH CS5で10枚の画像(表示されいるのは1枚で、左右に隣の画像が少し見える感じ)があり、その下に右、左のボタンがありを押していくと、画像が切り替わっていくアニメなのですが 開始のフレームをアクセスする度に変わるランダムにしたいです。(開始の画像が入るたびに変わる) そのためにnow loadingですべてを読み込ませてからスタートさせないとなのですが、 1フレーム目に以下のタグを入れました。 このやり方だと、エラーがでます。 //再生停止 stop(); //イベントリスナーを登録 //(毎フレーム時間で実行,実行関数 goRnandom) this.addEventListener(Event.ENTER_FRAME,goRnandom); //関数 goRnandom の定義 function goRnandom(evt:Event):void { //変数 per にロードされたパーセントを取得 var per:Number = this.loaderInfo.bytesLoaded / this.loaderInfo.bytesTotal * 100; // //もしロードパーセンテージが 100 に達すれば if (per >= 100) { //登録したイベントリスナーを削除 this.removeEventListener(Event.ENTER_FRAME, goRnandom); //変数 rnd_num に 0以上1未満 のランダムな数を代入 var rnd_num:Number = Math.random(); if (rnd_num < 10 / 100) { gotoAndPlay(2); } else if (rnd_num < 10/100) { gotoAndPlay(8); } else if (rnd_num < 10/100) { gotoAndPlay(14); } else if (rnd_num < 10/100) { gotoAndPlay(20); } else if (rnd_num < 10/100) { gotoAndPlay(26); } else if (rnd_num < 10/100) { gotoAndPlay(32); } else if (rnd_num < 10/100) { gotoAndPlay(38); } else if (rnd_num < 10/100) { gotoAndPlay(44); } else if (rnd_num < 10/100) { gotoAndPlay(50); } else { gotoAndPlay(57); } } } どこか間違っている箇所はあるのでしょうか? 教えてください。

    • ベストアンサー
    • Flash
  • FLASHのActionScriptについて

    すみません。どなたか教えてください。  風景の画像が時間が来たら、次の風景が移る様にしたいのです。 静止している様に見える"2"のフレームを2フレームにして、2フレーム目に gotoAndPlay("シーン 1", "02") を入れてループさせています。120秒後に"03"フレームに移動させるよう、隠しオブジェクトに以下のスクリプトを記入しました。 onClipEvent (load) { beforeTime = getTimer(); n = 0; } onClipEvent (enterFrame) { nowTime = getTimer(); n = n+nowTime-beforeTime; beforeTime = nowTime; if (n>120000) { gotoAndPlay("シーン 1", "03"); n = 0; } } しかし、初めのgotoが無視されたように、書き出してしまいます。ここを Stop() にするとずーととまったままです。何か方法はないのでしょうか?

  • flash の ムービークリップの制御

     フレーム1にムービークリップmovieAがフレーム2にmovieBがあります。それぞれのムービーには連続して再生されないように、フレームの最後にstopを設定してあります。  フレーム1のムービーを再生した後に、ボタンなどを使わずに自動的にフレーム2のムービーを再生させたいのですが、一体どうすればよろしいのでしょうか?GotoAndPlayを1フレーム目に設定すると、movieAを再生せずに2フレーム目に行ってしまいます。それぞのムービークリップに設定しているstopがいけないのでしょうか?何かいい解決策はありますか?フラッシュ用の掲示板でお答えいただいたのですが、それでは解決せずこちらでお伺いすることに致しました・・・。(初歩的すぎてこれ以上聞きにくいし・・・泣)よろしくお願い致します。

  • 一定処理せずに待つアクションスクリプトを教えて下さい。

    こんにちは、 現在WinでFlash MXを使用してます。 getTimer関数を使用して待ち時間を作ってみたのですが動作しません。 現在作成したプログラムは ◆1フレーム目 startTime = getTimer(); timeOut = 3000; ◆2フレーム目 if( getTimer() > startTime + timeOut ){ gotoAndPlay(3); } else{ gotoAndPlay("lop"); } このようになっており、 ”3フレーム目”にジャンプしてほしいのですが、 ジャンプしません。 何故でしょうか?

    • ベストアンサー
    • Flash
  • flash5でムービーの制御

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

専門家に質問してみよう