Menu
CoddyTech

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) / 1000

dt 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 += dt

Zliczanie 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.

challenge icon

Wyzwanie

Łatwy

Bezpiecznik spala się o 1 piksel na klatkę. Spraw, by spalał się w zależności od czasu:

  1. Przed pętlą ustaw elapsed = 0 i dt = 0.
  2. Zastąp clock.tick(60) przez dt = clock.tick(60) / 1000.
  3. W pętli dodaj dt do elapsed i ustaw szerokość bezpiecznika na max(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