miércoles, 10 de octubre de 2012

Reporte de la Semana 5

De acuerdo a nuestra calendarización, los objetivos a cumplir en esta semana son:
  • Animación de Personaje(Básica)
  • Movimientos de personaje dummy en pyGame
  • Side-Scrolling
  • Creación de Objetos Estáticos (Prototipos)
  • Interacción del personaje dummy con Objetos
Adición de un personaje en pyGame

Como habiamos mencionado anteriormente, el juego será 2D, por lo que para crear las animaciones de los personajes en el juego se utilizarán spritesheets, que no son más que imágenes de los personajes en diferentes posiciones. Por ejemplo, para las pruebas que estamos realizando, utilizamos el siguiente spritesheet de Scott Pilgrim:


Como se puede ver en esta imágen se encuentra el mismo personaje en diferentes posiciones.

Entonces si queremos crear la animación del personaje en movimiento, localizamos todos los sprites que contienen esta animación por separado dentro de la imágen, que son los siguientes:


Para cada uno, localizamos las coordenadas x, y de la parte superior izquierda del rectángulo que pueda cubrir todo el sprite. También, definimos un ancho y un largo, que a partir de los puntos previos se extenderá para encuadrar al sprite, cuidando que toda la imágen del sprite quede dentro del rectángulo.

Entonces si el spritesheet fuera la imágen anterior, las coordenadas del primer sprite serían:

Estos 4 datos son escritos en un archivo, que se llamará nombre.coords, donde nombre es el mismo nombre de la imágen que se usará como spritesheet. El archivo contiene en cada línea el siguiente formato:

nombre_animación (x1, y1, ancho1, largo1) (x2, y2, ancho2, largo2) ... (xn, yn, anchon, largon)
    • nombre_animación es el nombre de la animación que se creará con las coordenadas.
    • Las x, y son las coordenadas de inicio en el spritesheet para crear el rectángulo del personaje.
    • ancho y largo son las dimensiones que tomará el rectángulo a partir de las coordenadas de inicio.
Con este archivo, el programa cargara un vector con todas las coordenadas de las animaciones que se usarán para un determinado personaje. Algunos ejemplos de animaciones:



Movimiento

Moverlos dentro de la pantalla no es difícil, ya creados los vectores con las animaciones. Para esto se usa el teclado, moviendo con las flechas direccionales al personaje hacia la derecha o izquierda. Cuando se presiona una tecla, se empieza a incrementar una variable cada cierto tiempo. Cada que se incrementa se muestra un diferente sprite, creando la animación. Además dependiendo de la dirección a la que se quiere mover, se mueven las coordenadas del personaje en la pantalla a una velocidad determinada.

Es importante checar que estas coordenadas no salgan del tamaño de la ventana, y si es así basta con regresarlo dentro. A continuación se puede ver el movimiento del personaje dentro de la ventana:


Adición-interacción de objetos estáticos en pyGame

Ahora para agregar items en la ventana, basta con tomar la imagen que se usará para el item y asignarle unas coordenadas dentro de la ventana. En el caso del ejemplo estas coordenadas son aleatorias. Lo importante ahora es añadir interacción con este objeto. 

Debido a que estamos utlizando la clase sprite de pyGame, esto es sencillo. Para cada objeto-personaje en el juego debemos de guardar un Rect, que es un objeto que contiene datos del rectángulo "virtual" que cubre cada objeto-personaje. Entonces en este caso el personaje tiene su propio rect, y el item txambién lo tiene. Lo que hacemos es utilizar colliderect para checar si el personaje entro en contacto con el item, y si es así, un evento debe ocurrir, en este caso un contador se incrementa y el item vuelve a aparecer aleatoriamente en algún lugar del mapa.

Esta interacción puede observarse a continuación:


Side-Scrolling

Una parte importante del juego es el side-scrolling, es decir, mover el mapa conforme va avanzando el personaje. Para esto es necesaria una imágen enormememte larga que represente el fondo del mapa. En el caso de este ejemplo, se usó la siguiente:


Al igual que los sprites quizás sea necesario definir donde empieza y donde termina el mapa real, debido a que la imágen contiene otros datos además del mapa.

Lo siguiente es detectar cada que un personaje se acerca al limite de la pantalla, ya sea izquierdo o derecho(si el juego tiene scrolling vertical también sería necesario checar eso). Para esto checamos la posición del personaje y sumamos 100 a su coordenada en x para checar si esta cerca del lado derecho, o restamos 100 para checar el lado izquierdo. También es necesario saber en que parte del mapa estamos, por lo cual debemos ir guardando las coordenadas actuales del mapa conforme se va haciendo scroll, para no salir del inicio o el final.

Cada que el programa detecte que el personaje se acerca a algún lado de la pantalla, se hace el scroll aumentando las coordenadas en x del mapa que se estan tomando para el fondo. Esto se puede observar a continuación:



Referencias:

No hay comentarios:

Publicar un comentario en la entrada