0%
Loop de jogo, FPS e delta time — Capítulo 20

Capítulo 20 — Loop de jogo, FPS e delta time

Parte 2A — Os fundamentos do jogo 2D · Capítulo 20 de 62 · 6 h

Capítulo 20 — Loop de jogo, FPS e delta time

Nível: intermediário Duração estimada: 6 h Pré-requisitos: capítulo 19 — Flutter acelerado para jogos (runApp, StatefulWidget, setState, Ticker, CustomPainter) O que você saberá fazer ao final: escrever um loop de jogo completo em Dart e em Flutter puro, medir os FPS e fazer um objeto se mover na mesma velocidade real em todas as máquinas graças ao delta time.


20.0 — Objetivos do capítulo

Ao final deste capítulo, você será capaz de:

  • explicar o que distingue tecnicamente um jogo de um aplicativo clássico;
  • descrever o esquema entradas → atualização → renderização e redesenhá-lo de memória;
  • escrever um primeiro loop de jogo em Dart console;
  • explicar por que um while (true) congela um aplicativo Flutter;
  • definir um quadro (frame) e uma taxa de quadros por segundo (FPS);
  • converter um número de FPS em duração de frame em milissegundos, e vice-versa;
  • demonstrar o bug de um deslocamento escrito x += 5 por frame;
  • definir o delta time e escrever x += vitesse * dt;
  • raciocinar em pixels por segundo em vez de pixels por frame;
  • calcular um dt a partir de um Stopwatch;
  • usar um Ticker e SchedulerBinding para controlar um loop Flutter;
  • exibir um contador de FPS e suavizá-lo com uma média móvel;
  • reconhecer um dt aberrante após um pico de lag e limitá-lo com clamp;
  • implementar um passo de tempo fixo com um acumulador;
  • comparar passo fixo e passo variável e escolher com conhecimento de causa;
  • desacoplar a atualização da renderização e interpolar entre dois estados;
  • pausar o jogo, colocá-lo em câmera lenta ou acelerado com um fator de tempo;
  • nomear com precisão o que o motor Flame fará por você a partir do capítulo 27;
  • montar um pequeno motor de loop reutilizável para todos os capítulos seguintes.

Comentários

Os comentários são alimentados pelo GitHub Discussions

Conecte-se com o GitHub para participar da discussão

Link copiado!