Menu
CoddyTech

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

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

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

challenge icon

Desafio

Fácil

O pavio queima 1 pixel por quadro. Faça com que ele queime com base no tempo:

  1. Antes do loop, defina elapsed = 0 e dt = 0.
  2. Substitua clock.tick(60) por dt = clock.tick(60) / 1000.
  3. No loop, some dt a elapsed e defina a largura do pavio como max(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