Death Pit Remake
Un remake parcial de un juego... paso a paso
17.- Personaje "animado"
El trabajo propuesto
El personaje deberá alternar al menos entre dos fotogramas cuando se mueve, para dar una impresión de movimiento más real. Lo mismo deberá ocurrir con el enemigo.
Forma de conseguirlo
La clase "ElementoGrafico" ya tiene soporte para imágenes formadas por varios fotogramas consecutivos, que se guardan en un "array de imágenes". Basta con usar "CargarSecuencia" en lugar de "CargarImagen", e indicar la dirección en la queremos que "mire" inicialmente (tenemos definidas constantes como ARRIBA y ABAJO):
public class Personaje : ElemGrafico { public Personaje(Partida p) { //Antes era: CargarImagen("imagenes/personaje.png"); direccion = IZQUIERDA; CargarSecuencia( DERECHA, new string[] {"imagenes/personajed1.png", "imagenes/personajed1.png","imagenes/personajed1.png", "imagenes/personajed2.png", "imagenes/personajed2.png","imagenes/personajed2.png"} ); CargarSecuencia( IZQUIERDA, new string[] {"imagenes/personajei1.png", "imagenes/personajei1.png","imagenes/personajei1.png", "imagenes/personajei2.png", "imagenes/personajei2.png","imagenes/personajei2.png"} ); CargarSecuencia( ARRIBA, new string[] {"imagenes/personajea1.png", "imagenes/personajea1.png","imagenes/personajea1.png", "imagenes/personajea2.png", "imagenes/personajea2.png","imagenes/personajea2.png"} ); CargarSecuencia( ABAJO, new string[] {"imagenes/personajea1.png", "imagenes/personajea1.png","imagenes/personajea1.png", "imagenes/personajea2.png", "imagenes/personajea2.png","imagenes/personajea2.png"} ); ancho =70; alto = 50; ...
En este caso, hemos incluido algunas imágenes repetidas, porque el juego avanzará a 25 fotogramas por segundo, pero no queremos que el personaje cambie de fotograma también 25 veces por segundo. Una forma de conseguirlo sería contando fotogramas y comprobando si ya han pasado tantos como para cambiar de imagen. La alternativa simple, que hemos usado aquí, es mostrar varias veces la misma imagen, con lo que parece que no cambia tan rápido.
A partir de ahora, cuando queramos que el Personaje pase de una imagen (fotograma) a la siguiente, usaremos la función "SiguienteFotograma". Y si queremos que pase de una dirección a otra, usaremos "CambiaDirección". Por ejemplo, la función "MoverDerecha" completa, que cambiara de dirección, se moviera a la pantalla contigua si ya estamos en el extremo derecho, y avanzara un poco, cambiando de fotograma, si no estamos en el extremo derecho de la pantalla (y es posible mover a la derecha) quedaría así:
public void MoverDerecha() { CambiarDireccion(DERECHA); if (x >= miPartida.GetMapa().GetMaxX()-5) { x = 0; miPartida.GetMapa().IrAHabitacionDerecha(); miPartida.RecolocarEnemigo(); } else if (x < miPartida.GetMapa().GetMaxX()) if (miPartida.GetMapa().EsPosibleMover((short) (x+incrX),y, (short) (x+ancho +incrX),(short) (y+alto))) { x += incrX; SiguienteFotograma(); } }
De igual modo, podríamos hacer que el enemigo también cambiara de imagen: la secuencia de imágenes la cargaríamos en el constructor de la clase "Escorpión" y cambiaríamos de dirección o de fotograma en el método "Mover", que pertenece a la clase superior, "EnemigoMortal".
Siguiente entrega...Acceso rápido
- 00.- Motivo
- 01.- Esqueleto vacío
- 02.- Un personaje que se mueve solo
- 03.- Personaje que se mueve con teclado. Enemigo simultáneo
- 04.- Presentación. Dos enemigos con distinto comportamiento
- 05.- Varios enemigos iguales
- 06.- Un fondo formado por "casillas" repetitivas (tiles)
- 07.- El personaje se mueve por el laberinto
- 08.- Un fuente más modular
- 09.- Varias pantallas conectadas
- 10.- Un enemigo que se mueve por el laberinto
- 11.- Varias vidas
- 12.- Distintas imágenes según la dirección. Matar enemigos y obtener puntos.
- 13.- Volver a empezar una partida.
- 14.- Rediseño usando objetos
- 15.- Pantalla de créditos
- 16.- Movimiento suave del personaje
- 17.- Personaje "animado"
- 18.- Leyendo el mapa desde fichero
- 19.- Animación al morir un enemigo (Aún no)
- 20.- Varios tipos de enemigos (Aún no)
- 21.- Un mapa más grande (Aún no)
- 22.- Tabla de records (Aún no)
- 23.- Recoger "premios" (Aún no)
- 24.- Gastar aire y "energía" (Aún no)
- Orig.- Algunos datos sobre el juego original