Menu
CoddyTech

Delta-Zeit

Teil des Abschnitts Die Spielschleife der Pygame-Journey von Coddy. Lektion 18 von 32.

clock.tick(60) wartet nicht nur. Es gibt zurück, wie viele Millisekunden seit dem letzten Aufruf vergangen sind: bei 60 Bildern pro Sekunde etwa 17, bei einem langsamen Computer, der nicht hinterherkommt, mehr. Teile durch 1000, und du erhältst dt, die Länge eines Frames in Sekunden:

dt = 0

while running:
    # Ereignisse, Aktualisieren, Zeichnen, Bildschirminhalt anzeigen
    dt = clock.tick(60) / 1000

dt ist im ersten Frame 0 und danach die Länge des letzten Frames. Addiere die Werte, und du erhältst die Zeit seit dem Start des Spiels:

elapsed += dt

Das Zählen von Frames, wie bei Gem Hunt, misst die Zeit nur dann korrekt, wenn das Spiel mit konstant 60 Bildern pro Sekunde läuft. Mit dt gemessene Zeit stimmt auf jedem Computer. Im Rest dieses Kapitels bewegen wir Dinge anhand der Zeit.

challenge icon

Aufgabe

Einfach

Die Zündschnur brennt pro Frame 1 Pixel ab. Lass sie zeitbasiert abbrennen:

  1. Setze vor der Schleife elapsed = 0 und dt = 0.
  2. Ersetze clock.tick(60) durch dt = clock.tick(60) / 1000.
  3. Addiere in der Schleife dt zu elapsed und setze die Breite der Zündschnur auf max(0, 480 - elapsed * 40), sodass sie 40 Pixel pro Sekunde abbrennt.

Probier es selbst

import pygame

pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Fuse")
clock = pygame.time.Clock()

width = 480

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    width = max(0, width - 1)

    screen.fill((30, 30, 46))
    pygame.draw.rect(screen, (255, 150, 40), (0, 170, width, 20))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Alle Lektionen in Die Spielschleife

Übe selbstständig: Pygame-Playground