AS3循环movieClip基于set timer

时间:2013-10-15 05:07:54

标签: actionscript-3 loops timer

我想通过两次击中空格键来设置持续时间。然后我想要一个动画片段播放一段时间,然后循环再次播放该设定的时间,依此类推。直到我再次按空格键两次设置不同的时间。

    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();
    }
    }

我知道这是一团糟哈哈。请帮忙! :

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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帧。