Tiempo delta
Parte de la sección El bucle del juego del Journey de Pygame de Coddy. Lección 18 de 32.
clock.tick(60) hace más que esperar. Devuelve cuántos milisegundos han pasado desde su última llamada: unos 17 a 60 fotogramas por segundo, más en un ordenador lento que se queda atrás. Divide entre 1000 y obtienes dt, la duración de un fotograma en segundos:
dt = 0
while running:
# eventos, actualizar, dibujar, flip
dt = clock.tick(60) / 1000dt es 0 en el primer fotograma y, después, la duración del último fotograma. Súmalo y obtendrás el tiempo transcurrido desde que empezó el juego:
elapsed += dtContar fotogramas, como hacía Gem Hunt, solo mide el tiempo mientras el juego funciona a 60 fotogramas por segundo. El tiempo medido con dt es preciso en cualquier ordenador. En el resto de este capítulo, los elementos se moverán según el tiempo.
Desafío
FácilLa mecha se consume 1 píxel por fotograma. Haz que se consuma en función del tiempo:
- Antes del bucle, establece
elapsed = 0ydt = 0. - Reemplaza
clock.tick(60)pordt = clock.tick(60) / 1000. - En el bucle, suma
dtaelapsedy establece el ancho de la mecha enmax(0, 480 - elapsed * 40), para que se consuma 40 píxeles por segundo.
Pruébalo tú mismo
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()
Todas las lecciones de El bucle del juego
1Mueve un cuadrado
Abre una ventanaRellena el fondo4Movimiento basado en el tiempo
Tiempo deltaPíxeles por segundoVector2Aceleración y fricciónReaparecer al otro lado de la pantallaPractica por tu cuenta: Playground de Pygame