Menu
CoddyTech

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

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

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

challenge icon

Sfida

Facile

La miccia brucia 1 pixel per fotogramma. Falla bruciare in base al tempo:

  1. Prima del ciclo, imposta elapsed = 0 e dt = 0.
  2. Sostituisci clock.tick(60) con dt = clock.tick(60) / 1000.
  3. Nel ciclo, aggiungi dt a elapsed e imposta la larghezza della miccia su max(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