1

我想通过按两次空格键来设置持续时间。然后我想要一个影片剪辑播放那个确切的时间,然后循环播放那个设定的时间,依此类推。直到我再次按两次空格键来设置不同的时间。

    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在每一帧中创建一个新的。它应该在输入帧处理程序之外创建。然后在第二次按键时,您可以将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;
}

然后,计时器事件处理程序可以将 MovieClip 发送到第 1 帧。

于 2013-10-15T05:25:22.470 回答