Laufanimation
Teil des Abschnitts Spielregeln der Pygame-Journey von Coddy. Lektion 25 von 29.
Der Läufer gleitet dahin. Das Bildpaket enthält ein zweites Bild desselben Helden, player_walk.png, mit gespreizten Beinen. Der Wechsel zwischen den beiden Bildern lässt ihn laufen.
Bewahre beide in einer Liste auf und zähle die Frames. self.step // 8 erhöht sich alle 8 Frames um 1, und % 2 macht daraus 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 Frames pro Bild entsprechen bei 60 Frames pro Sekunde etwa sieben Schritten pro Sekunde. Weniger Frames lassen ihn schneller laufen, mehr lassen ihn langsamer laufen.
In der Luft gibt es nichts, worauf er laufen kann, also hält der Läufer ein Bild fest, bis er landet. Lade beide Bilder einmal in __init__ und ändere, welches Bild self.image bezeichnet: Die Gruppe oder der Blit zeichnet, was es bezeichnet.
Aufgabe
Mittel- Lade
player.pngundplayer_walk.pngin eine Listeself.frames, wobeiself.imagemit dem ersten Bild beginnt undself.step = 0gesetzt ist. - Zähle in
update()am Boden einen Schritt und zeigeself.frames[self.step // 8 % 2]an. - Zeige in der Luft
self.frames[1]an.
Probier es selbst
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()
Alle Lektionen in Spielregeln
Übe selbstständig: Pygame-Playground