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) / 1000dt 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 += dtCompter 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.
Défi
FacileLa mèche brûle d’un pixel par image. Faites-la brûler en fonction du temps :
- Avant la boucle, définissez
elapsed = 0etdt = 0. - Remplacez
clock.tick(60)pardt = clock.tick(60) / 1000. - Dans la boucle, ajoutez
dtàelapsedet définissez la largeur de la mèche surmax(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
1Déplacer un carré
Ouvrir une fenêtreRemplir l’arrière-plan4Déplacement en fonction du temps
Temps deltaPixels par secondeVector2Accélération et frictionBoucler autour de l’écranEntraînez-vous par vous-même : Playground Pygame