Eu Construí Corrotinas para a Minha Engine de Jogo, Depois Não as Usei

Eu construí um sistema de corrotinas de generator para a minha engine de jogo. Tinha 122 linhas de código e 12 testes. Resolvia o problema do callback hell. Fazia com que os scripts parecessem linhas retas.

Depois, escolhi não usá-lo para a minha lógica de jogo. Em vez disso, usei uma Máquina de Estados Finitos (FSM).

Aqui está o porquê.

A maioria dos tutoriais ignora dois problemas massivos com generators em jogos de tempo real: memória e salvamento.

  1. Pressão de Memória Toda vez que você chama .next() em um generator, o motor do JavaScript cria um novo objeto. Este objeto contém o valor atual e o status.

Em um loop de jogo rodando a 60 FPS, isso cria uma pressão constante de garbage collection. Minha engine segue uma regra de zero alocação para manter o desempenho estável. Generators quebram essa regra. Eles criam um fluxo de pequenos objetos a cada frame.

  1. O Problema da Serialização Um jogo precisa salvar e carregar. Você precisa transformar o estado atual do jogo em dados e vice-versa.

Você não pode serializar um generator pausado. Seu estado reside em slots internos da engine que você não consegue acessar. Se você tentar salvá-lo, obterá um objeto vazio ou um erro.

Uma Máquina de Estados Finitos é diferente. O estado é apenas uma string em um componente.

  • Para salvar: Escreva a string no disco.
  • Para carregar: Leia a string e diga à FSM para começar por ali.

A FSM venceu porque lida com as duas coisas que importam para um jogo profissional: desempenho e persistência.

Como escolher:

A lógica está dentro do loop principal de frames?

  • Não: Use uma corrotina de generator. Elas são ótimas para fluxos de execução única, como carregar assets ou onboarding.
  • Sim: Faça a próxima pergunta.

O estado precisa sobreviver a um salvamento?

  • Sim: Use uma Máquina de Estados Finitos.
  • Não: Faça a próxima pergunta.

Você está executando muitas sequências ao mesmo tempo?

  • Sim: Use uma Máquina de Estados Finitos.
  • No: Use uma corrotina de generator.

Generators não são um erro. Eles são apenas a ferramenta errada para o hot path. Use-os como cola assíncrona, mas use FSMs para a sua lógica de jogo.

Fonte: https://dev.to/grzott/i-built-generator-coroutines-for-my-game-engine-then-didnt-use-them-o3g