Monigote animado y marcador

Hoy ha sido un día productivo. Hemos avanzado bastante, y aunque el código no esté muy limpio, la cosa funciona, ya limpiaremos el código. Voy a comentar un poco lo que hemos conseguido.

Primer Paso: Cargar un monigote en forma de tiles.

Teniamos algunos monigotes que trajo Nasek, estuve mirando el Ryu, pero no estaba bien organizada la imagen, no tenían el mismo ancho cada frame, ni estaban encuadrados bien. Así que después de intentar recortar al Ryu hemos cogido la imagen de losersjuegos. Y como esta estaba bien, pues me he puesto a programar.

He cogido de base la clase AnimatedSprite de este tutorial, ya que queremos que el monigote se mueva mientras está parado, y cuando anda.
Para cargar una imagen, lo que hago es usar el ResourceLoader para cargar la imagen completa, con todos los tiles, y le paso el numero de imagenes que hay por columna, y por fila, para así dividir el ancho total de la imagen por el numero de columnas, y obtener el ancho de cada imagen, e igualmente el alto. Una vez conseguido esto creo un vector de imagenes donde voy metiendo cada frame recortado de la imagen:


 81   def load(self, path, filas, columnas):
 82         """
 83         Carga una imagen de tipo tile, en un vector de imagenes.
 84         Devuelve un vector de imagenes.
 85         path es la ruta a la imagen
 86         filas es el numero de frames en una columna
 87         columnas es el numero de frames en una fila
 88         """
 89         images = []
 90         img = ResourceLoader.ResourceLoader.load(path)
 91         img = pygame.transform.rotozoom(img, 0, 3)
 92         alto = img.get_height() / filas
 93         ancho = img.get_width() / columnas
 94         aux_img = pygame.Surface((ancho, alto))
 95 
 96         for i in range(filas):
 97             for j in range(columnas):
 98                 aux_img = pygame.Surface((ancho, alto))
 99                 area = pygame.Rect(j*ancho, i*alto, ancho, alto)
100                 aux_img.blit(img, (0,0), area)
101                 aux_img = aux_img.convert()
102                 aux_img.set_colorkey(aux_img.get_at((0,0)))
103                 images.append(aux_img)
104 
105         return images

Con esto ya tenemos todas las imagenes en un vector, y podemos acceder a cada una de ellas con self._images[frame].

Para cuando anda he modificado el update de AnimatedSprite, pudiendo cambiar la animación. Una animación es una lista de frames a utilizar. También le he metido una gravedad y un suelo, para que caiga, y poder saltar. Para saltar lo único que hago es poner la variable vel_caida negativa, y en cada frame le voy sumando la gravedad, por lo que sube y baja de forma suave, con aceleración.


 48         if not self.en_suelo() or self.vel_caida < 0:
 49             if self.vel_caida  10:
 52                 self.image = self._images[12]
 53             else: self.image = self._images[11]
 54             self.vel_caida += self.gravedad
 55             self.center[1] += self.vel_caida
 56         else: self.vel_caida = 0

Se coloca una imagen dependiendo de si está subiendo, bajando, o en la transición entre subida y bajada.

Con respecto al marcador, ha estado trabajando en él Penyaskito. Ha hecho unas barras de vida, que se decrementan de forma animada. Para ello ha pintado un rectangulo de fondo, y uno sobre este que es la barra de vida. De momento está puesto de tal forma que si pulsas espacio se decrementa. En principio tiene 100 de vida, y cuando pulsas espacio va bajando la vida hasta un limite impuesto. De esta forma se consigue que esté animado.

También se ha creado un reloj, pero aún no funciona bien, así que hay que mirarlo, y utilizar las funciones de tiempo de python, import time, y calcular el tiempo con eso.

Y creo que eso es todo, Penyaskito, cuenta tú algo más detallado de lo que has hecho en comentarios, si te parece. Yo ya no escribo más. Eso sí, voy a poner un screenshot.

Un comentario sobre “Monigote animado y marcador

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s