La clase Timer() en AS3: Manejo de tiempo y repetición de acciones
Wednesday, 2. December 2009
La clase Timer() de AS3 nos permite realizar una acción definida repetidas veces en función del tiempo. Esta clase nos permite controlar dos aspectos: cuántas veces queremos que se ejecute una acción, y cada cuanto tiempo queremos que se ejecute (en milisegundos). Esto puede ser útil para cualquier acción que queramos realizar repetidas veces, pero que no dependa de la velocidad de reproducción de nuestro proyecto.
Para esto creamos una nueva instancia de la clase timer (en la forma en que creamos una variable):
var temporizador:Timer=new Timer(1000,0);
Parámetros
El primer parámetro se llama delay, (en este caso 1000) corresponde al tiempo que debe trascurrir antes de que se ejecute la acción definida. Este parámetro se lo damos en milisegundos. Es decir, si queremos que suceda cada segundo, debemos darle 1000 (1000 milisegundos = 1segundo). Si queremos que suceda cada minuto, reemplazamos el 1000 por 60000. Esto hará que la acción se ejecute cada que transcurra el tiempo determinado.
El segundo parámetro se denomina repeatCount, (en este caso 0) y determina el número de veces que queremos que el temporizador ejecute dicha acción. Si ponemos 0, no habrá un límite, y la acción se ejecutará indefinidamente. Si queremos que se ejecute determinado número de veces, reemplazamos el 0 por un numero, que debe ser un entero positivo (Ejemplo: 10 o 200).
Acciones
Definido un temporizador, debemos hacer tres cosas:
- Inicializarlo: Debemos decirle cuando iniciar la cuenta de tiempo, cuando detenerse, podemos resetearlo, etc…
- Crear un Listener: Debemos crear un listener o ‘escuchador’ que haga que cada que se produzca la cuenta del tiempo, ejecute una función. Para ver más información sobre los listener, haz clic aquí.
- Crear una Función: Debemos crear una función en la cual definamos la acción que se va a ejecutar con el temporizador que creamos
Inicialización
Para que el contador empiece a correr, debemos ‘iniciarlo’, ‘encenderlo’. Para esto utilizamos el siguiente código:
temporizador.start();
Así mismo, y dependiendo de las acciones que queramos realizar, podemos utilizar .stop(); y .reset(); para controlar su avance, o restaurarlo (si usamos reset() vuelve al inicio, pero se queda quieto. Para usarlo de nuevo debemos utilizar una vez más el .start();).
Creación del Listener
Tenemos un contador que envía una señal cada cierto tiempo. Pero tiene que haber ‘alguien’ que escuche esa señal y haga que se ejecute la función que queramos. Para esto sirve el listener. Si tienes dudas sobre como crear un listener, te puede ser util esta información, haz clic.
temporizador.addEventListener(TimerEvent.TIMER, accionRepetida);
“accionRepetida” es el nombre que le hemos dado a la función que se ejecutará, pero puede llevar cualquier nombre.
Definición de la función
Una vez hemos creado el listener que sabrá cuando ejecutar la acción, debemos definir esa acción. Esto lo hacemos a través de una función que para este caso hemos llamado “accionRepetida”. El nombre de la función debe ser el mismo en el listener, y para cada timer debes usar un nombre de función distinta si quieres que se ejecuten acciones diferentes.
function accionRepetida(e:TimerEvent){
trace("Acción Ejecutada");
}
En este caso haremos que la función ejecute un trace, lo que nos mostrará el texto que le dimos. En todo caso se debe reemplazar el trace por la acción que queramos realizar.
Código final
Este es el código que tendremos al final del ejercicio.
var temporizador:Timer=new Timer(1000,5);
temporizador.addEventListener(TimerEvent.TIMER, accionRepetida);
temporizador.start();
function accionRepetida(e:TimerEvent){
trace("Acción Ejecutada");
}
Este timer hará un trace cada que pase un segundo, indefinidamente. Pero podemos cambiar cada elemento que queramos ahora.
Espero que el artículo sea de ayuda. Si tienes dudas o comentarios, o si te resulta útil el artículo, puedes utilizar el sistema de comentarios del blog
Un saludo.
Samuel Jiménez. Esk.






Alfredo Says:
Hola soy nuevo en esta pagina e estado leyendo sus articulos y son buenos, tengo un problema quiero cargar varios flv consecutivamente e podido que aparesca un video si le doy simular descarga me carga el otro flv entonses quiero poner un timer pero no se como favor de ayudarme ya que estado buscando como reproducirlos pero no lo encuentro les pongo el codigo que utizo: Gracias
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.media.Video;
import flash.media.SoundTransform;
var videoArray:Array = ["videos/video0.flv","videos/video1.flv" ,"videos/video2.flv"];
var videoURL:String = videoArray[Math.floor(Math.random()*3)];
var conexion:NetConnection = new NetConnection();
conexion.connect(null);
var stream:NetStream = new NetStream(conexion);
stream.play(videoURL);
var video:Video = new Video();
video.height = 480;
video.width = 720;
video.x = (stage.stageWidth – video.width) / 2;
var obj:Object = new Object();
stream.client = obj;
video.attachNetStream(stream);
var sound:SoundTransform = new SoundTransform();
stream.soundTransform = sound;
addChild(video);
var duracion:uint;
vaninka Says:
Está muy claro el usarlo, pero es realmente necesario ponerlo?
Qué ocurre si no lo pones?
La clase Timer() en AS3: Manejo de tiempo y repetición de acciones « GuarniBlog Says:
[...] Ver Tutorial Comments Off [...]
Beatriz Says:
Hola!!!
Está muy claro tu ejemplo! pero que pasaría si quisiera que ese timer fuera con minutos y segundos???
Ojalá puedas ayudarme
Gracias!!!
GUSUM Says:
Hola Samuel,
Gracias por el artículo. Lo encuentro de mucha utilidad!
Una pregunta: ¿Qué diferencia hay entre escibir e:TimerEvent y event:TimerEvent?, no solo en este caso, sino en general ¿cuándo se utiliza e: y cuándo la palabra event??
Gracias y saludos!