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) / 1000dt 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 += dtDas 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.
Aufgabe
EinfachDie Zündschnur brennt pro Frame 1 Pixel ab. Lass sie zeitbasiert abbrennen:
- Setze vor der Schleife
elapsed = 0unddt = 0. - Ersetze
clock.tick(60)durchdt = clock.tick(60) / 1000. - Addiere in der Schleife
dtzuelapsedund setze die Breite der Zündschnur aufmax(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
1Bewege ein Quadrat
Öffne ein FensterFülle den Hintergrund4Bewegung nach Zeit
Delta-ZeitPixel pro SekundeVector2Beschleunigung und ReibungAm Bildschirmrand umkehrenÜbe selbstständig: Pygame-Playground