Un campo de fútbol

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


Para concluir con este capítulo, vamos a crear un escenario algo más elaborado: un campo de fútbol.


La clase CampoFutbol

Dentro de la carpeta escenario vamos a crear una nueva clase que llamaremos CampoFutbol cuyo código será:


package mi.pong.escenario 
{
import com.senocular.utils.KeyObject;
import flash.display.GradientType;
import flash.display.Sprite;
import flash.display.Stage;

/**
* ...
* @author ASL
*/
public class CampoFutbol extends Escenario
{
private var verdeG1_1:uint = 0x01B101;
private var verdeG1_2:uint = 0x02D202;
private var verdeG2_1:uint = 0x25FC25;
private var verdeG2_2:uint = 0x00FB00;

public function CampoFutbol(stage:Stage, keyObject:KeyObject)
{
super(stage, keyObject);
}

public override function creaEscenario()
{
var nZonas:uint = 8;
var anchoZona:Number = stageRef.stageWidth / nZonas;

for (var i:uint = 0; i < nZonas; i++) {
var zona:Sprite = creaZona(i, anchoZona);
zona.y = 0;
zona.x = (stageRef.stageWidth / nZonas) * i;
addChild(zona);
}

dibujaLineas();
}

private function creaZona(i:uint, anchoZona:Number):Sprite
{
var zona:Sprite = new Sprite();
if ( i % 2 != 0)
zona.graphics.beginGradientFill(GradientType.LINEAR, [verdeG1_1, verdeG1_2], [1, 1], [0, 255]);
else
zona.graphics.beginGradientFill(GradientType.LINEAR, [verdeG2_1, verdeG2_2], [1, 1], [0, 255]);

zona.graphics.drawRect(0, 0, stageRef.stageWidth / 8, stageRef.stageHeight);
zona.graphics.endFill();
return zona;
}

private function dibujaLineas():void
{
var margen:Number = 15;
var anchoLinea:Number = 5;
var linea:Sprite = new Sprite();
linea.graphics.beginFill(0xFFFFFF);
// Línea del centro
linea.graphics.drawRect(stageRef.stageWidth / 2 - anchoLinea / 2, margen, anchoLinea, stageRef.stageHeight - 2 * margen);
// Líneas de fondo
// Izquierda
linea.graphics.drawRect(margen, margen, anchoLinea, stageRef.stageHeight - 2 * margen);
// Derecha
linea.graphics.drawRect(stageRef.stageWidth - margen - anchoLinea, margen, anchoLinea, stageRef.stageHeight - 2 * margen);
// Líneas de banda
// Superior
linea.graphics.drawRect(margen, margen - anchoLinea, stageRef.stageWidth - margen * 2, anchoLinea);
// Inferior
linea.graphics.drawRect(margen, stageRef.stageHeight - margen, stageRef.stageWidth - margen * 2, anchoLinea);
linea.graphics.endFill();
addChild(linea);

// Círculo central
var centro:Sprite = new Sprite();
var radioCentro:Number = stageRef.stageHeight / 3;
centro.graphics.beginFill(0xFFFFFF);
centro.graphics.drawEllipse(stageRef.stageWidth / 2 - radioCentro / 2, stageRef.stageHeight / 2 - radioCentro / 2, radioCentro, radioCentro);
centro.graphics.drawEllipse(stageRef.stageWidth / 2 - radioCentro / 2 + anchoLinea, stageRef.stageHeight / 2 - radioCentro / 2 + anchoLinea, radioCentro - anchoLinea*2, radioCentro - anchoLinea*2);
centro.graphics.endFill();
addChild(centro);
}

}

}

Dos cosas importantes en este código:


- La clase CampoFutbol es heredera de la clase Escenario, con lo cual, hereda todas sus funciones. Sin embargo, nosotros queremos redefinir una de las funciones: creaEscenario, porque queremos que la creación de este escenario sea distinta a la del padre. Para realizar este cometido utilizamos la palabra clave override, que "sobreescribe" al método del padre. Es decir, será este método el que se utiliza y no el heredado.


- Todas las funciones utilizadas en el atributo graphics corresponden a métodos de dibujado que proporciona Flash. Podéis encontrar más información aquí.


Ahora, para verlo en acción, ve a la clase Main y cambia la clase al escenario:


var escenario:Escenario = new CampoFutbol(stage, key);

Puedes encontrar los archivos de este proyecto terminado en el siguiente capítulo.








Anterior Índice Siguiente