Animazione della corsa
Fa parte della sezione Regole di gioco del percorso Pygame di Coddy. Lezione 25 di 29.
Il corridore scivola. Il pacchetto contiene una seconda immagine dello stesso eroe, player_walk.png, con le gambe divaricate. Alternare le due immagini lo fa correre.
Inseriscile entrambe in un elenco e conta i fotogrammi. self.step // 8 aumenta di 1 ogni 8 fotogrammi e % 2 lo trasforma in 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 fotogrammi per immagine corrispondono a circa sette passi al secondo a 60 fotogrammi al secondo. Con meno fotogrammi corre più velocemente, con più fotogrammi rallenta.
In aria non c'è nulla su cui correre, quindi il corridore mantiene un'immagine finché non atterra. Carica entrambe le immagini una sola volta, in __init__, e alterna quale delle due indica self.image: il gruppo o il blit disegna ciò a cui fa riferimento.
Sfida
Medio- Carica
player.pngeplayer_walk.pngin un elenco,self.frames, conself.imageche inizia con il primo elemento eself.step = 0. - In
update(), quando è a terra, conta un passo e mostraself.frames[self.step // 8 % 2]. - In aria, mostra
self.frames[1].
Provalo tu
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()
Tutte le lezioni di Regole di gioco
3Timer e ondate
Al sicuro dopo un colpoUn evento del timerUna roccia ogni 800 msOnde che cresconoConto alla rovescia per partire6Corridore del cielo
Il corridoreSaltoEsercitati da solo: Playground Pygame