• 締切済み

一定時間が経過した後のフレーム移動について

Flash初心者です。うまく質問したいことが伝わるか心配ですが、どうぞ宜しくお願いします。 タブメニュー型のムービーを作成していまして、10秒経過すると次のタブが開き、 また10秒すると次のタブが開く…。このループです。 タブの数は4つ。1フレームごとにそれぞれのタブが開いているように画像で見せておいて(計4フレームを使用)、 スクリプトで10秒の間隔をおき、次のフレームに移動させる仕組みになっています。 タブにはクリックできるようにボタンが仕込んであり、クリックするとムービーの流れ(再生されている順)に関係なく、 そのタブに移動します(2つ目のタブなら2フレーム目を再生)。 (タブの部分のテキスト、タブが開いたときに表示されるバナー画像は外部読み込みになっています。 ただ、この外部読み込みに関しては質問の内容に影響しないと思いますので詳しくは説明しないでおきます。) スクリプトは下記のとおりです。(注:教えて!gooにあったものを使わせていただきました。) ※1フレーム目 --------------------------------------------------------------------- this.stop(); timerID = setInterval(startMovie, 10000); function startMovie() { gotoAndPlay(2); clearInterval(timerID); } ※2フレーム目 --------------------------------------------------------------------- this.stop(); timerID2 = setInterval(startMovie2, 10000); function startMovie2() { gotoAndPlay(3); clearInterval(timerID2); } ※3フレーム目 --------------------------------------------------------------------- this.stop(); timerID3 = setInterval(startMovie3, 10000); function startMovie3() { gotoAndPlay(4); clearInterval(timerID3); } ※4フレーム目 --------------------------------------------------------------------- this.stop(); timerID4 = setInterval(startMovie4, 10000); function startMovie4() { gotoAndPlay(1); clearInterval(timerID4); } これでちゃんと10秒経過すると次のフレームに移動し、それがループされるのですが 問題は、途中で順に再生されているタブと違うタブをクリックしたときに起こります。 一度、その再生順がクリックすることによって変わってしまうと、元々の『10秒後に次のフレームへの移動』の動きと、 クリックされたタブから『10秒後に次のフレームへの移動』の動きが重複しているようなんです。 ちゃんと確認できたわけではありませんが、複数回これを繰り返すと4つのタブがかなりの速度でパッパッパと遷移し、 まともに見ることすらできないものになってしまいます。 解決したいのは、クリックしたタブ(移動したフレーム)から新たに10秒がカウントされ、10秒後には次のフレームに移動し 10秒経過する前に他のタブをクリックしたときでも、そのタブ(フレーム)に移動してからまた新たに10秒がカウントされる…。 このようにするにはどうしたらいいでしょうか? どうぞご教示ください。

みんなの回答

  • perse
  • ベストアンサー率74% (113/152)
回答No.1

1フレームが1つのタブならgotoAndPlayではなくてgotoAndStopでは無いでしょうか? とりあえずコンナ感じでどうでしょうか? タブへ移動するボタンのインスタンス名をtab1_btn~tab4_btnとして 1~4フレーム目にそれぞれ配置して以下のASを1フレーム目に記述してください。 this.stop(); //タブが移動する間隔 (ミリ秒) t = 10000; //タブのフレーム位置 var tab1 = 1; //タブ1は1フレーム目 var tab2 = 2; var tab3 = 3; var tab4 = 4; //次に移動するタブ var nexttab = tab2; var id; //再びこのフレームが表示されたとき用 clearInterval(id); //tミリ秒後に次のタブへ移動するようにsetInterval id = setInterval(startMovie, t); //タブ1クリック時 tab1_btn.onRelease = function() { //押したタブへフレーム移動 _root.gotoAndStop(tab1); //setInterval取り消し clearInterval(_root.id); //次に移動するフレーム _root.nexttab = tab2; //setInterval設定 _root.id = setInterval(startMovie, t); }; //以下同様 tab2_btn.onRelease = function() { _root.gotoAndStop(tab2); clearInterval(_root.id); _root.nexttab = tab3; _root.id = setInterval(startMovie, t); }; tab3_btn.onRelease = function() { _root.gotoAndStop(tab3); clearInterval(_root.id); _root.nexttab = tab4; _root.id = setInterval(startMovie, t); }; tab4_btn.onRelease = function() { _root.gotoAndStop(tab4); clearInterval(_root.id); _root.nexttab = tab1; _root.id = setInterval(startMovie, t); }; //フレーム移動関数 tミリ秒間隔で実行される function startMovie() { //フレーム移動 _root.gotoAndStop(_root.nexttab); _root.nexttab++; if (_root.nexttab>_root.tab4) { _root.nexttab = _root.tab1; } }

ishippy
質問者

お礼

早速、お答えをいただきましてありがとうございます。 ご教示いただいたASで新たにムービーを作ってみたのですが 思ったようなムービーになりませんでした。 ただ、10秒なら10秒を、タイムラインで時間を取るようにする (12fpsなので10秒は120フレームまでフレームを取る) 方法で、今回のこのムービーを作成し、なんとか自分が 思い描いていたものが作れました。 考え方として、今回、お教えいただいた方法は非常に参考に なりました。本当にありがとうございました。

関連するQ&A