如何使用 ActionScript 3 在 Adob​​e Flash 中的计时器中编写暂停代码

How to code pause in timer in Adobe Flash using ActionScript 3

我在我的项目中做定时器。现在我想在我的项目中添加暂停功能。我尝试添加 stop.timer 但没有成功。任何人都知道如何添加暂停以及用户何时恢复计时器正常工作?

var endTime:int = getTimer();
endTime += 40*60*1000;  //adjust endTime to 15 minutes in the future.

var countdownTimer:Timer = new Timer(1000);
countdownTimer.addEventListener(TimerEvent.TIMER, updateTime);
countdownTimer.start();

function updateTime(e:TimerEvent):void
{
  var timeLeft:Number = endTime - getTimer();
  var seconds:Number = Math.floor(timeLeft / 1000);
  var minutes:Number = Math.floor(seconds / 60);

  seconds %= 60;
  minutes %= 60;

  var sec:String = seconds.toString();
  var min:String = minutes.toString();
  if (sec.length < 2) {
    sec = "0" + sec;
  }

  if (min.length < 2) {
    min = "0" + min;
  }

  var time:String = min + ":" + sec;
  countdown.text = time;
}

如果您只使用一个计时器而忘记 getTimer(),这会容易得多。

这是一个带有注释的示例:

//make the timer tick every second 900 times (so it will run 15 minutes total)
var countdownTimer:Timer = new Timer(1000, 900);

//listen for the tick
countdownTimer.addEventListener(TimerEvent.TIMER, updateTime);

//listen for the completion of the timer (if you want to do something when all done
countdownTimer.addEventListener(TimerEvent.TIMER_COMPLETE, timerComplete);

countdownTimer.start();

function updateTime(e:TimerEvent):void
{
  //this will give the seconds left if the delay is 1000ms
  var secondsLeft:Number = countdownTimer.repeatCount -  countdownTimer.currentCount;

  var minutesLeft:Number = Math.floor(seconds / 60);

  //....rest of your code
}

现在,您可以随时使用 countdownTimer.stop(); 暂停计时器并使用 countdownTimer.start();

恢复计时

你应该简单地扩展定时器 class。

package {
  import flash.events.Event;
  import flash.events.EventDispatcher;
  import flash.events.IEventDispatcher;
  import flash.events.TimerEvent;
  import flash.utils.Timer;
  import flash.utils.getTimer;
  /**
   * The <code>MyTimer</code> class.<br/>
   */
  public class MyTimer implements IEventDispatcher {
    //==========================================================================
    //  Constructor
    //==========================================================================
    /** Constructor */
    public function MyTimer(delay:Number, repeatCount:int = 0) {
      super();
      $timer = new Timer(delay, repeatCount);
      $startTime = NaN;
      $past = NaN;
      $correct = false;
      $timer.addEventListener(TimerEvent.TIMER, timerHandler, false, int.MAX_VALUE);
    }
    //==========================================================================
    //  Properties
    //==========================================================================
    private var $correct:Boolean;
    private var $past:Number;
    private var $startTime:Number;
    private var $delay:Number;
    private var $timer:Timer;
    //==========================================================================
    //  Public methods
    //==========================================================================
    public function reset():void {
      $startTime = NaN;
      $past = NaN;
      $timer.reset();
    }
    public function stop():void {
      if(!$timer.running)
        return;
      $past = getTimer() - $startTime;
      $timer.stop();
    }
    public function start():void {
      if(isNaN($startTime)) {
        $startTime = getTimer();
      } else {
        $delay = $timer.delay;
        $timer.delay = $timer.delay - ((getTimer() - $startTime) % $timer.delay);
        $correct = true;
      }
      $timer.start();
    }

    public function dispatchEvent(event:Event):Boolean {
      return $timer.dispatchEvent(event);
    }
    public function addEventListener(type:String, listener:Function, useCapture:Boolean = false,
                                     priority:int = 0, useWeakReference:Boolean = false):void {
      $timer.addEventListener(type, listener, useCapture, priority, useWeakReference);
    }
    public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void {
      $timer.removeEventListener(type, listener, useCapture);
    }
    public function willTrigger(type:String):Boolean {
      return $timer.willTrigger(type);
    }
    public function hasEventListener(type:String):Boolean {
      return $timer.hasEventListener(type);
    }
    //==========================================================================
    //  Event Listeners
    //==========================================================================
    private function timerHandler(event:Event):void {
      if($correct) {
        $timer.delay = $delay;
        $correct = false;
      }
    }
  } // <- end class ->
}