Mit Zeit animieren
Teil des Abschnitts Sprites und Bilder der Pygame-Journey von Coddy. Lektion 27 von 36.
Ein Bildzähler koppelt die Animation an die Bildrate. Auf einem Computer, der nur 30 Bilder pro Sekunde schafft, flattern die Flügel des Käfers halb so schnell. Kopple sie stattdessen an die Zeit.
pygame.time.get_ticks() gibt die Anzahl der Millisekunden seit pygame.init() an. Teile sie durch die Dauer, die jedes Bild angezeigt werden soll, und du erhältst, wie viele Bilder vergangen sind; % macht daraus einen Index:
frame_index = pygame.time.get_ticks() // 120 % len(frames)Von 0 bis 119 ms ist das Bild 0, von 120 bis 239 ms Bild 1, dann 2 und dann wieder 0. Kein Zähler, den du speichern und zurücksetzen musst: eine Zeile, die für jedes Bild neu berechnet wird. Wenn das Spiel langsamer wird, überspringt die Animation ein Bild, statt ebenfalls langsamer zu werden.
// dividiert und lässt den Rest weg: 250 // 120 ergibt 2. Die dritte Zeile dieses Spritesheets zeigt einen fliegenden Käfer in drei Posen, in den Spalten 6 bis 8, bereits in frames zugeschnitten.
Aufgabe
Mittel- Entferne
timerund den Zähler. - Setze in jedem Frame
frame_indexanhand vonpygame.time.get_ticks(), sodass jedes der drei Bilder der Reihe nach 120 Millisekunden lang angezeigt wird.
Probier es selbst
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Flying Bug")
clock = pygame.time.Clock()
sheet = pygame.image.load("assets/sheets/platformer_characters.png").convert_alpha()
frames = []
for col in (6, 7, 8):
frame = sheet.subsurface((col * 24, 48, 24, 24))
frames.append(pygame.transform.scale_by(frame, 3))
frame_index = 0
timer = 0
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
timer += 1
if timer == 10:
timer = 0
frame_index = (frame_index + 1) % len(frames)
screen.fill((20, 22, 40))
image = frames[frame_index]
screen.blit(image, image.get_rect(center=(320, 240)))
pygame.display.flip()
clock.tick(60)
pygame.quit()
Alle Lektionen in Sprites und Bilder
1Bilder laden
Ein Bild ladenMit einem Rect platzierenDas Bild bewegenEinen Hintergrund kachelnTransparente Pixel2Drehen, Spiegeln, Skalieren
Um den Mittelpunkt drehenIn Flugrichtung ausrichtenEin Bild skalierenVom Original aus drehen3Klassen für Spielobjekte
Deine erste KlasseMethodenSelf ist das ObjektEine Liste von ObjektenObjekte mit BildernEine Unterklasse6Animation mit Sprite Sheets
Ein Sprite Sheet zuschneidenEin Frame-ZählerMit Zeit animierenEine einmalige ExplosionÜbe selbstständig: Pygame-Playground