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