• ベストアンサー

AS3でムービークリップ再生・早送り・巻き戻し

フラッシュ AS3 初心者です。 シーン1に配置されたムービークリップ(mc)を、再生・早送り・巻き戻し・停止ボタンでコントロールしたいのですがよくわかりません。 早送り・巻き戻しは速度を設定で変えられるとうれしいです。

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

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

もうすでに自力で解決されていらっしゃるとは思いますが念のため。。。 このご質問の後にされている質問 「ムービークリップを1コマ飛しで再生」 (OKWave系の代表3サイト) http://okwave.jp/qa/q6787543.html or http://okwave.jp/qa/q6787543.html or http://oshiete1.nifty.com/qa6787543.html などなどなど... ここ↑で書かれていらっしゃる内容(仕様)に従うこととしてよろしいでしょうか? その場合,次のような感じになると思います。 ステージ上に用意するインスタンスは次の5つであるとします。 「mc」:再生/逆再生などをさせるムービークリップ 「back2_btn」:mc内を高速逆再生させるボタン 「back1_btn」:mc内を逆再生させるボタン 「stop_btn」:mc内の再生を止めるボタン 「next1_btn」:mc内を普通に再生させるボタン 「next2_btn」:mc内を高速再生させるボタン これらが存在するフレームに書くスクリプト例です。 //================================== //早送り時のスピードを設定 (★可変) var high_spd:int = 3; //特殊再生時のスピードの変数の宣言 var spd:int; //---↓back2_btn↓------ //「back2_btn」押下時に 関数onBack2Press を実行 back2_btn.addEventListener(MouseEvent.MOUSE_DOWN,onBack2Press); //関数onBack2Press の定義 function onBack2Press(e:MouseEvent):void { //特殊再生時のスピードを -high_spd にする spd = - high_spd; //共通で使用する関数 commonFunc を実行 commonFunc(); } //---↓back1_btn↓------ //「back1_btn」押下時に 関数onBack1Press を実行 back1_btn.addEventListener(MouseEvent.MOUSE_DOWN,onBack1Press); //関数onBack1Press の定義 function onBack1Press(e:MouseEvent):void { //特殊再生時のスピードを -1 にする spd = -1; //共通で使用する関数 commonFunc を実行 commonFunc(); } //---↓stop_btn↓------ //「stop_btn」押下時に 関数onStopPress を実行 stop_btn.addEventListener(MouseEvent.MOUSE_DOWN,onStopPress); //関数onStopPress の定義 function onStopPress(e:MouseEvent):void { mc.stop(); } //---↓next1_btn↓------ //「next1_btn」押下時に 関数onNext1Press を実行 next1_btn.addEventListener(MouseEvent.MOUSE_DOWN,onNext1Press); //関数onNext1Press の定義 function onNext1Press(e:MouseEvent):void { mc.play(); } //---↓next2_btn↓------ //「next2_btn」押下時に 関数onNext2Press を実行 next2_btn.addEventListener(MouseEvent.MOUSE_DOWN,onNext2Press); //関数onNext2Press の定義 function onNext2Press(e:MouseEvent):void { //特殊再生時のスピードを high_spd にする spd = high_spd; //共通で使用する関数 commonFunc を実行 commonFunc(); } //---↓特殊再生用の関数群↓------ //共通で使用する関数 commonFunc の定義 function commonFunc():void { //毎フレーム 関数specialPlay を実行 mc.addEventListener(Event.ENTER_FRAME,specialPlay); //stageからマウスアップ時に 関数onStageUp を実行 stage.addEventListener(MouseEvent.MOUSE_UP,onStageUp); } //関数specialPlay の定義 function specialPlay(e:Event):void { //spdが正の数で mc内のフレームが最終フレームに達したとき if (spd >= 0 && mc.currentFrame == mc.totalFrames) { //mc内フレームをフレーム1に戻す mc.gotoAndStop(1); //spdが負の数で mc内のフレームがフレーム1に達したとき } else if (spd < 0 && mc.currentFrame == 1) { //mc内フレームを最終フレームに進める mc.gotoAndStop(mc.totalFrames); } //mc内のフレームを spdフレーム 進めて停止 mc.gotoAndStop(mc.currentFrame + spd); } //関数onStageUp の定義 function onStageUp(e:MouseEvent):void { //毎フレーム 関数specialPlay を実行するのをやめる mc.removeEventListener(Event.ENTER_FRAME,specialPlay); //stageからマウスアップ時に 関数onStageUp を実行するのをやめる stage.removeEventListener(MouseEvent.MOUSE_UP,onStageUp); //「mc」内タイムラインの再生を開始 (★要る?) mc.play(); } //================================== 特殊再生である 「高速逆再生」と「逆再生」と「高速再生」は結局どれも同じことをさせています。 メインは関数 specialPlay(エッチなプレーや変態プレーではありません) です。 同じことをさせるのですが, それぞれのボタンによって 関数specialPlay を実行させるときの変数spd(スピード)の値を変えています。 この spd の値だけが違う部分です。 こうしておけば,ほとんど同じ関数を何度も定義する必要がなくなりますよね。

koocom
質問者

お礼

BlurFiltan 様 引き続きありがとうございます。 自力で頑張っていたのですが・・・・うまく動かず困り果てていました。 動きました。助かりますありがとうございます。 アクションスクリプトは、まだ理解できませんが負けずに勉強します。

すると、全ての回答が全文表示されます。