Animación de carrera
Parte de la sección Reglas del juego del Journey de Pygame de Coddy. Lección 25 de 29.
El corredor se desliza. El paquete tiene una segunda imagen del mismo héroe, player_walk.png, con las piernas separadas. Alternar entre las dos imágenes hace que corra.
Mantén ambas en una lista y cuenta los fotogramas. self.step // 8 aumenta en 1 cada 8 fotogramas, y % 2 lo convierte en 0, 1, 0, 1:
if self.rect.bottom == GROUND_Y:
self.step += 1
self.image = self.frames[self.step // 8 % 2]
else:
self.image = self.frames[1]8 fotogramas por imagen equivalen a unos siete pasos por segundo a 60 fotogramas por segundo. Menos fotogramas hacen que corra más rápido; más hacen que vaya más despacio.
En el aire no hay nada sobre lo que correr, así que el corredor mantiene una imagen hasta que aterriza. Carga ambas imágenes una sola vez, en __init__, y alterna cuál de ellas nombra self.image: el grupo o el blit dibuja lo que esta nombre.
Desafío
Intermedio- Carga
player.pngyplayer_walk.pngen una lista,self.frames, conself.imageempezando con el primero yself.step = 0. - En
update(), en el suelo, cuenta un paso y muestraself.frames[self.step // 8 % 2]. - En el aire, muestra
self.frames[1].
Pruébalo tú mismo
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 320))
pygame.display.set_caption("Sky Runner")
clock = pygame.time.Clock()
SKY = (140, 200, 240)
GROUND = (90, 160, 80)
GROUND_Y = 260
GRAVITY = 1
class Runner(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = pygame.image.load("assets/images/player.png").convert_alpha()
self.rect = self.image.get_rect(midbottom=(100, GROUND_Y))
self.vy = 0
def jump(self):
if self.rect.bottom == GROUND_Y:
self.vy = -16
def update(self):
self.vy += GRAVITY
self.rect.y += self.vy
if self.rect.bottom >= GROUND_Y:
self.rect.bottom = GROUND_Y
self.vy = 0
runner = Runner()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN and event.key in (pygame.K_SPACE, pygame.K_UP):
runner.jump()
runner.update()
screen.fill(SKY)
pygame.draw.rect(screen, GROUND, (0, GROUND_Y, 640, 60))
screen.blit(runner.image, runner.rect)
pygame.display.flip()
clock.tick(60)
pygame.quit()
Todas las lecciones de Reglas del juego
3Temporizadores y oleadas
A salvo tras un golpeUn evento de temporizadorUna roca cada 800 msOleadas que crecenCuenta atrás para empezar6Corredor del cielo
El corredorSaltarPractica por tu cuenta: Playground de Pygame