Por Nacho Cabanes
Vamos allá...
No es nada difícil: ya está previsto en la clase "ElemGrafico": basta con cargar una secuencia de imágenes en vez de una única imagen, y llamar a "SiguienteFotograma()" cuando queramos que se cambien de un fotograma de la animación al siguiente.
En nuestro caso, cargaremos dos secuencias: una para cuando el enemigo se mueva hacia la derecha y otra para cuando se mueva hacia la izquierda. Indicaremos en qué dirección queremos que se mueva inicialmente, y volveremos a llamar a "CambiarDireccion" cada vez que tenga que dar la vuelta.
El fuente completo quedaría así
public class Enemigo : ElemGrafico { // Datos del enemigo Partida miPartida; // Constructor public Enemigo(Partida p) { miPartida = p; // Para enlazar con el resto de componentes MoverA(400,352); // Resto de valores iniciales SetVelocidad(4,0); CargarSecuencia(DERECHA, new string[] {"imagenes/enemigoN01D01.png", "imagenes/enemigoN01D02.png", "imagenes/enemigoN01D03.png", "imagenes/enemigoN01D04.png", "imagenes/enemigoN01D05.png", "imagenes/enemigoN01D06.png", "imagenes/enemigoN01D07.png", "imagenes/enemigoN01D08.png"}); CargarSecuencia(IZQUIERDA, new string[] {"imagenes/enemigoN01I01.png", "imagenes/enemigoN01I02.png", "imagenes/enemigoN01I03.png", "imagenes/enemigoN01I04.png", "imagenes/enemigoN01I05.png", "imagenes/enemigoN01I06.png", "imagenes/enemigoN01I07.png", "imagenes/enemigoN01I08.png"}); direccion = DERECHA; SetAnchoAlto(36, 48); } // Métodos de movimiento public new void Mover() { x += incrX; SiguienteFotograma(); if ((x < 100) || (x > 700)) { incrX = (short)(-incrX); if (incrX < 0) CambiarDireccion(IZQUIERDA); else CambiarDireccion(DERECHA); } } } /* fin de la clase Enemigo */
La idea es exactamente la misma: cargaremos una secuencia de imágenes en el constructor y cambiaremos de fotograma cuando corresponda, en los métodos encargados de mover (en el caso del personaje: MoverDerecha, MoverIzquierda y Mover).
Sólo dos detalles más:
Los cambios son:
public class Personaje : ElemGrafico { // Constructor public Personaje(Partida p) { [...] CargarSecuencia(DERECHA, new string[] {"imagenes/personajeD01.png", "imagenes/personajeD01.png", "imagenes/personajeD02.png", "imagenes/personajeD02.png", "imagenes/personajeD03.png", "imagenes/personajeD03.png", "imagenes/personajeD04.png", "imagenes/personajeD04.png", "imagenes/personajeD05.png", "imagenes/personajeD05.png", "imagenes/personajeD06.png", "imagenes/personajeD06.png", "imagenes/personajeD07.png", "imagenes/personajeD07.png", "imagenes/personajeD08.png", "imagenes/personajeD08.png"}); [...] direccion = DERECHA; SetAnchoAlto(30, 48); // Si se carga secuencia, ancho y alto deben ir detras } // Métodos de movimiento public void MoverDerecha() { if (saltando || cayendo) return; // No debe moverse mientras salta CambiarDireccion(DERECHA); if (miPartida.GetMapa().EsPosibleMover(x + incrX, y + alto - 4, x + ancho + incrX, y + alto)) { x += incrX; SiguienteFotograma(); } cayendo = true; }
Y ya sabes: la versión 0.12 completa está en la página del proyecto en Google Code.