Delta Time
Fa parte della sezione Il game loop del percorso Pygame di Coddy. Lezione 18 di 32.
clock.tick(60) fa più che aspettare. Restituisce quanti millisecondi sono trascorsi dall'ultima chiamata: circa 17 a 60 fotogrammi al secondo, di più su un computer lento che resta indietro. Dividi per 1000 e ottieni dt, la durata di un fotogramma in secondi:
dt = 0
while running:
# eventi, aggiornamento, disegno, scambio dei buffer
dt = clock.tick(60) / 1000dt è 0 nel primo fotogramma e, da quel momento in poi, corrisponde alla durata dell'ultimo fotogramma. Somma i valori e ottieni il tempo trascorso dall'avvio del gioco:
elapsed += dtContare i fotogrammi, come faceva Gem Hunt, misura il tempo correttamente solo quando il gioco gira a 60 fotogrammi al secondo. Il tempo misurato con dt è preciso su qualsiasi computer. Nel resto di questo capitolo, gli elementi si muoveranno in base al tempo.
Sfida
FacileLa miccia brucia 1 pixel per fotogramma. Falla bruciare in base al tempo:
- Prima del ciclo, imposta
elapsed = 0edt = 0. - Sostituisci
clock.tick(60)condt = clock.tick(60) / 1000. - Nel ciclo, aggiungi
dtaelapsede imposta la larghezza della miccia sumax(0, 480 - elapsed * 40), così brucia 40 pixel al secondo.
Provalo tu
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()
Tutte le lezioni di Il game loop
Esercitati da solo: Playground Pygame