domingo, 4 de enero de 2009

pacman 0.007 - animando al pacman

código pacman

En esta ocasión vamos a mejorar nuestro juego haciendo una especie de gif animado con nuestro pacman para que abra y cierre la boca. Además, aprovechamos la ocasión para refactorizar nuestro código creando la clase "SpriteMovil" de la que heredera todos los sprites que se mueven en pantalla como el pacman y los fantasmas. El resto de objetos estáticos heredaran de la clase "MiSprite".

El sprite Pacman contará con una lista de imágenes que irá cambiando según la dirección que tome el pacman y de forma continua para simular el efecto de abrir y cerrar la boca. Vamos a tener cuatro vectores de ocho imágenes, uno con pacman apuntando a la izquierda, otro a la derecha, otro arriba y el último, con pacman apuntando hacia abajo. Cargamos las imágenes en el constructor de la clase Pacman

class Pacman ( SpriteMovil ):
NUMERO_FOTOGRAMAS = 8

def __init__(self, fichero_imagen, pos_inicial):
SpriteMovil.__init__(self, fichero_imagen, pos_inicial, [0,0])
self.vidas = 3
self.puntos = 0

self.__imagenArriba = {}
self.__imagenAbajo = {}
self.__imagenDerecha = {}
self.__imagenIzquierda = {}

for i in range(0, self.NUMERO_FOTOGRAMAS, 1):
self.__imagenIzquierda[i] = cargar_imagen(
"pacman-izquierda" + str(i+1) + ".gif")
self.__imagenDerecha[i] = cargar_imagen(
"pacman-derecha" + str(i+1) + ".gif")
self.__imagenArriba[i] = cargar_imagen(
"pacman-arriba" + str(i+1) + ".gif")
self.__imagenAbajo[i] = cargar_imagen(
"pacman-abajo" + str(i+1) + ".gif")

self.__fotogramasActuales = self.__imagenDerecha
self.__fotogramaActual = 1
self.__tiempoCambioFotograma = pygame.time.get_ticks()

La propiedad "_fotogramasActuales" cambiará según la dirección que tome nuestro Pacman y la propiedad "_fotogramaActual" cambiará de forma iterativa a lo largo del tiempo cada 100 milisegundos, tomando como valores de 1 a 8, lo que represesenta cada uno de los ocho fotogramas. Estas propiedades se cambian en la función "update" de la clase "Pacman".
def update (self):
...
if self.velocidad[0] > 0:
self.__fotogramasActuales = self.__imagenDerecha
elif self.velocidad[0] < 0:
self.__fotogramasActuales = self.__imagenIzquierda
elif self.velocidad[1] > 0:
self.__fotogramasActuales = self.__imagenAbajo
elif self.velocidad[1] < 0:
self.__fotogramasActuales = self.__imagenArriba

if pygame.time.get_ticks()-self._tiempoCambioFotograma > 100:
self.__fotogramaActual = (self.__fotogramaActual + 1) %
self.NUMERO_FOTOGRAMAS
self.__tiempoCambioFotograma = pygame.time.get_ticks()

En nuestra próxima versión del juego introduciremos los sonidos y algunas mejoras más.

No hay comentarios: