2013-10-15 35 views
1

我想通过按两次空格键来设置一段时间。然后我想要一个动画片段来玩这段时间,然后循环播放这段时间,等等。直到我再次敲击空格键两次来设定不同的时间。基于设置定时器的AS3循环动画片段

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

我想也许尝试这样的事情,这本质上是检查每个帧是否执行循环。

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); 
} 
+0

- 感谢SCCOTTT! –

+1

没有问题。干杯! – SCCOTTT

+0

嘿,抱歉打扰你,但我现在试图在循环持续时间的一半做一个单独的影片剪辑循环..所以它循环两次每个完整的循环。有没有一个简单的方法来做到这一点? –

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

然后,计时器事件处理程序可以只发送电影剪辑,第1帧

+0

谢谢! 因为它是我有2个计时器.. loopTimer和myTimer ..我可能只需要一个,对吧?完全有效的 –

相关问题