2011-11-28 45 views
0

我已經瀏覽了所有網頁,並且每個人都可以教您如何爲您的遊戲或倒數計時器製作計時器,但我似乎無法找到如何添加時間到已經在計時了。添加時間到定時器/計數器

因此,這裏是我的櫃檯類:

package 
{ 
import flash.display.MovieClip; 
import flash.display.Stage; 
import flash.text.TextField; 
import flash.events.Event; 
import flash.utils.Timer; 
import flash.events.TimerEvent; 

public class Score extends MovieClip 
{ 
     public var second:Number = 0; 
     public var timer:Timer = new Timer(100); 
     private var stageRef:Stage; 

     public function Score(stageRef:Stage) 
     { 
      x = 560.95; 
      y = 31.35; 
      this.stageRef = stageRef; 

      timer.addEventListener(TimerEvent.TIMER, scoreTimer); 
      timer.start(); 
     } 

     public function scoreTimer(evt:TimerEvent):void 
     { 
      second += 1; 
      scoreDisplay.text = String("Score: " +second); 
     } 

這工作沒有任何問題或問題,只是保持在100ms的速度向上計數,我想知道的是如何加說30數秒如果東西發生在我的比賽中,比如說你殺死一個敵人。

請幫忙!

+0

找出如何使用任何Flash對象的好方法是檢查它的語言參考http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/utils/Timer.html 。在這種情況下,請仔細查看reset()方法和延遲屬性。 –

回答

2

這可能是爲調用一個更新您的second性能的方法一樣簡單。你的方法最終會看起來像這樣。

public function scoreTimer(evt:TimerEvent):void 
{ 

    second += 1; 
    updateDisplay(); 
} 

public function addPenalty(penalty:Number):void 
{ 

    second += penalty; 
    updateDisplay(); 
} 

private function updateDisplay() : void 
{ 

    scoreDisplay.text = String("Score: " +second); 
} 

因爲你不使用你的timer的值更新顯示,復位或延遲不會調整scoreDisplay。相反,它只會繼續計算停止的位置,因爲在這些操作期間second屬性本身未被重置。

+0

完美的工作,發現。謝謝你的幫助 – BoneStarr

0

我認爲Timer.delay可以用來做這件事,像Timer.delay = time_remaining + 30000這樣的東西給定時器增加30秒。當然,這意味着你必須知道time_remaining

如果你設置的延遲間隔定時器運行時,計時器 將相同的repeatCount迭代重新啓動。

從這裏引述:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/utils/Timer.html#delay

+1

Timer.delay是TimerEvent.TIMER事件之間的時間,而不是某些Timer總計經過時間。換句話說,對於一個Timer var t:Timer =新的Timer(100); t.delay將等於100ms,這是觸發新的TimerEvent.TIMER事件所需的時間。將其設置爲不同的值t.delay = 1000;將使其每秒觸發一次TimerEvent.TIMER事件。 – izk