С отличными ответами Шона и Блю относительно ограничений физической платформы и про-довольных решений я собираюсь расширить комментарий на другой подход:
Почему вы должны, вероятно, просто полностью перезагрузить уровень
Итак, ваш вызов loadLevel () работает отлично, ура! Вы транслируете информацию в файл уровня и шаг за шагом строите мир на его основе, создавая объекты и загружая текстуры и звуки по мере продвижения. Затем, когда все будет сделано - или сделано «достаточно», чтобы начать воспроизведение, вы вызываете startPlay (), и ваш мир раскрывается, и ваша музыка начинает играть.
Теперь, когда вы закончите с уровнем, или выйдете в меню, или выйдете из игры, вы вызываете unloadLevel (), чтобы освободить все ресурсы и память, которые вы держали, чтобы обеспечить беспроблемный опыт.
Теперь, что происходит, когда вы хотите добавить функцию «Уровень перезапуска»? Что ж...
unloadLevel(currentLevel);
loadLevel(currentLevel);
startPlay();
И вы сделали! Никакого нового кода, всего лишь несколько простых вызовов функций, и вы уже написали и отладили все это, так что теперь ваша новая блестящая функция перезапуска вычеркнута из вашего списка и, вероятно, никогда больше не встретится - беспроблемный, не ржавеющий код это лучший вид! Переместите код в функцию restartCurrentLevel (), и вы можете сложить этот код и больше никогда не смотреть на него - возможно, после того, как убедитесь, что есть уровень для перезапуска, конечно :)
Но потом вы задаетесь вопросом, не является ли это пустой тратой, выгружая вещи, которые вы собираетесь перезагрузить в любом случае. Что ж, если ваши уровни и ресурсы невелики, то самое большее, что вам нужно - это несколько свободных секунд времени загрузки каждый раз, когда «Перезапуск» вызывается даже на медленных системах (и, возможно, на старых смартфонах), так кого это волнует? «Преждевременная оптимизация», у вас есть дела поважнее.
Ах, но теперь ваши уровни растут, и ваши текстуры становятся более подробными, а саундтрек был разорван на 512 кбит / с с отдельными каналами для каждого голоса и музыкального слоя (в то время это казалось хорошей идеей, хотя вы не можете вспомнить почему. ...) и кое-что о «зависящих от состояния источника многомерных матрицах преобразования Фурье с отслеживанием воксельных лучей», которые, как вы думаете, просто полностью составлены, а не реальны, и загрузка уровней на самом деле занимает некоторое время, и ее начало раздражать вас. Вы даже тестировали на реальных людях, и они на самом деле испытывают отвращение ко времени ожидания, так как оно хуже, чем в аналогичных играх (вы не ожидаете, что столица MMORPG с 100 игроками полностью загрузится за <2 секунды, не так ли?), и это проблема.
Так как вы оптимизируете? Что ж, если повторная загрузка уровней является проблемой, то не является ли загрузка уровней проблемой? Если вы думаете, что это просто перезарядка, то почему люди перегружают ваш уровень гораздо чаще, чем просто загружают уровень в первую очередь? Похоже, проблема игрового процесса, а не проблема разработки кода. Кто думает, что забавно перезагружать уровень снова и снова, и просто хочет, чтобы он был быстрее, чем его можно было избежать ?
Сначала исправьте настоящую проблему!
Но допустим, что ваша игра разработана таким образом, что вы должны хотя бы время от времени перезагружать ее, а время загрузки достаточно велико, чтобы его можно было выполнить один раз, и это совершенно неизбежно, но вам не нужно делать это снова. Что это за игра? Кажется, что это немного странная проблема ... может быть, игра с высоким разрешением, похожая на Portal, в которой предполагается, что вы собираетесь много раз испортить головоломку?
Прежде всего, вы должны понимать, что это не будет тривиальным. Вам придется писать совершенно новый, непроверенный код, и он «зависит от состояния», так что вы можете даже не знать, что будет или не будет использоваться повторно между уровнями. Есть ли на вашем уровне случайные элементы, спавны, переменные текстуры (ваши скелеты лишь иногда носят доспехи?) Или другие изменяющиеся элементы? Есть ли что-то, что меняется у игрока, например, наряд или индивидуальная модель или цвета / двери / ловушки?
Вы будете делать сравнения, и многие из них. Вы будете проходить по элементам уровня, сравнивая то, что будет необходимо, с тем, что загружено прямо сейчас (что вы делаете с вещами, которые были загружены для последнего уровня, но не для этого - отпустите их или удерживайте, чтобы предотвратить будущее) загрузить?). Если это действительно имеет большое значение для вашей игры, вы, вероятно, захотите изменить свой код загрузки / выгрузки, чтобы увидеть, загружено ли что-то уже перед загрузкой (что делает код многоцелевым, но потенциально вносит новые ошибки в ранее работающие функции и функции). которые тщательно высвобождают ресурсы, которые не будут использоваться в ближайшем будущем). Вздох.
Независимо от того, что вы делаете, даже если ваша игра проста, вы будете сталкиваться с неясными ошибками, которые основаны на уровне уровня / игрока, когда уровень был перезапущен, что не происходит, когда вы загружаете уровень в первый раз. Таким образом, вы можете писать обновления игры с текстом вроде:
«Сбрасывание шлема с бомбы на плитку, у которой взорвалась ракета, которая также находилась в пределах 200 пикселей от воды, больше не повредит ваши игровые данные и не приведет к сбою игры».
Реальная причина большинства игр не беспокоить
Вы когда-нибудь замечали, что большинство людей просто красят или укладывают гипсокартон поверх своих существующих стен вместо того, чтобы разделывать их до базового слоя, или укладывают ковер прямо на паркетные полы вместо того, чтобы натягивать их?
Простой факт заключается в том, что это все больше работы за минимальное вознаграждение. Окрашивание существующих стен прекрасно работает в большинстве случаев , а ценность вырубки полов из твердой древесины часто минимальна или вообще отсутствует.
То же самое относится и к программному обеспечению, от игр до мультимедиа презентаций Power Point - если все, что вы делаете, это сбрасываете несколько секунд с экрана загрузки, на который люди тратят 1% своего времени, то это лучше сделать невероятно тривиально, или вы получаете очень плохая отдача от вложенного времени.
И поэтому большинство игр не беспокоятся, и мне трудно думать о многих играх, в которых загрузка экранов делала хорошую игру менее полезной, за исключением нескольких крайних примеров; крайние примеры - это когда оптимизация для более быстрой загрузки уровней имеет смысл, и это крошечные фракции игр, которые делают их общедоступными, и, возможно, даже меньшие фракции игр, которые никто никогда не видит, потому что они никогда не выпускаются.