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