1

スペースバーを 2 回押して時間を設定したい。次に、ムービークリップをその正確な時間だけ再生し、ループしてその設定した時間だけ再生したい、などです。スペースバーをもう一度 2 回押して別の時間を設定するまで。

    var beat:int;
var beatcount:int;
var tempopress:int;
var num:Number;

num = 0;
tempopress = 0;

stage.addEventListener(KeyboardEvent.KEY_DOWN,checker);
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.events.Event;



  var myTimer:Timer=new Timer(20,0);
  myTimer.addEventListener(TimerEvent.TIMER, stopWatch);



    function stopWatch(event:TimerEvent):void {
  beatcount = Number(myTimer.currentCount);

  }



    function checker(e:KeyboardEvent){  
     if(e.keyCode==Keyboard.SPACE){



  if (tempopress == 0) {
  trace('start');
  beatcount = 0;
  myTimer.reset();
  myTimer.start();
  tempopress = 1;

      } else {
          trace('stop');
          myTimer.stop();
          trace(beatcount);
          tempopress = 0;
          }


      }

 }


 stage.addEventListener(Event.ENTER_FRAME, loopPlayback);

 function loopPlayback() {
     var loopTimer:Timer=new Timer(20,beatcount);
       myTimer.addEventListener(TimerEvent.TIMER, loopWatch);
 }

     function loopWatch(event:TimerEvent):void {
        if (MovieClipMan.currentFrame >= MovieClipMan.totalFrames ){
        MovieClipMan.gotoAndStop(1);
    } else {
          MovieClipMan.nextFrame();
    }
    }

私はそれが混乱であることを知っています。助けてください!:]

4

2 に答える 2

2

これは基本的に、各フレームでループを実行するかどうかを確認することです。

var timeStart:Number;
var loopDuration:Number;
var timeLastLoop:Number;

stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
addEventListener(Event.ENTER_FRAME, onEnterFrame);

function onKeyDown(e:KeyboardEvent):void {
    if (e.keyCode == Keyboard.SPACE) {
        if (!timeStart) { // First time SPACE is hit
            timeStart       = getTimer();

        } else { // Second time SPACE is hit
            loopDuration    = getTimer() - timeStart; // set the loop duration
            timeStart       = NaN; // reset the start time
            loop();
        }
    }
}

function onEnterFrame(e:Event):void {
    if (loopDuration && timeLastLoop) {
        if (getTimer() >= timeLastLoop + loopDuration) { // if it's time to loop
            loop();
        }
    }
}

function loop():void {
    timeLastLoop    = getTimer();
    someMovieClip_mc.gotoAndPlay(0);
}
于 2013-10-15T05:44:48.203 に答える
1

まず、getTimer()スペースバーのキーを押す時間の差を見つけるために使用します。

次に、Timerすべてのフレームで新しい作成を停止することです。エンター フレーム ハンドラの外で作成する必要があります。次に、2 回目のキー押下で、delayプロパティを差に設定し、タイマーを再起動できます。

最も重要な変更点は次のとおりです。

if (tempopress == 0) {
    trace('start');
    myTimer.stop();
    startTime = getTimer();
    beatcount = 0;
    tempopress = 1;
} else {
    trace('stop');
    myTimer.delay = getTimer() - startTime;
    myTimer.reset();
    myTimer.start();
    tempopress = 0;
}

次に、タイマー イベント ハンドラーは、ムービークリップをフレーム 1 に送信するだけです。

于 2013-10-15T05:25:22.470 に答える