Comunidad de diseño web y desarrollo en internet

Crear y animar MovieClips aleatorios con Timer en Actionscript 3

Supongamos que estamos realizando un juego de naves y deseamos que las mismas crucen el escenario en tiempos aleatorios. Para ello revisaremos la clase Timer, el cual controla el cronómetro de la película.

Una de las formas de controlar el tiempo con ActionScript es por medio de la clase Timer, la cual se encuentra en el paquete utils. Para controlar los eventos de los objetos de la clase Timer, es necesario importar a la clase TimerEvents, el cual se encuentra en el paquete events. También necesitaremos al método getTimer(), la cual es una función global en la versión 1 y 2 de ActionScript, pero en la tres hay que importarla del paquete utils. Así que debemos importar estas tres clases en la clase de documento o Document Class:

Código :

import flash.events.TimerEvent;
import flash.utils.Timer;
import flash.utils.getTimer;

Dentro de la clase del documento generaremos las variables para controlar el lanzamiento de las naves:

Código :

var miTimer:Timer = new Timer(1000);
var ultimaNave:int;
var proxNave:int;

El objeto miTimer ejecutará una función cada segundo, sin depender de la velocidad de la línea de tiempo. Para ello le indicamos el número de milisegundos para efectuar esta revisión a una función que aun no hemos definido ni hecho.

La variable ultimaNave nos servirá para almacenar el tiempo (en milisegundos) desde el cual fue lanzada la última nave.

La variable proxNave nos servirá para generar, en forma aleatoria, el tiempo que deberá transcurrir para que sea lanzada la próxima nave.

Código :

miTimer.addEventListener(TimerEvent.TIMER, onLanzaNave);
miTimer.start();
ultimaNave = getTimer();
proxNave = Math.floor(Math.random()*5000);

Lo primero que haremos es definir la función que será ejecutada cada segundo, la cual será la función onLanzaNave.

En la segunda línea “encendemos” el cronómetro con el método start().

En la variable ultimaNave almacenamos la hora (en milisegundos) en que iniciamos el juego. Por último, generamos un número aleatorio entre 0 y 4999, el cual será el número de milisegundos para poder lanzar la siguiente nave. Observe que si gusta aumentar este lapso, basta con modificar la constante 5000. Una buena práctica es almacenarla en una variable.

Ahora escribiremos la rutina para lanzar la animación de las naves:

Código :

function onLanzaNave(e:TimerEvent):void{
   var tiempoTrans:int = getTimer()-ultimaNave;
   if(tiempoTrans>proxNave){
      var nave:Nave = new Nave();
      nave.x = -10;
      nave.y = Math.floor(Math.random()*350);
      addChild(nave);
      nave.enciende();
   }
}

Si ejecuta la película, deberán aparecer las naves que se activarán en cada intervalo.




Si desea bajar el archivo timer.fla, pulsa aqui.
Si desea bajar el archivo de la clase Nave.as, pulsa aqui.

¿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.

Publica tu comentario

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate