Como você observou, quando você está trabalhando em mecânica de jogos, a velocidade da iteração é crítica. Quanto maior o tempo entre pensar em uma modificação e poder testá-la, menos produtivo você será e mais distraído ficará. Como resultado, você definitivamente deseja gerenciar o tempo de iteração.
Para mim, acho que minha produtividade realmente começa a diminuir quando o tempo para testar uma simples alteração excede cerca de cinco segundos. Então, quando você está tentando aperfeiçoar a aparência do jogo, um dos seus objetivos deve ser descobrir "como posso fazer uma alteração e depois jogar usando essa alteração em menos de cinco segundos". Realmente não importa como você faz isso, desde que você possa manter esse tempo de iteração até esse nível.
Muitos mecanismos modernos grandes (Unity, Unreal, etc) tendem a fazer isso colocando seu editor dentro do mecanismo do jogo, para que você possa fazer a maioria das modificações ao vivo, sem nunca reiniciar o jogo. Motores / jogos menores geralmente focam o trabalho na outra direção; faça o jogo compilar e iniciar tão rapidamente que não importa se você precisa reiniciar o jogo para cada alteração; você ainda estará testando antes desse período de cinco segundos.
No meu projeto atual, são necessários cerca de dez segundos para que eu faça uma pequena recompilação, vincule, inicie o jogo e alcance a jogabilidade (a maior parte disso está gerando geometria do mundo renderizável ao carregar um jogo salvo). E isso é muito longo. Então, eu criei modos de jogo "testando" separados, que me permitem testar diferentes partes do jogo sem carregar todos os recursos reais do jogo, para que eu possa entrar e sair muito, muito mais rápido; normalmente em cerca de dois a três segundos. Se eu quiser testar alguma interface do usuário, posso fazer isso sem carregar no jogo real. Se eu quiser testar a renderização, tenho outro modo em que posso testá-la, novamente sem carregar o sistema de jogo inteiro.
Eu já vi outras pessoas que abordaram o problema colocando a lógica do jogo em uma DLL e permitindo que o executável do jogo na memória recarregue a DLL enquanto o jogo estiver em execução, para que você possa reconstruir a DLL e apenas recarregá-la dentro de um diretório. executável já carregado, para que você não precise recarregar / reconstruir os recursos artísticos do seu jogo. Isso parece loucura para mim, mas eu já vi isso.
Muito mais simples do que isso seria especificar comportamentos e / ou configurações de jogos em scripts ou arquivos de dados e fornecer uma maneira de fazer com que o sistema recarregue esses arquivos, sob demanda, ou apenas observando-os quanto a modificações, sem precisar fechar jogo inativo, reconecte-o e inicie-o novamente.
Existem muitas abordagens. Escolha o que funciona melhor para você. Mas uma das chaves para o refinamento bem-sucedido da mecânica do jogo é a iteração extremamente rápida. Se você não tem isso, quase não importa o que mais você faz.