- ベストアンサー
○秒後にフレーム移動
たとえば3フレーム目で静止をして20秒たったら、4フレーム目へ移動、ということがしたいのですが、どのようにスクリプトをかけばいいのでしょうか? FLASH5です。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
Flash MX なら、○秒ごとに指定の関数を呼び出す setInterval という関数が使えるところですが、Flash 5 でタイマーの処理をするとなると、少々工夫が必要です。 Flash Player 4 以降から使える getTimer を利用して、このようにしてみてはいかがでしょう。 getTimer はムービーが再生されてからの時間をミリ秒で返します。 変数を2つ用意します。その1つ(仮に before_time とします)に、前のフレームでの getTimer の戻り値を保存しておきます。 すると、今のフレームでの getTimer の戻り値との差で、前のフレームからどのくらい時間が経過したかを知ることができるようになります。 この経過時間の差を、もう1つの変数(仮に lag とします)に蓄積していきます。 getTimer の単位はミリ秒ですので、20秒=20000ミリ秒となります。lag の値が 20000 以上であれば、20秒経過したと見なすことができます。フレームレートの都合上、数ミリ秒の誤差が生じますが、ご容赦ください。 フレームごとの経過時間は、onClipEvent の enterFrame イベントハンドラを利用して計ります。ムービークリップであれば何でもいいのですが、専用のムービークリップを1つ用意(絵は適当でも、なくても構いません)し、これを非表示にしてステージに置いておくといいでしょう。 例えば、timer というムービークリップがあるとします。フレーム3にキーフレームを設定し、 timer をステージのどこかに置きます。アルファを0にするか、onClipEvent の load イベントハンドラを使ってロード直後に _visible プロパティを false にし、非表示にします。 このムービークリップで、時間の計測とメインのタイムラインのフレーム移動の処理を一括して行います。 なお、フレーム4に移動すれば timer の役割は終わりですので、フレーム4以降はステージに置いておく必要はありません。メインのアニメとは別に、専用のレイヤーを作って管理すると、分かりやすくなるかと思います。 timer に設定するスクリプトは、大体、このような感じになります。 (↓ このスクリプトをコピーして利用する場合は、各行の行頭に入っている全角のスペースを、全て半角のスペースかタブに置き換えてください。このまま使うとシンタックスエラーになります) //初期設定 onClipEvent( load ) { //前のフレームでの経過時間を保存する変数 //初期値は現時点での経過時間 before_time = getTimer(); //前のフレームとの経過時間の差を管理する変数の初期化 lag = 0; //自分自身を不可視にする this._visible = false; } //20秒後にフレーム4へジャンプ onClipEvent( enterFrame ) { var now_time; //現フレームでの経過時間を計測 now_time = getTimer(); //前フレームとの経過時間の差を蓄積 lag += now_time - before_time; //現フレームの経過時間を保存 before_time = now_time; //蓄積された差が20000以上であれば20秒経ったと見なし、 //メインのタイムラインを動かす if ( lag >= 20000 ) { _root.gotoAndPlay( 4 ); } } この方法をもう少し工夫すると、○秒ごとに一定の処理を行う、MX で追加された setInterval と同様の処理にもなります。 以前、5秒ごとに処理を行うには・・・という質問で、やはり getTimer を使ったスクリプトを紹介したことがあります。実は、基本的な考え方は全く同じですので、よろしかったら覗いてみて下さい。
お礼
回答ありがとうございます。 無事にgetTimerでやりたいことができました。 ありがとうございました。