Con las excelentes respuestas de Sean y Blue con respecto a las limitaciones de la plataforma física y las decisiones favorables, voy a ampliar un comentario a un enfoque diferente:
Por qué probablemente deberías recargar completamente el nivel
Así que tienes tu llamada loadLevel () funcionando perfectamente, ¡yay! Transmite información de un archivo de nivel y avanza construyendo el mundo basándose en él, creando objetos y cargando texturas y sonidos a medida que avanza. Luego, cuando todo está hecho, o "hecho" lo suficiente como para permitir que comience la reproducción, llamas a startPlay () y tu mundo se revela y tu música comienza a reproducirse.
Ahora, cuando haya terminado con el nivel, o escape al menú, o salga del juego, llame a unloadLevel () para liberar todos los recursos y la memoria que ha estado sosteniendo para permitir una experiencia fluida.
Ahora, ¿qué sucede cuando desea agregar una función de "Nivel de reinicio"? Bien...
unloadLevel(currentLevel);
loadLevel(currentLevel);
startPlay();
Y ya está! Sin código nuevo, solo algunas llamadas a funciones simples como máximo, y ya ha escrito y depurado todo eso, así que su nueva y brillante función de reinicio se tacha de su lista, y probablemente nunca se la vuelva a encontrar: código crujiente y sin oxidación es el mejor tipo! Mueva el código a una función restartCurrentLevel () y puede doblar ese código y nunca volver a mirarlo, tal vez después de asegurarse de que haya un nivel para reiniciar, por supuesto :)
Pero luego te preguntas si esto no es un desperdicio, descargando cosas que estás a punto de volver a cargar de todos modos. Bueno, si sus niveles y recursos son pequeños, lo máximo que tiene que ganar es unos segundos de tiempo de carga cada vez que se llama "Reiniciar" incluso en sistemas lentos (y tal vez en teléfonos inteligentes más antiguos), ¿a quién le importa? "Optimización prematura", tiene mejores cosas que hacer con su tiempo.
Ah, pero ahora tus niveles están creciendo y tus texturas se están volviendo más detalladas y la banda sonora se rasgó en 512 kbps con canales separados para cada voz y capa musical (parecía una buena idea en ese momento, aunque no puedes recordar por qué. ..) y algo sobre "matrices de transformadas de Fourier multidimensionales dependientes del estado del rayo de voxel que cree que está totalmente formado y no es algo real, y la carga de nivel en realidad lleva un tiempo y comienza a molestarlo. Incluso has probado con personas reales y en realidad muestran disgusto por los tiempos de espera, ya que es peor que juegos similares (no esperas que una ciudad capital de MMORPG con 100 jugadores se cargue por completo en <2 segundos, ¿verdad?), Y es un problema.
Entonces, ¿cómo optimizas? Bueno, si el nivel de re -loading es un problema, entonces no es el nivel de carga es un problema? Si crees que solo se está recargando, ¿por qué demonios las personas están recargando tu nivel con mucha más frecuencia que simplemente cargar el nivel en primer lugar? Suena como un problema de juego, no un problema de ingeniería de código. ¿Quién cree que es divertido recargar un nivel una y otra vez, y solo desea que sea más rápido en lugar de evitarlo por completo ?
¡Solucione el problema real primero!
Pero digamos que su juego está diseñado para que deba reiniciar al menos ocasionalmente, y el tiempo de carga es lo suficientemente largo como para que sea correcto hacerlo una vez y completamente inevitable, pero no desea tener que volver a hacerlo. ¿Qué tipo de juego es este, de todos modos? Parece un problema un poco extraño ... ¿tal vez un juego tipo Portal de alta resolución donde se supone que vas a estropear el rompecabezas repetidamente?
En primer lugar, debes darte cuenta de que esto no va a ser trivial. Tendrá que escribir código completamente nuevo y no probado, y es "dependiente del estado", de modo que es posible que ni siquiera sepa qué se reutilizará o no entre las jugadas de nivel. ¿Hay elementos aleatorios, engendros, texturas variables (¿tus esqueletos solo a veces usan armadura?) U otros elementos cambiantes en tu nivel? ¿Hay cosas que varían con el jugador, como un atuendo o modelo personalizado o colores / puertas / trampas?
Vas a hacer comparaciones, y muchas de ellas. Vas a recorrer los elementos de nivel, comparando lo que se necesitará con lo que está cargado en este momento (¿qué haces con cosas que se cargaron para el último nivel pero no para este? Libéralos o espera para evitar un futuro ¿carga?). Si esto es realmente un gran problema para su juego, es probable que desee cambiar su código de carga / descarga para ver si algo ya está cargado antes de cargarlo (haciendo que el código sea multipropósito pero potencialmente introduciendo nuevos errores en las características y funciones que funcionaban anteriormente) que liberan cuidadosamente recursos que no se utilizarán en el futuro cercano). Suspiro.
No importa lo que hagas, incluso si tu juego es simple, te encontrarás con errores oscuros que se basan en el estado del nivel / jugador cuando se reinició un nivel que no te sucede cargar el nivel la primera vez. Así que puedes escribir actualizaciones de juegos con texto como:
"Dejar caer un casco sobre una bomba sobre una baldosa que tenía un misil explotado cerca de él, que también estaba a 200 píxeles de agua, ya no corromperá los datos del juego ni hará que el juego se bloquee".
La verdadera razón La mayoría de los juegos no molestan
¿Alguna vez has notado que la mayoría de las personas simplemente pintan o pintan sobre sus paredes existentes en lugar de pelarlas a una capa base, o colocan la alfombra justo encima de los pisos de madera en lugar de levantarlas?
El simple hecho es que todo es más trabajo por una recompensa mínima. Pintar sobre las paredes existentes funciona bien la mayor parte del tiempo , y el valor de rasgar los pisos de madera dura es a menudo mínimo o inexistente.
Lo mismo ocurre con el software, desde juegos hasta presentaciones multimedia de Power Point: si todo lo que hace es quitarse unos segundos de una pantalla de carga, la gente pasa el 1% de su tiempo mirando, entonces será mejor que sea increíblemente trivial o que esté obteniendo Un rendimiento muy bajo de su tiempo invertido.
Y así, la mayoría de los juegos no se molestan, y tengo problemas para pensar en muchos juegos en los que las pantallas de carga hacían que un juego, por lo demás bueno, no valiera la pena, excepto algunos ejemplos extremos; los ejemplos extremos son donde la optimización para una carga de nivel más rápida tiene sentido, y esa es una pequeña fracción de los juegos que llegan al público, y probablemente incluso una fracción más pequeña de juegos que nadie ve porque nunca se lanzan.