Unidad 22. Juegos interactivos (VII)



22.6. Funciones avanzadas

También veremos otras opciones que nos ayudarán mucho a la hora de crear juegos. Una de ellas es la de la posibilidad de darle aleatoriedad a los componentes.

Podemos utilizar la función que incorpora Flash Math.random() que devuelve un número pseudo-aleatorio entre 1 y 0.

Su uso es simple sólo deberás escribir:

var miNumero:Number = Math.random();

Puedes comprobarlo probando el siguiente ejemplo:

trace(Math.random());
trace(Math.random());
trace(Math.random());
trace(Math.random());

Es tan útil que a raíz de esta función se ha creado este trozo de código que casi utilizarás en la mayoría de tus películas que contengan componentes aleatorios:

function num_aleatorio (min:Number ,max:Number):Number {
	return (Math.floor(Math.random()*(max-min+1))+min);
}

Esta función te devuelve un número aleatorio dentro de un rango:

var miNumero:Number = num_aleatorio(1, 100);

En este ejemplo se almacenará un número de 1 a 100 en la variable miNumero.

En el juego de ejemplo que completaremos en el ejercicio final, hemos utilizado esta función para generar de forma aleatoria desde dónde parten los proyectiles, dónde caen, y su escala.

var escala:Number = num_aleatorio(0, 2); //escala influirá en el tamaño y la velocidad
this.velocidad = velocidad_base+nivel*1.5+(2-escala);
this.width = this.width*((10-escala)/10);
this.height =  this.height*((10-escala)/10);
var puntoSalida:Number = num_aleatorio(this.width/2, ancho-this.width/2); //Zona de salida
this.x=puntoSalida;
this.y = 0;
var puntoImpacto:Number = num_aleatorio(ancho*(1/4), ancho*(3/4));//Zona de impacto

Como ves tenemos randomizados muchos de los procesos. El primer num_aleatorio lo utilizamos para calcular la escala, un valor entre 2 y 0 que influirá en el tamaño del proyectil y su velocidad. El segundo num_aleatorio calcula la posición desde la que parte el proyectil, y el último num_aleatorio calcula la posición hacia donde se dirige. Además, en el juego la hemos empleado más veces, por ejemplo para decidir si se lanza el proyectil o de que tipo será.

De esta forma hemos logrado que en cada partida los proyectiles aparezcan de forma distinta.

 

Otra de las funciones que te vendrán muy bien es la de dotar de velocidad a los movimientos de los objetos.

Observa el código que hemos introducido en el juego:

this.velocidad = velocidad_base+nivel*1.5+(2-escala);

En la definición de la clase Proyectil, hemos creado una propiedad velocidad que calculamos en función a una velocidad base a la que le sumamos la velocidad que depende del nivel y de la escala del proyectil. De hecho, esa velocidad va aumentando a medida que se van eliminando proyectiles y subiendo de nivel.

De ahí que cuando asignamos el movimiento del elemento:

this.y += this.velocidad;

Lo hacemos refiriéndonos a la velocidad, así podemos variarla en cualquier momento aumentándola o reduciéndola según nuestros propósitos.

Por último veremos algo que nos permitirá mostrar información a los usuarios para que ellos tengan conocimiento de cómo se está desarrollando la partida. Esto lo haremos con los textFields. Los textFields pueden ser elementos que hayamos creado antes de publicar la película, así que no tendremos problemas con ellos. Definimos su aspecto y propiedades en el panel de Propiedades, y utilizando su nombre de instancia, podemos cambiar su contenido dinámicamente de la siguiente manera:

estadisticas_txt.text = "Estas son las estadísticas del juego";

Simplemente los declararemos como texto dinámico e iremos modificando su contenido. Pero, ¿Y si queremos crear un campo de texto mediante ActionScript?

Muy sencillo, te bastarán unas pocas líneas para conseguirlo:

//Creamos el formato
var miFormato:TextFormat = new TextFormat();
//Definimos el formato;
miFormato.bold = true;
miFormato.font = "Arial";
miFormato.size = 12;
miFormato.color = 0xFFFFFF;
miFormato.align = "left";

//Creamos el campo de texto
var estadisticas_txt:TextField = new TextField(); 
//Definimos la propiedades del campo de texto
estadisticas_txt.name = "estadisticas_txt";
estadisticas_txt.defaultTextFormat = miFormato; //asignamos el formato
estadisticas_txt.selectable = false;
estadisticas_txt.x = 10;
estadisticas_txt.y = 0;
estadisticas_txt.width = 530;
estadisticas_txt.height = 22;
estadisticas_txt.text = "Estas son las estadísticas del juego";

//Lo añadimos a la lista de visualización
addChild(estadisticas_txt);

En nuestro ejemplo, por comodidad no creamos todo el campo de texto desde el código.

Puedes ver que hemos creado un objeto llamado miFormato que es del tipo formato de texto, con unas características básicas que podremos aplicar sobre cualquier texto de nuestra película. Luego mediante ActionScript hemos creado otro objeto estadisticas_txt del tipo campo de texto, que será el que mostrará el texto.

Ahora sólo hará falta remitirse a la propiedad text del texto que hemos creado para darle un valor, y como hemos visto antes.

 

Las propiedades de formato de texto que hemos utilizado son las más comunes, si necesitas un listado completo de ellas puedes visitar nuestra sección avanzada. tema avanzado

 

Antes de realizar los ejercicios finales, te recomendamos seguir el ejercicio paso a paso Crear una clase en ActionScript.

Ejercicios del Tema 22. Prueba evaluativa del Tema 22.



Marzo-2011
Pág. 22.7

Atrás  Inicio  Adelante







.