Oneshot Gems
Jogar agora

Para desenvolvedores de jogos

Avance a simulação em etapas de tamanho fixo.

Um retorno de chamada de renderização pode chegar em intervalos irregulares, mas a física do jogo geralmente se comporta de maneira mais previsível quando avança em etapas iguais de simulação. Um timestep fixo faz com que cada atualização tenha a mesma duração, enquanto a renderização pode acontecer sempre que o navegador estiver pronto para pintar. Esta é uma escolha prática de implementação, não uma promessa de determinismo perfeito: chegada de entrada, comportamento de ponto flutuante e regras de colisão ainda são importantes. Use-o quando etapas de simulação estáveis ​​ajudarem sua mecânica e teste como o loop responde após um travamento do loop.

Nesta página

Acumule o tempo decorrido e execute atualizações locais

Em cada retorno de chamada de animação, adicione o tempo decorrido a um acumulador. Embora o acumulador contenha pelo menos uma etapa, atualize a física em um intervalo constante, como 1/60 de segundo, e subtraia esse intervalo. Em seguida, renderize o estado mais recente. Defina um número máximo de etapas de atualização por quadro; caso contrário, uma pausa longa pode causar um grande atraso que consome mais tempo e aprofunda o atraso. Decida explicitamente se o tempo excedente será eliminado, limitado ou tratado por outra regra de recuperação.

Mantenha as unidades consistentes. Se a velocidade for medida em unidades do mundo do jogo por segundo, multiplique-a pelo passo fixo dentro de cada atualização da simulação. Não multiplique a mesma velocidade pelo tempo total decorrido do quadro e também execute várias atualizações fixas, ou o movimento será contado duas vezes.

Lide com entrada e renderização em seus próprios limites

Amostre a entrada mantida em cada etapa da simulação ou enfileira ações únicas até que uma etapa as consuma. Se ocorrer um pressionamento de tecla entre dois quadros, certifique-se de que não seja perdido antes da próxima atualização. A renderização pode interpolar entre estados físicos, enquanto a colisão e a pontuação usam o estado de simulação. O MDN descreve requestAnimationFrame como um retorno de chamada único agendado antes da repintura e aconselha o uso de seu carimbo de data/hora para calcular o progresso; um acumulador usa esse carimbo de data/hora para manter as atualizações fixas.

Teste os limites do loop

Compare o mesmo movimento curto e colisão em quadros comuns, um quadro lento simulado e uma pausa mais longa. Verifique se um jogador não atravessa uma parede fina, ganha velocidade extra após um travamento do quadro ou provoca uma colisão várias vezes durante a recuperação. Teste a pausa e o retorno da guia oculta de acordo com a regra pretendida. Se o loop de passo fixo tornar a simulação estável, mas uma colisão ainda falhar em alta velocidade, use um método de colisão adequado ao movimento em vez de aumentar a frequência de renderização.

Perguntas sobre ⁨física fixa do jogo timestep⁩

Um intervalo de tempo fixo garante física determinística?

Não. Isso torna o intervalo de simulação consistente, mas o tempo de entrada, a matemática e a ordem de colisão ainda podem produzir variação. Controle-os separadamente para testes que exigem repetição.

Por que limitar as atualizações de atualização após uma paralisação de quadros?

Sem limites, a atualização pode monopolizar os frames posteriores e piorar o atraso. Escolha e teste uma política de recuperação adequada ao jogo, incluindo se o tempo simulado pode ser descartado.

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