Com as excelentes respostas de Sean e Blue em relação às limitações da plataforma física e decisões pró-contras, vou expandir um comentário para uma abordagem diferente:
Por que você provavelmente deve recarregar completamente o nível
Então você tem sua chamada loadLevel () funcionando perfeitamente, yay! Você transmite informações de um arquivo nivelado e avança na construção do mundo com base nele, criando objetos e carregando texturas e sons à medida que avança. Então, quando tudo estiver pronto - ou pronto "o suficiente" para iniciar a reprodução, você chama startPlay () e seu mundo é revelado e sua música começa a tocar.
Agora, quando você terminar o nível, ou sair para o menu ou sair do jogo, chame unloadLevel () para liberar todos os recursos e memória que você estava segurando para permitir uma experiência suave.
Agora, o que acontece quando você deseja adicionar um recurso "Reiniciar nível"? Bem...
unloadLevel(currentLevel);
loadLevel(currentLevel);
startPlay();
E você está pronto! Não há código novo, apenas algumas chamadas simples de função, e você já escreveu e depurou tudo isso, agora seu novo recurso de reinicialização brilhante é riscado da sua lista e provavelmente nunca mais será encontrado novamente - código sem crueldade e sem ferrugem é o melhor tipo! Mova o código para uma função restartCurrentLevel () e você poderá dobrá-lo e nunca mais vê-lo - talvez depois de verificar se há um nível para reiniciar, é claro :)
Mas então você se pergunta se isso não é um desperdício, descarregando coisas que você está prestes a recarregar novamente de qualquer maneira. Bem, se seus níveis e recursos forem pequenos, o máximo que você terá a ganhar é alguns segundos de tempo de carregamento cada vez que "Reiniciar" é chamado mesmo em sistemas lentos (e talvez smartphones mais antigos), então quem se importa? "Otimização prematura", você tem coisas melhores para fazer com o seu tempo.
Ah, mas agora seus níveis estão aumentando e suas texturas estão ficando mais detalhadas e a trilha sonora foi cortada em 512kbps com canais separados para todas as camadas de voz e música (parecia uma boa ideia na época, embora você não se lembre do porquê. ..) e algo sobre "matrizes de transformadas de Fourier multidimensionais de rastreamento de raios voxel dependentes do estado" que você acha que são totalmente compostas e não uma coisa real, e a carga de nível realmente leva um tempo agora e seu começo a incomodá-lo. Você até testou com pessoas reais e elas demonstram uma aversão aos tempos de espera como algo pior do que jogos semelhantes (você não está esperando uma capital do MMORPG com 100 jogadores carregar totalmente em <2 segundos, não é?), e é um problema.
Então, como você otimiza? Bem, se a recarga de nível for um problema, o carregamento de nível não será um problema? Se você acha que está apenas recarregando, por que diabos as pessoas estão recarregando seu nível com muito mais frequência do que apenas carregam o nível? Parece um problema de jogo, não um problema de engenharia de código. Quem acha que é divertido recarregar um nível repetidas vezes e só deseja que seja mais rápido do que totalmente evitável ?
Corrija o problema real primeiro!
Mas digamos que seu jogo foi projetado para que você reinicie pelo menos ocasionalmente, e o tempo de carregamento é longo o suficiente para que seja possível executar uma vez e totalmente inevitável, mas você não deseja fazer isso novamente. Que tipo de jogo é esse, afinal? Parece um pouco de um problema estranho ... talvez um jogo de alta resolução do tipo Portal, onde se presume que você vai estragar o quebra-cabeça repetidamente?
Primeiro de tudo, você deve perceber que isso não será trivial. Você precisará escrever um código completamente novo e não testado, e é "dependente do estado" para que você nem saiba o que é ou não será reutilizado entre as jogadas niveladas. Existem elementos aleatórios, spawns, texturas variáveis (seus esqueletos às vezes usam armaduras?) Ou outros elementos variáveis no seu nível? Existem coisas que variam com o jogador, como uma roupa ou modelo personalizado ou cores / portas / armadilhas?
Você fará comparações e muitas delas. Você percorrerá os elementos de nível, comparando o que será necessário e o que está carregado no momento (o que você faz com as coisas que foram carregadas para o último nível, mas não para este - libere-as ou segure-as para impedir um futuro carga?). Se isso é realmente um grande problema para o seu jogo, você provavelmente desejará alterar seu código de carga / descarga para ver se algo já está carregado antes de carregá-lo (tornando o código multiuso, mas potencialmente introduzindo novos bugs nos recursos e funções que funcionavam anteriormente) que libere cuidadosamente os recursos que não serão utilizados em um futuro próximo). Suspiro.
Não importa o que você faça, mesmo que seu jogo seja simples, você encontrará bugs obscuros que são baseados no nível / estado do jogador quando um nível foi reiniciado que não acontece quando você carrega o nível pela primeira vez. Então você pode escrever atualizações de jogos com texto como:
"Colocar um capacete em uma bomba em um ladrilho que explodiu com um míssil próximo a 200 pixels de água não corromperá mais os dados do jogo nem fará com que ele caia".
A verdadeira razão pela qual a maioria dos jogos não se incomoda
Você já reparou que a maioria das pessoas apenas pinta ou drywall sobre as paredes existentes, em vez de descascar até uma camada de base, ou coloca o tapete em cima de pisos de madeira em vez de puxá-los para cima?
O fato simples é que é mais trabalho para recompensa mínima. Pintar sobre as paredes existentes funciona bem na maioria das vezes , e o valor de rasgar pisos de madeira é geralmente mínimo ou inexistente.
O mesmo acontece com o software, desde jogos a apresentações em Power Point multimídia - se tudo o que você faz é tirar alguns segundos da tela de carregamento, as pessoas passam 1% do tempo olhando, então é melhor que seja incrivelmente trivial ou você está conseguindo um retorno muito ruim do seu tempo investido.
E, portanto, a maioria dos jogos não se incomoda, e eu tenho problemas para pensar em muitos jogos em que o carregamento de telas fez com que um jogo de outro modo valesse menos a pena, exceto alguns exemplos extremos; os exemplos extremos são onde a otimização para carregamento de nível mais rápido faz sentido, e isso é uma pequena fração de jogos que chega ao público, e provavelmente até mesmo uma fração menor de jogos que ninguém vê porque nunca é lançado.