Animation de course
Fait partie de la section Règles du jeu du Journey Pygame de Coddy. Leçon 25 sur 29.
Le coureur glisse. Le jeu contient une deuxième image du même héros, player_walk.png, avec les jambes écartées. Alterner entre les deux images le fait courir.
Garde les deux images dans une liste et compte les images d’animation. self.step // 8 augmente de 1 toutes les 8 images, et % 2 transforme cela 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 images par image d’animation, c’est environ sept pas par seconde à 60 images par seconde. Moins d’images le font courir plus vite, davantage le ralentissent.
En l’air, il n’y a rien sur quoi courir, alors le coureur garde une image jusqu’à ce qu’il atterrisse. Charge les deux images une seule fois, dans __init__, et change celle que désigne self.image : le groupe ou le blit dessine l’image qu’elle désigne.
Défi
Moyen- Charge
player.pngetplayer_walk.pngdans une liste,self.frames, avecself.imageinitialisé à la première image etself.step = 0. - Dans
update(), au sol, incrémente le compteur de pas et afficheself.frames[self.step // 8 % 2]. - Dans les airs, affiche
self.frames[1].
Essayez vous-même
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()
Toutes les leçons de Règles du jeu
3Minuteurs et vagues
En sécurité après un impactUn événement de minuterieUn rocher toutes les 800 msDes vagues qui grandissentCompte à rebours avant le départ6Coureur du ciel
Le coureurSauterEntraînez-vous par vous-même : Playground Pygame