2013-10-15 31 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 ..我可能只需要一個,對吧?完全有效的 –

相關問題