Añadiendo los Marcadores

Esta entrada pertenece a ActionScript 3 - Guía para Principiantes.


Nuestro marcador Flash

Para la creación de nuestro marcador, vamos a utilizar únicamente un texto dinámico de Flash, que variará según varíe el número de goles de cada jugador.


Así que, creamos un nuevo símbolo en Flash: menú Insertar -> Nuevo símbolo... De nombre Marcador y de tipo Clip de película. De momento, como aún no la hemos creado, no asociamos el símbolo con ninguna clase ActionScript.


Ahora, escogemos la Herramienta de Texto (T), clickamos en el centro de nuestro símbolo recién creado y escribimos un 0.


En la ventana propiedades, hemos de asegurarnos de que es un Texto dinámico (lo cual nos permitirá variarlo mientras se esté ejecutando Flash. Como nombre de instancia (que nos servirá para acceder al texto desde código ActionScript) escribimos puntuacion_text.


Puedes escoger el formato que quieras para el texto. Yo he elegido como Familia: Tahoma; Estilo: Regular; Tamaño: 30.0 pt y Color: Blanco.


Y ya tenemos nuestro marcador.


Código del marcador

En FlashDevelop, creamos una clase llamada Marcador dentro de la carpeta objeto, pero fuera de colisionable y colsionador. El código ActionScript para Marcador será el siguiente:


package mi.pong.objeto
{
import flash.display.MovieClip;
import flash.display.Stage;

/**
* ...
* @author ASL
*/
public class Marcador extends MovieClip
{
protected var id:uint; // Identificador para el marcador, normalmente el número de jugador
protected var puntuacion:int = 0;

/**
* Constructor del Marcador.
* @param stage Stage de referencia.
* @param id_jugador Jugador al que representa.
*/
public function Marcador(stage:Stage, id_jugador:uint)
{
id = id_jugador;
iniciaPosicion(stage);
}

/**
* Establece una nueva puntuación en el marcador.
* @param nueva_puntuacion Nueva puntuación.
*/
public function setPuntuacion(nueva_puntuacion:int)
{
puntuacion = nueva_puntuacion;
puntuacion_text.text = puntuacion.toString();
}

/**
* Suma la puntuación a la ya acumulada.
* @param acum_puntuacion Puntuación a sumar.
*/
public function sumaPuntuacion(acum_puntuacion:int)
{
puntuacion += acum_puntuacion;
puntuacion_text.text = puntuacion.toString();
}

/**
* Inicia la posición del marcador, en relación a un Stage de
* referencia.
* @param stage Stage de referencia.
*/
public function iniciaPosicion(stage:Stage)
{
puntuacion_text.text = puntuacion.toString();
var separacion:uint = 15;
x = (stage.stageWidth / 2) + ((this.width + separacion) * id) - (this.width + separacion) / 2;
y = width / 2 + separacion;
}

}

}

- Para cambiar el texto del marcador que hemos creado en Flash, utilizamos puntuacion_text.text. Recuerda que puntuacion_text es el nombre que dimos a la instancia de texto dinámico en el marcador.


Añadiendo los marcadores al escenario

Lo primero, en la clase Escenario creamos un Vector que albergue los maracadores:


protected var marcadores:Vector.<Marcador>;

Y modificamos el constructor:


  public function Escenario(stage:Stage, keyObject:KeyObject) 
{
stageRef = stage;
key = keyObject;
colisionables = new Vector.<IColisionable>;
colisionadores = new Vector.<IColisionador>;
marcadores = new Vector.<Marcador>;
creaPongs(2);
creaMarcadores(2);
creaEscenario();
creaBolas(1);
addEventListener(Event.ENTER_FRAME, bucle, false, 0, true);
}

dónde, aparte de crear el Vector de marcadores, además llamamos a la nueva función creaMarcadores cuya definición es la siguiente:


  /**
* Añade un número de marcadores al escenario.
* @param num_marc Número de marcadores.
*/
public function creaMarcadores(num_marc:uint)
{
for (var i:uint = 0; i < num_marc; i++)
{
var marcador:Marcador = new Marcador(stageRef, i);
stageRef.addChild(marcador);
marcadores.push(marcador);
}
}

Y ahora, ¿recuerdas que en GolEvent teníamos un atributo lado que indicaba dónde se produjo el gol? Pues ha llegado el momento de utilizarlo. Podemos borrar el contenido de la función golAnotado en Escenario y cambiarlo por este otro:


  /**
* Tratamiento tras que se produza un evento.
* @param e El evento producido.
*/
public function golAnotado(e:GolEvent)
{
marcadores[e.lado].sumaPuntuacion(1);
}

- marcadores[e.lado]: Tenemos dos marcadores dentro del Vector. Uno en la posición "0" y otro en la posición "1". ¿Cómo decidimos dónde sumar puntuación? Con el atributo antes mencionado.


Y ya tenemos los marcadores funcionando.








Anterior Índice Siguiente