(Volver al índice)
Todavía queda una cosa por hacer para que el juego rediseñado usando clases tenga las mismas funcionalidades que la versión anterior: personajes animados.
Habíamos comentado que lo ideal sería que la clase "ElementoGráfico" nos permitiera tanto manejar elementos con una única imagen estática como elementos que tengan varias imágenes, que actuarían como distintos fotogramas para dar una sensación de movimiento más real. Incluso sería deseable que pidiéramos tener distintas secuencias de imágenes según el sentido en que se muestra el personaje (izquierda, derecha, arriba o abajo).
Tampoco es especialmente difícil. Vamos con ello...
// La secuencia de imagenes, si es animada
protected Imagen[][] secuencia;
protected byte fotogramaActual;
protected byte direccion;
public const byte ABAJO = 0;
public const byte ARRIBA = 1;
public const byte DERECHA = 2;
public const byte IZQUIERDA = 3;
public void Dibujar()
{
if (contieneSecuencia)
secuencia[direccion][fotogramaActual].Dibujar(x, y);
else if (contieneImagen)
miImagen.Dibujar(x, y);
else
Hardware.ErrorFatal("Se ha intentado dibujar una imagen no cargada!");
}
public ElemGrafico()
{
contieneImagen = false;
contieneSecuencia = false;
direccion = ABAJO;
fotogramaActual = 0;
secuencia = new Imagen[4][];
}
public void CargarSecuencia(byte direcc, string[] nombres)
{
contieneImagen = true;
contieneSecuencia = true;
byte tamanyo = (byte) nombres.Length;
secuencia[direcc] = new Imagen[tamanyo];
for (byte i=0; i< nombres.Length; i++) {
secuencia[direcc][i] = new Imagen(nombres[i]);
}
}
public void CambiarDireccion(byte nuevaDir)
{
if (direccion != nuevaDir)
{
direccion = nuevaDir;
fotogramaActual = 0;
}
}
public Personaje(Juego j) // Constructor
{
miJuego = j;
...
CargarSecuencia( ARRIBA,
new string[] {"imagenes/personajea1.png",
"imagenes/personajea2.png"} );
CargarSecuencia( DERECHA,
new string[] {"imagenes/personajed1.png",
"imagenes/personajed2.png"} );
...
}
public void MoverDerecha()
{
if (miJuego.GetNivelActual().EsPosibleMover( (short) (x+incrX), y) )
{
CambiarDireccion(DERECHA);
SiguienteFotograma();
x += incrX;
miJuego.GetMarcador().IncrPuntuacion(
miJuego.GetNivelActual().PuntosMover( x, y ));
}
}
Si quieres ver el fuente completo, todo el fuente del proyecto está en: code.google.com/p/fruityfrank
(Volver al índice)