/ Published in: ActionScript 3
I've updated this snippet to remove the timer and null it after the function is repeated repeat times. You use it like this:
delay(functionname, [param1, param2], 350, 3);
This will call functionname three times with a 350 millisecond delay between each call and pass param1 and param2 to the function.
If you need to call a function that doesn't accept parameters, pass an empty array [] to the second argument.
Expand |
Embed | Plain Text
import flash.events.TimerEvent; import flash.utils.Timer; /** * delay function * a quick and easy delay function that can call a function with parameters. configurable * with delay time and repeat frequency * * @param func:Function The function to call when timer is complete * @param params:Array An array of parameters to pass to the function * @param delay:int [OPTIONAL] The number of milliseconds to wait before running the function * @param repeat:int [OPTIONAL] The number of times the function should repeat */ private function delay(func:Function, params:Array, delay:int = 350, repeat:int = 1):void { var f:Function; var timer:Timer = new Timer(delay, repeat); timer.addEventListener(TimerEvent.TIMER, f = function():void { func.apply(null, params); if (timer.currentCount == repeat) { timer.removeEventListener(TimerEvent.TIMER, f); timer = null; } }); timer.start(); }
Comments
Subscribe to comments
You need to login to post a comment.

Be sure to include the timer classes
import flash.events.TimerEvent; import flash.utils.Timer;
This is a function that I've needed but wasn't available in AS3. Basically, we create a timer, add a listener to it, and start the timer. In the listener, we run the supplied function with the supplied parameters, then remove the listener.
UPDATE: I've had to remove the
timer = nulldeclaration because that was clearing thetimervariable before additional iterations were completed. It worked fine whenrepeatwas set to 1, but whenrepeatwas greater than 1, timer was nulled out before the second iteration could be started.UPDATE: I've fixed the
timer = nullissue. The function now works as expected.