Avec les excellentes réponses de Sean et Blue concernant les limitations de la plate-forme physique et les décisions favorables, je vais développer un commentaire dans une approche différente:
Pourquoi devriez-vous simplement recharger complètement le niveau
Donc, votre appel de loadLevel () fonctionne parfaitement, yay! Vous diffusez dans un fichier de niveau des informations et vous construisez un monde basé sur celui-ci, en créant des objets et en chargeant des textures et des sons au fur et à mesure. Ensuite, lorsque tout est terminé - ou que vous avez "suffisamment" de laisser la lecture commencer, vous appelez startPlay (), votre monde est révélé et votre musique commence à jouer.
Maintenant, lorsque vous avez terminé avec le niveau, ou que vous vous échappez dans le menu, ou quittez le jeu, vous appelez unloadLevel () pour libérer toutes les ressources et la mémoire que vous avez conservées afin de permettre une expérience fluide.
Maintenant, que se passe-t-il lorsque vous souhaitez ajouter une fonctionnalité "Niveau de redémarrage"? Bien...
unloadLevel(currentLevel);
loadLevel(currentLevel);
startPlay();
Et vous avez terminé! Pas de nouveau code, juste quelques appels de fonction simples au plus, et vous avez déjà écrit et débogué tout cela. Votre nouvelle fonction de redémarrage est rayée de votre liste et ne sera probablement plus jamais retrouvée - code cruel et sans rouille est le meilleur genre! Déplacez le code dans une fonction restartCurrentLevel () et vous pouvez le plier et ne plus le regarder - peut-être après vous être assuré qu'il existe un niveau pour redémarrer, bien sûr :)
Mais vous vous demandez alors s'il ne s'agit pas d'un gaspillage, de décharger des choses que vous êtes sur le point de recharger de toute façon. Eh bien, si vos niveaux et vos ressources sont réduits, vous ne gagnerez au maximum que quelques secondes de temps de chargement à chaque fois que "Redémarrer" est appelé, même sur des systèmes lents (et peut-être même des smartphones plus anciens). "Optimisation prématurée", vous avez mieux à faire avec votre temps.
Mais maintenant, vos niveaux augmentent et vos textures sont de plus en plus détaillées et la bande son est déchirée à 512kbps avec des canaux séparés pour chaque voix et couche musicale (cela semblait une bonne idée à l'époque, bien que vous ne puissiez pas vous souvenir pourquoi. ..) et quelque chose à propos de "matrices de transformée de Fourier multidimensionnelles dépendant du traçage du rayon voxel dépendant de l’état" qui, selon vous, est totalement inventé et non réel, et le chargement de niveau prend un certain temps maintenant et commence à vous ennuyer. Vous avez même testé avec de vraies personnes et elles affichent un dégoût pour les temps d'attente car c'est pire que des jeux similaires (vous ne vous attendez pas à une capitale de MMORPG avec 100 joueurs à charger complètement en moins de 2 secondes, n'est-ce pas?), et c'est un problème.
Alors, comment optimisez-vous? Eh bien, si le rechargement de niveau pose un problème, le chargement de niveau ne pose-t-il pas un problème? Si vous pensez que c'est juste un rechargement, pourquoi diable les gens rechargent-ils votre niveau beaucoup plus souvent qu'ils ne le chargent au départ? Cela ressemble à un problème de jeu, pas à un problème d'ingénierie de code. Qui pense que c'est amusant de recharger un niveau encore et encore, et souhaite juste que ce soit plus rapide au lieu d'être entièrement évitable ?
Fixez le vrai problème en premier!
Mais disons que votre jeu est conçu pour vous permettre de redémarrer au moins de temps en temps, et le temps de chargement est suffisamment long pour que vous puissiez le faire une fois et absolument inévitable, mais vous ne voulez pas avoir à le refaire. Quel genre de jeu est-ce, de toute façon? Cela semble être un problème un peu étrange ... Peut-être un jeu haute résolution semblable à un portail où il est supposé que vous allez gâcher le puzzle à plusieurs reprises?
Tout d'abord, vous devez réaliser que cela ne va pas être trivial. Vous allez devoir écrire du code entièrement nouveau, non testé, et il est "dépendant de l'état" afin que vous ne sachiez même pas ce qui est réutilisé ou non entre les jeux de niveaux. Y a-t-il des éléments aléatoires, des spawns, des textures variables (vos squelettes ne portent-ils parfois qu'une armure?) Ou d'autres éléments changeants de votre niveau? Y a-t-il des choses qui varient avec le joueur, comme une tenue ou un modèle personnalisé ou des couleurs / portes / pièges?
Vous allez faire des comparaisons, et beaucoup d'entre elles. Vous allez parcourir les éléments de niveau, en comparant ce qui sera nécessaire par rapport à ce qui est chargé en ce moment (que faites-vous avec des éléments chargés pour le dernier niveau mais pas pour celui-ci - relâchez-les ou conservez-les pour éviter un avenir charge?). Si c'est vraiment un gros problème pour votre jeu, vous allez probablement vouloir changer votre code de chargement / déchargement pour voir si quelque chose est déjà chargé avant de le charger (ce qui le rend polyvalent mais introduit potentiellement de nouveaux bogues dans des fonctions et fonctions qui fonctionnaient auparavant. libérer soigneusement les ressources qui ne seront pas utilisées dans un avenir proche). Soupir.
Quoi que vous fassiez, même si votre jeu est simple, vous allez tomber dans des bugs obscurs qui sont basés sur le niveau / l'état du joueur lors du redémarrage d'un niveau qui ne vous arrive pas, chargez le niveau la première fois. Vous pouvez donc écrire des mises à jour du jeu avec du texte comme:
"Laisser tomber un casque sur une bombe sur une tuile sur laquelle un missile a explosé près de celle-ci et qui se trouvait également à moins de 200 pixels d’eau n’altérera plus vos données de jeu ni ne provoquera le crash de celui-ci."
La vraie raison la plupart des jeux ne vous dérange pas
Avez-vous déjà remarqué que la plupart des gens peignent ou appliquent une cloison sèche sur leurs murs existants au lieu de se décoller pour former une couche de base ou de poser un tapis directement sur le plancher de bois franc au lieu de le tirer vers le haut?
Le fait est que tout est plus de travail pour une récompense minimale. Peindre sur vos murs existants fonctionne bien la plupart du temps , et la valeur de déchirer des planchers de bois franc est souvent minime, voire inexistante.
Il en va de même pour les logiciels, des jeux aux présentations multimédia Power Point. Si tout ce que vous faites est de passer quelques secondes sur un écran de chargement, les gens passent 1% de leur temps à regarder. un très mauvais retour sur votre temps investi.
Et donc la plupart des jeux ne dérangent pas, et j'ai du mal à penser à de très nombreux jeux où le chargement d'écrans rendait un bon jeu autrement moins intéressant, à l'exception de quelques exemples extrêmes; les exemples extrêmes sont ceux où l'optimisation pour un chargement de niveau plus rapide a du sens, et c'est une fraction minuscule de jeux accessible au public, et probablement même une fraction plus petite de jeux que personne ne voit jamais car ils ne sont jamais sortis.