数秒後に別フレームにとばす方法

このQ&Aのポイント
  • フレームを使って数秒後に別のフレームに遷移する方法について質問です。
  • 1フレーム目で画像を読み込み、10秒間表示させた後に2フレーム目でまた10秒間表示させる方法を試していますが、完全にフェードアウトする前に2フレーム目に遷移してしまいます。
  • gotoAndStop()を消すとフェードアウトせずにループしますが、フェードアウトした後に遷移する方法はないでしょうか?
回答を見る
  • ベストアンサー

数秒後に別フレームにとばす方法

1フレーム目で画像を読み込み10秒表示させた後に2フレーム目でまた10秒表示させるといった事を試しています。 表示させる画像はムービークリップで最後の1秒でフェードアウトさせるようにしているのですが 完全にフェードアウトする前に2フレーム目に飛んでしまいます。 何か解決方法はないのでしょうか?? 1フレーム目 ---------------------------------------------------------- this.stop(); timerID = setInterval(startMovie, 10000); function startMovie() { clearInterval(timerID); gotoAndStop(2); } 2フレーム目 ---------------------------------------------------------- this.stop(); timerID = setInterval(startMovie, 10000); function startMovie() { clearInterval(timerID); gotoAndStop(1); } ちなみにgotoAndStop();を消すとそのフレームでループしますが完全にフェードアウトしてくれます…。

  • cage4
  • お礼率50% (1/2)
  • Flash
  • 回答数2
  • ありがとう数1

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

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

#1です。 > ムービークリップシンボルは全て10秒で作っています。 ??? そんなことは誰もできません。 約10秒ならできなくもありませんが, "秒" などというものは普通は考えられません。 「次の "ページ" にうつる。」 とか, 「ムービークリップ内を "10秒" で作る。」 とか, Flash を操作する上で全く出てこないものは通用しないと思った方が良いです。 「ムービークリップ内を10秒で作る」 というような設定やスクリプトは,現にないでしょう。 ムービークリップ内のタイムラインを, 仮に 120フレーム で作成したのであれば, その最終フレームでたる フレーム120 の任意のレイヤーをキーフレームにして, そのキーフレームに, _root.gotoAndPlay(2); などを書けば良いのではないかと思いますが...。 ------------------------------------------- > 以下のサイトのようなフラッシュを作りたいです。 > http://www.mazda.co.jp/home.html その内部構造がどうなっているのかわかって書いていらっしゃるのですか? 少なくとも私にはわかりませんよ。 したがって,そういうイメージ的なものを持ち出されても, 具体的なスクリプトなど書けません。 そういうものを持ち出されるよりは,まだ, それ以外の部分で説明してくださっている "ムービークリップシンボルは全て10秒で作っています。" のほうがわかりやすいです。

cage4
質問者

お礼

>>#1さん できましたぁ!! 言われたとおり、やってみるとイメージ通り動きましたっ!! 色々とフラッシュ制作上の概念など勉強させてもらい感謝します。 また、何かあればよろしくお願いします!

その他の回答 (1)

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

そもそも setInterval を使うところが間違っている、 というか普通そういうことは発想しないことだと思いますよ。 > ちなみにgotoAndStop();を消すとそのフレームでループしますが > 完全にフェードアウトしてくれます…。 その完全に フェードアウト したときに、 _root.gotoAndStop(2); をすればいいだけだと思います。 というか、普通はそう考えます。 フェードインさせる方法などは無数にありますからどうしているのかは知りません。 知りませんが、 とにかくアルファ(_alpha)が 100 以上になったとき、 もしくは、 画像にかぶせているもののアルファが0以下になったとき、 もしくは、 明度が255になったとき、 もしくは、 アルファマスクが 100 になったとき、  ・・・などなど とにかく色々なとき ・・・ _root.gotoAndStop(2); すれば良いと思いますよ。

cage4
質問者

補足

すいません、言葉足らずでした。 以下のサイトのようなフラッシュを作りたいです。 http://www.mazda.co.jp/home.html 今の現状は シーン1の1フレーム目にムービークリップシンボルを配置して、 2フレーム目に別のムービークリップシンボルを配置させています。 ムービークリップシンボルは全て10秒で作っています。 それでシーン1のフレームで10秒経過した時に次のフレームに 飛ばしたいのですが… 初心者なので、よくわかっておらず申し訳ないです。

関連するQ&A

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

    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秒がカウントされる…。 このようにするにはどうしたらいいでしょうか? どうぞご教示ください。

  • 簡単なサンプルが動かないのはなぜ?

    超初心者です。 自力でがんばろうと、いろんなBBSの過去記事を除きやってるのですが 動きません。 たとえば //timerObjオブジェクトの設定 timerObj = new Object(); timerObj.timeout = function() { clearInterval(timerID); // インターバルの終了 }; //計測開始(5秒でタイムアウト) var timerID = setInterval(timerObj, "timeout", 5000); このようなサンプルを見つけ5秒間待つアクションを ちゃんとフレームアクションに入れました でも希望のとおり動きません。 初めは「制御」メニューのシンプルアクションをONにするのを知らずに やっていましたが、今は分かっています。 STOP(); だけのフレームアクションは利いていますので。。。 ちなみに //timerObjオブジェクトの設定 timerObj = new Object(); timerObj.timeout = function() { clearInterval(timerID); // インターバルの終了 stop(); }; //計測開始(5秒でタイムアウト) var timerID = setInterval(timerObj, "timeout", 5000); こうやってstop();をつけてもそこではとまりません。 シンタックスのエラーもないということは 何か設定かがおかしいのかもしれません。 もちろんキーフレームになっています。 もうちんぷんかんぷんです。 どなたかお助けを・・・・ VBAのソフト開発などはそれなりにしています。 なんでこんなこともわからんのか自己嫌悪になっております。

    • ベストアンサー
    • Flash
  • setTimeoutでの制御に関しまして

    初めて質問をさせて頂きます。よろしくお願い致します。 「mc_Image1」、「mc_Image2」、「mc_Image3」という 各ムービークリップをストップボタンを押した際に時間差で停止させたいのですが 「mc_Image2」、「mc_Image3」がstopがかからない状態が稀に生じたりします。 (ムービークリップは全て、1フレーム目にstop();、10フレーム目にgotoAndPlay(2);と設定) 少し端折っておりますが、スクリプトを記載いたします。 ---------------------------- //何回ルーレットしたかカウントする var count:Number = 0; //スタート/ストップボタンが押された押されていないかのフラグ var flg_StartStop:Boolean = false; // mc_Image停止待機速度変数(ミリ秒) var hensu1 = 2000; var hensu2 = 3000; //スタート/ストップボタンを押した時に呼び出される関数 btn_StartStop.onPress = function() { if(flg_StartStop) { //選ばれたフレームに飛ぶ mc_Image1.gotoAndStop(parseInt(one)+1); // setInterval で hensu(ミリ秒)後に_root.gotoAndStop(); を実行 stopID = setInterval(function () { _root.mc_Image2.gotoAndStop(parseInt(two)+1); clearInterval(stopID); }, hensu); stop2ID = setInterval(function () { _root.mc_Image3.gotoAndStop(parseInt(three)+1); clearInterval(stop2ID); }, hensu2); //押されたかどうかの変数を「偽」に flg_StartStop = false; //カウンタを増やす count++; } else { //ムービークリップを走らせる mc_Image1.play(); mc_Image2.play(); mc_Image3.play(); //押されたかどうかの変数を「真」に flg_StartStop = true; } } ---------------------------- 。 きちんと「gotoAndStop();」させるにはどのように対処すれば よろしいでしょうか。 不足がございましたら申し訳ありません。 何卒よろしくお願い致します。

  • スライドの表示とアクションスクリプトの関連

    こんにちわ。 現在、プレゼン風のスライドを作成しております。 親スライドがあり、その下に子スライドを数個作成しております。また、その子スライドにアクションを配置した仕様にしております。 また、アクションは、以前にこちらのサイトで教えていただきました、時間指定のアクションなのですが、子スライド2が表示されて数秒後に子スライド2内の指定のフレームに移動するアクションスクリプトを記述しています。というか、そういう風にしたいと想っています。 親スライド   |   子スライド1ー静止画   |   子スライド2-時間指定のスクリプト this.stop(); timerID = setInterval(startMovie, 28000); timerID2 = setInterval(startMovie2, 31000); function startMovie() { gotoAndPlay(5); clearInterval(timerID); } function startMovie2() { gotoAndPlay(10); clearInterval(timerID2); } 上記スクリプトは、子スライド2内の1フレーム目に記述しています。 また、各スライドの切り替えは、mediaDisplayのパラメーターで映像に合わせて、時間指定で切り替えています。 上記、スクリプトは稼動するのですが、スライド2が表示されてからではなく、全体が再生されてからの時間で動いてしまいます。 ですので、スライド1が表示されている裏でスライド2のアクションが動いてる感じです。 スライド2が表示されてから、アクションスクリプトが動くようになるには、どういう風に指定すればよいのでしょうか? ほかのとこでも聞いたのですが、ちょっと利き方が悪いのか、お返事がなくて。。。

  • 画像がフェードイン・アウトするクラスの作り方教えて..

    前置き:別に困っているわけでもありません ・こんな質問許されないかも(ご容赦を) ・自分で勉強しろと言われるかも(ごもっとも) ・ごみプログラムがさらにごみプログラムを生んでいるかも(ごめんなさい) 本題: いつぞやのタイトルくるくるのサンプルを基に、画像がフェードイン、 フェードアウトするオブジェクト指向っぽいスクリプトを作りました。 下のソースです。スタイル属性の変更をwindow.setIntervalを使って counter値に達するまでループ実行しているだけです。 似たような処理のfadeinクラスとfadeoutクラスを作って、  fadein.start(ターゲット,インターバルミリ秒);  fadeout.start(ターゲット,インターバルミリ秒); でフェードイン、フェードアウトを開始していますが、 fadeinクラスとfadeoutクラスをfadeinoutクラス一つにまとめちゃって、 fadeinoutクラスのメソッド(?)としてfadein、fadeoutを使えるように するには、どうやって作ればよいのかと言うのが質問です。 本当は、  var myobj = new fadeinout(ターゲット,インターバルミリ秒); とインスタンスして  myobj.fadein;  myobj.fadeout; みたく使うためのコーディングがよくわからんのです。 抜本的に書き換えた方がよいのでしょうか... <作ったサンプル> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <title>FadeIn/FadeOut</title> <style type="text/css"></style> <script type="text/javascript" charset="utf-8"> <!-- var fadein = function (node,interval){ this.counter = 0; this.target = node; this.interval = interval; this.timerId = setInterval((function(that){ return function(){that.loop();}; })(this),this.interval); this.stop = function () { this.timerId && clearInterval(this.timerId); this.timerId = null; }; this.loop = function(){ this.target.style.width=this.counter+"px"; this.target.style.height=this.counter+"px"; this.target.style.opacity = this.counter / 100; this.target.style.filter = "alpha(opacity=" + this.counter + ")"; if( ++this.counter>100) this.stop(); }; }; var fadeout = function (node,interval){ this.counter = 100; this.target = node; this.interval = interval; this.timerId = setInterval((function(that){ return function(){that.loop();}; })(this),this.interval); this.stop = function () { this.timerId && clearInterval(this.timerId); this.timerId = null; }; this.loop = function(){ this.target.style.width=this.counter+"px"; this.target.style.height=this.counter+"px"; this.target.style.opacity = this.counter / 100; this.target.style.filter = "alpha(opacity=" + this.counter + ")"; if( --this.counter<0) this.stop(); }; }; fadein.start = function(target,interval){ new fadein(target,interval ); } fadeout.start = function(target,interval){ new fadeout(target,interval ); } function fadein_s(){ var target=document.getElementById("target"); fadein.start(target,1); } function fadeout_s(){ var target=document.getElementById("target"); fadeout.start(target,1); } // --> </script> </head> <body> <div> <image id="target" src="image/yahagi.png" style="width:0px;height:0px;"> </div> <button onclick="fadein_s();">フェードイン</button> <button onclick="fadeout_s();">フェードアウト</button> </body> </html>

  • 一定時間停止後フレーム移動

    初心者ですがよろしくお願いします。 ActionScript3.0にて 一定時間後に任意のフレームまで戻るを実行したいのですが 一定時間止まらずにフレームまで戻ってしまいます。 下記の記述は間違ってますか? 一定時間停止の記述法は色々あるみたいですが いくつかやってみたところエラーばっか出て動きませんでした。 この記述だとちゃんと停止するのですが gotoAndPlay(10); を付けると停止しません。 this.stop(); this.iid = setInterval (function (m) { m.play (); clearInterval (m.iid); }, 3000, this); gotoAndPlay(10);

    • ベストアンサー
    • Flash
  • clearIntervalの記述方法について

    よろしくお願い致します。 jQueryにて「setInterval」を使用して、オープニングムービー(?)のようなものを作りたいと思い、見よう見まねで下記のようなコードを作りました。 取りあえず動作するようになったのですが、繰り返し動作を止めるための「clearInterval」の使い方が分かりません。 この場合、どのようにコードを記述すればよいのでしょうか? お手数ですが、どうぞご教授下さいますようお願い致します。 $(document).ready(function(){ $("#A").fadeTo(0,0); $("#B").fadeTo(0,0); $("#C").fadeTo(0,0); var timerId1 = setInterval(function(){ $("#A").fadeTo(1000,1); var timerId2 = setInterval(function(){ $("#B").fadeTo(1000,1); var timerId3 = setInterval(function(){ $("#C").fadeTo(1000,1); }, 1000); }, 1000); }, 1000); });

  • ActionScript3.0フレーム移動について

    お世話になります。 Flash ActionScript3.0で、ボタンをクリックしたら、 階層違いのシーンに移動するという 単純なところでつまずいています。 一番上の階層には、 1フレーム目 フレームラベル "a" 2フレーム目 フレームラベル "b" として、それぞれ this.stop();を書いてあります。 "a""b"には、それぞれムービークリップが配置してあって、 今やりたいことは、"a"に配置してあるムービークリップの 2つ下(中?)の階層にあるボタンをクリックしたら、一番上の階層の"b"に移動して、 "b"に配置してあるムービークリップを表示するようにしたいのです。 "a"のムービークリップのボタンのあるフレームには、 this.stop(); button01.addEventListener(MouseEvent.CLICK,jumpB); function jumpB(event:MouseEvent):void { MovieClip(parent.parent).gotoAndStop("b"); } と書いてみましたが、 [TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。] と怒られます。 試しに MovieClip(stage).gotoAndStop("b"); とか、"b"に配置してあるムービークリップにインスタンス名"b_mc"を与えて MovieClip(parent.parent).b_mc.play(); などと苦し紛れにやってみましたが、すべて同じように怒られます。 どのようにすれば、下の階層から一番上の階層の別フレームに 移動することができますでしょうか? よろしくお願い致します。

  • 関数を順番に実行したい AS3

    ムービークリップ(mc)の3つのフレームを順番に1秒づつAS3で表示させたい。 フレームレートは12fpsの場合、 関数 play1,play2,play3 の順番で12回ずつ実行すればよいのでは? と思いましたがどうしたら良いか教えてください。 (12fpsで1秒づつ表示したい、ループはしない) function play1(evt:Event):void { evt.target.gotoAndStop(1); } function play2(evt:Event):void { evt.target.gotoAndStop(2); } function play3(evt:Event):void { evt.target.gotoAndStop(3); }

    • ベストアンサー
    • Flash
  • setTimeoutあるいはsetIntervalの限界

    いつもお世話になっています。 タイマーの実験をしてみようかと思い、タイマー関数のサンプルをちょっと触ってみて、気になることがありました。 スクリプトとしては、次のようなものです。 <HTML> <HEAD> <SCRIPT Language="JavaScript"> <!-- timerID = 10; count = 0; function timerX(){ status = "Counter is " + count++; } function clr(){ clearInterval(timerID); } // --> </SCRIPT> <BODY bgColor="white" onLoad="timerID = setInterval('timerX()',1000);"> (以下略) このスクリプトを実行すると、1秒毎に1カウント増えていきますから、ステータスに表示される数値は10秒で10になります。 ですから、1を指定する、つまりsetInterval('timerX()',1);にすれば、論理上、10秒で10000になるはずですよね? ところが実際にステータスに出る数値はそうはならず、かなり低い数字になってしまいます。 そこで質問なのですが、setTimeoutまたはsetIntervalでタイマーを作る場合、ミリ秒はどのくらいまで有効なのでしょうか。 ひょっとして、マシンに依存するのでまちまちなのでしょうか。 経験等でご存じの方、お教えください。

専門家に質問してみよう