• ベストアンサー

ムービーの早送りと巻き戻しがしたい

Flash8を使っています。 ムービーを早送りと巻き戻しボタンで制御したいのです。 シーン1には120フレームあり、シーン2には150フレームあります。 巻き戻しはそれぞれのシーンの1フレーム目まで、早送りは最後のフレーム(シーン1なら120、シーン2なら150)までとします。 ボタンを押している間だけ早送り(巻き戻し)をして、離した時はその位置で再生をストップしたいのですが、どの本を読んでも分からず困っています。 どうか教えてください。 よろしくお願い致します。

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

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

ボタンを押している間、フレームを進ませるという処理を繰り返し実行させればできます。 setIntervalを使用します。 一定の間隔(ミリ秒)で指定した処理を繰り返してくれます。1000ミリ秒=1秒です。 ボタンを押したときにsetIntervaに50ミリ秒間隔で5フレームずつ動かしてくれと頼んで ボタンを離したときに動かすのをやめさせます。 もちろん何ミリ秒間隔で何フレーム動かすかは自分で決められます。 早送りボタンと巻き戻しボタンをフレームに配置します。 インスタンス名はokuru_btn、modosu_btnとしてください。 以下のASをフレームにコピペしてください。 _root.stop(); // // setIntervalをやめるときに使用 var id:Number; // 送り戻しする間隔 var Interval:Number = 50; // 送り戻しするフレーム数 var moveFrame = 5; // Interval=50でmoveFrame=5の場合、 // 50ミリ秒に5フレームずつ動く // //------------------------------------- // フレーム移動させる関数(setIntervalで呼び出す) // m : 移動させるフレーム数 // (早送り時は正の数、巻き戻し時は負の数) //------------------------------------- function Move(m:Number) { if (_root._currentframe+m<1) { //移動先が1より小さい場合1フレーム目に移動 _root.gotoAndStop(1); } else { _root.gotoAndStop(_root._currentframe+m); } } //----------------------- // 送り戻しする関数 // c=0 : 送り戻し停止 // c=1 : 早送り // c=-1: 巻き戻し //----------------------- function Control(c:Number) { if (c == 0) { clearInterval(_root.id); } else { _root.id = setInterval(_root.Move, _root.Interval, c*_root.moveFrame); //setIntervalを実行した直後にMove関数は呼ばれない。 //(Move関数が呼ばれるのは_root.Intervalミリ秒後) なので自分で呼ぶ _root.Move(c*_root.moveFrame); } } //早送りボタンを押したとき _root.okuru_btn.onPress = function() { _root.Control(1); }; //巻き戻しボタンを押したとき _root.modosu_btn.onPress = function() { _root.Control(-1); }; //早送りボタンと巻き戻しボタンを離したとき //(onReleaseはマウスをボタンの上で離したときで // onReleaseOutsideはボタンの外側で離したとき) _root.okuru_btn.onRelease = _root.okuru_btn.onReleaseOutside =_root.modosu_btn.onRelease =_root.modosu_btn.onReleaseOutside=function () { _root.Control(0); };

vita622love
質問者

お礼

お礼が大変遅くなり申し訳ありませんでした。 このスクリプトをコピペして無事動きました。いつかこのスクリプトが理解できるようになりたいです。本当にありがとうございました。

関連するQ&A

専門家に質問してみよう