Oneshot Gems
Jogar agora

Para desenvolvedores de jogos

Faça o movimento depender do tempo, não da contagem de quadros

O tempo delta é o tempo decorrido entre as atualizações. Multiplicar uma velocidade por segundos decorridos permite que um objeto cubra uma distância semelhante durante um segundo, independentemente de o navegador desenhar 45 ou 144 quadros. A parte complicada é decidir o que fazer quando o tempo decorrido se torna excepcionalmente grande. Se uma guia foi suspensa ou uma tarefa cara bloqueou o thread principal, aplicar cegamente toda a lacuna pode criar um salto que é matematicamente consistente, mas desagradável de jogar.

Nesta página

Mantenha as unidades visíveis no código

Escolha uma unidade de tempo e use-a de forma consistente. Se a velocidade estiver em pixels por segundo e o delta em segundos, a posição avança por velocidade × delta. Um teste manual útil é mover por dez segundos um marcador configurado para 80 pixels por segundo: ele deve percorrer cerca de 800 pixels no mundo, independentemente da quantidade de renderizações.

Não misture os milissegundos de performance.now() com uma velocidade por segundo sem dividir por 1.000. Nomeie os valores com suas unidades, como deltaSeconds ou speedPixelsPerSecond, para que um ajuste posterior não multiplique silenciosamente um movimento por mil.

Limite o efeito de uma pausa prolongada

Em um jogo de ação simples, limite delta a um máximo escolhido de propósito e aceite que a simulação fique brevemente mais lenta sob carga intensa. Em uma simulação de física que precisa de passos repetíveis, acumule o tempo e avance em incrementos fixos; limite o número de atualizações de recuperação para que esse processo não monopolize a página. Cada abordagem tem vantagens e custos: escolha de acordo com a sensação e as regras do jogo.

Teste com uma pausa artificial entre as atualizações e compare um movimento em linha reta com uma colisão no fim do percurso. Se o objeto atravessar um obstáculo fino, talvez sejam necessários subpassos menores ou um teste de colisão por varredura. Mudar apenas a taxa de renderização não resolverá esse problema nas regras do jogo.

Perguntas sobre ⁨delta time em jogos⁩

O tempo delta torna a física determinística?

Não. Intervalos de atualização variáveis ​​ainda podem produzir resultados de integração diferentes. Uma etapa de simulação fixa melhora a repetibilidade, embora o tempo de entrada e os detalhes de ponto flutuante ainda sejam importantes.

Qual relógio deve fornecer o tempo decorrido?

Use o carimbo de data/hora do callback de animação ou performance.now(); a MDN descreve ambos como fontes de tempo de alta resolução. Não use datas do relógio civil para intervalos curtos entre quadros, pois ajustes no relógio do sistema não têm relação com o tempo da simulação.

Leitura complementar

Viu alguma informação desatualizada? Informar uma correção

Continue jogando.

Jogos grátis no navegador, prontos quando você quiser. Encontre um de que goste e faça dele seu próximo favorito.

Siga sua curiosidade