pause Timer with ExtendedTimer in ActionScript 3.0
hey guys, last week i needed to pause several timers and resume them later on. i ran into a problem which i try to explain in an little example.
so let’s say you start a Timer with 1000 milliseconds delay and stop it after 600 milliseconds. if you call Timer.start() again, it starts with a new delay of 1000 milliseconds again. there is no built-in possibility to resume the timer for the remaining 400 milliseconds. i thought “nothing easier than that, just call Timer.pause()”. but there was no such method, so i decided to write my own ExtendedTimer class and add the pause functionality. now i like to share it with you…
> ExtendedTimer.as
package com.fjakobs.utils
{
import flash.events.TimerEvent;
import flash.utils.Timer;
/**
* @author fjakobs
*/
public class ExtendedTimer extends Timer
{
private var _startTime : Number;
private var _initialDelay : Number;
private var _paused : Boolean = false;
public function ExtendedTimer(delay : Number,
repeatCount : int = 0)
{
super(delay, repeatCount);
_initialDelay = delay;
addEventListener(TimerEvent.TIMER,
onTimer,false,0,true);
}
private function onTimer(event : TimerEvent) : void
{
_startTime = new Date().time;
delay = _initialDelay;
}
override public function start() : void
{
if(currentCount < repeatCount)
{
_paused = false;
_startTime = new Date().time;
super.start();
}
}
public function pause() : void
{
if(running)
{
_paused = true;
stop();
delay = delay - (new Date().time - _startTime);
}
}
public function get paused() : Boolean
{
return _paused;
}
public function get initialDelay() : Number
{
return _initialDelay;
}
}
}

