Menu
CoddyTech

Temps delta

Fait partie de la section La boucle de jeu du Journey Pygame de Coddy. Leçon 18 sur 32.

clock.tick(60) ne fait pas que patienter. Cette fonction renvoie le nombre de millisecondes écoulées depuis son dernier appel : environ 17 à 60 images par seconde, davantage sur un ordinateur lent qui prend du retard. Divisez par 1000 et vous obtenez dt, la durée d’une image en secondes :

dt = 0

while running:
    # événements, mise à jour, dessin, basculement de l’affichage
    dt = clock.tick(60) / 1000

dt vaut 0 à la première image, puis correspond à la durée de la dernière image. Additionnez ces valeurs et vous obtenez le temps écoulé depuis le démarrage du jeu :

elapsed += dt

Compter les images, comme dans Gem Hunt, ne permet de suivre le temps que lorsque le jeu tourne à 60 images par seconde. Le temps mesuré avec dt est précis sur n’importe quel ordinateur. Dans la suite de ce chapitre, les déplacements seront calculés en fonction du temps.

challenge icon

Défi

Facile

La mèche brûle d’un pixel par image. Faites-la brûler en fonction du temps :

  1. Avant la boucle, définissez elapsed = 0 et dt = 0.
  2. Remplacez clock.tick(60) par dt = clock.tick(60) / 1000.
  3. Dans la boucle, ajoutez dt à elapsed et définissez la largeur de la mèche sur max(0, 480 - elapsed * 40), afin qu’elle brûle de 40 pixels par seconde.

Essayez vous-même

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()

Toutes les leçons de La boucle de jeu

Entraînez-vous par vous-même : Playground Pygame