Delta czasu
Część sekcji Pętla gry ścieżki Pygame w Coddy. Lekcja 18 z 32.
clock.tick(60) robi więcej niż tylko czeka. Zwraca liczbę milisekund, które upłynęły od ostatniego wywołania: około 17 przy 60 klatkach na sekundę, a więcej na wolnym komputerze, który nie nadąża. Podziel tę wartość przez 1000, a otrzymasz dt, czyli długość klatki w sekundach:
dt = 0
while running:
# zdarzenia, aktualizacja, rysowanie, przełączenie buforów
dt = clock.tick(60) / 1000dt wynosi 0 w pierwszej klatce, a potem odpowiada długości poprzedniej klatki. Zsumuj te wartości, a otrzymasz czas, który upłynął od rozpoczęcia gry:
elapsed += dtZliczanie klatek, tak jak w Gem Hunt, mierzy czas poprawnie tylko wtedy, gdy gra działa z pełną prędkością 60 klatek na sekundę. Czas mierzony za pomocą dt jest prawidłowy na każdym komputerze. W pozostałej części tego rozdziału obiekty będą poruszać się w zależności od czasu.
Wyzwanie
ŁatwyBezpiecznik spala się o 1 piksel na klatkę. Spraw, by spalał się w zależności od czasu:
- Przed pętlą ustaw
elapsed = 0idt = 0. - Zastąp
clock.tick(60)przezdt = clock.tick(60) / 1000. - W pętli dodaj
dtdoelapsedi ustaw szerokość bezpiecznika namax(0, 480 - elapsed * 40), aby spalał się z prędkością 40 pikseli na sekundę.
Spróbuj swoich sił
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()
Wszystkie lekcje w sekcji Pętla gry
Poćwicz samodzielnie: Edytor online Pygame