Delta Time
Parte da seção O loop do jogo do Journey de Pygame da Coddy. Lição 18 de 32.
clock.tick(60) faz mais do que esperar. Ele retorna quantos milissegundos se passaram desde a última chamada: cerca de 17 a 60 quadros por segundo, mais em um computador lento que fica para trás. Divida por 1000 e você terá dt, a duração de um quadro em segundos:
dt = 0
while running:
# eventos, atualização, desenho, troca de buffers
dt = clock.tick(60) / 1000dt é 0 no primeiro quadro e, depois disso, corresponde à duração do último quadro. Some esses valores e você terá o tempo desde que o jogo começou:
elapsed += dtContar quadros, como em Gem Hunt, mede o tempo apenas enquanto o jogo roda a 60 quadros por segundo constantes. O tempo medido com dt é preciso em qualquer computador. O restante deste capítulo movimenta as coisas com base no tempo.
Desafio
FácilO pavio queima 1 pixel por quadro. Faça com que ele queime com base no tempo:
- Antes do loop, defina
elapsed = 0edt = 0. - Substitua
clock.tick(60)pordt = clock.tick(60) / 1000. - No loop, some
dtaelapsede defina a largura do pavio comomax(0, 480 - elapsed * 40), para que ele queime 40 pixels por segundo.
Experimente você mesmo
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 as lições de O loop do jogo
Pratique por conta própria: Playground de Pygame