Es muy usual que debamos parar o ejecutar funciones con cierto delay, y si bien AS3 tiene una clase para eso (Timer), no es la cosa más eficiente, porque si quiero por ejemplo controlar un delay simple debo:
1. Crear el Timer
2. Asignar el Listener
3. Crear la función
Lo cual genera mucho código en algo que puede ser usado varias veces dentro de una pelicula. Para eso cree este clase Delay, que es sencilla pero ahorra algunos dolores de cabeza:
Código :
/* Versión Estable 1.0 Clase Delay se encarga de crear un Evento Timer controlado para ejecutar cualquier función pasada como parametro. */ /** * Clase Delay * @author Hernán */ package clases { import flash.events.*; import flash.utils.Timer; public class delay { private var launcher:Function; private var time:Number; private var times:Number; private var pause:Boolean; private var delayed:Timer; function delay(Func:Function,Time:Number,Times:Number) { launcher = Func; time = Time; times = Times; pause = false; init(); } private function init():void { delayed = new Timer(time,times); delayed.addEventListener(TimerEvent.TIMER, launch); delayed.start(); } private function launch(e:Event):void { if(!pause){ launcher(); } } public function stopTime():void { pause = true; } public function restartTime():void { pause = false; } public function cancel():void { delayed.removeEventListener(TimerEvent.TIMER, launch); } } }
Modo de Uso:
Código :
var delayer:delay = new delay(funcion,tiempo,cantidad_de_veces);
Además tenemos algunos métodos más que son:
stopTime() que nos permite pausar un rato el Timer
restarteTime() que nos permite volver a empezar (Quitar el stop)
cancel() que nos permite eliminar el Timer
Espero les sirva!
Saludos, Hernán . -
¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.
Por Zguillez el 21 de Febrero de 2010
Gracias por compartirla
Por Martincho7 el 21 de Febrero de 2010
Lo sumo a la carpeta de clases.
Por Hernán el 22 de Febrero de 2010
Saludos, Hernán . -
Por joel_fox el 22 de Febrero de 2010
Yo hasta ahora en esos caso siempre he usado el "setTimeout(_function, _delay, _parametros)". Pero tu clase también es una muy buena opción.
Por miguelmoraleda el 22 de Febrero de 2010
TweenLite.delayedCall(delay:Number,onComplete:Function,onCompleteParams:Array);
Saludos
Por bubudrc el 22 de Febrero de 2010
Saludos
Por JuanPSerrano el 13 de Mayo de 2010
Mil Gracias.
Por Carlo el 27 de Julio de 2010
Por px87 el 27 de Septiembre de 2010
Por Enrra el 30 de Mayo de 2011