Con le eccellenti risposte di Sean e Blue in merito alle limitazioni della piattaforma fisica e alle decisioni pro-contro, ho intenzione di espandere un commento in un approccio diverso:
Perché dovresti probabilmente ricaricare completamente il livello
Quindi hai la tua chiamata loadLevel () che funziona perfettamente, yay! Trasmetti in streaming un file di informazioni di livello e attraversi la costruzione del mondo in base a esso, creando oggetti e caricando trame e suoni mentre procedi. Quindi, quando tutto è finito - o fatto "abbastanza" per far iniziare la riproduzione, chiami startPlay () e il tuo mondo viene rivelato e la tua musica inizia a suonare.
Ora quando hai finito con il livello, o esci dal menu o esci dal gioco, chiami unloadLevel () per liberare tutte le risorse e la memoria a cui ti sei aggrappato per consentire un'esperienza fluida.
Ora, cosa succede quando si desidera aggiungere una funzione "Livello di riavvio"? Bene...
unloadLevel(currentLevel);
loadLevel(currentLevel);
startPlay();
E il gioco è fatto! Nessun nuovo codice, solo poche semplici funzioni al massimo, e hai già scritto e fatto il debug di tutto ciò, quindi ora la tua nuova brillante funzione di riavvio è cancellata dal tuo elenco e probabilmente non verrà mai più incontrata - codice senza instradamento, non arrugginito è il tipo migliore! Sposta il codice in una funzione restartCurrentLevel () e puoi ripiegarlo e non guardarlo mai più - forse dopo esserti assicurato che ci sia un livello da riavviare, ovviamente :)
Ma poi ti chiedi se questo non è uno spreco, scaricando cose che stai per ricaricare comunque. Bene, se i tuoi livelli e risorse sono piccoli, il massimo che devi guadagnare è qualche secondo di tempo di caricamento ogni volta che "Riavvia" viene chiamato anche su sistemi lenti (e forse smartphone più vecchi), quindi chi se ne frega? "Ottimizzazione precoce", hai cose migliori da fare con il tuo tempo.
Ah, ma ora i tuoi livelli stanno crescendo e le tue trame stanno diventando più dettagliate e la colonna sonora è stata strappata a 512kbps con canali separati per ogni voce e livello musicale (sembrava una buona idea al momento, anche se non ricordi il perché. ..) e qualcosa sul "ray voxel dipendente dallo stato che segue le matrici di trasformate multidimensionali di Fourier" che pensi sia completamente inventato e non una cosa reale, e il caricamento del livello in realtà impiega un po 'di tempo ora e sta iniziando a infastidirti. Hai anche provato con persone reali e in realtà mostrano un disgusto per i tempi di attesa in quanto è peggio di giochi simili (non ti aspetti che una capitale MMORPG con 100 giocatori si carichi completamente in <2 secondi, vero?), ed è un problema.
Quindi come si ottimizza? Beh, se il livello re -loading è un problema, allora non è a livello di carico di un problema? Se pensi che si stia ricaricando, perché mai le persone ricaricano il tuo livello molto più spesso di quanto non caricino il livello? Sembra un problema di gioco, non un problema di ingegneria del codice. Chi pensa che sia divertente ricaricare un livello ancora e ancora e ancora, e desidera solo che sia più veloce invece che completamente evitabile ?
Risolvi prima il vero problema!
Ma supponiamo che il tuo gioco sia progettato in modo da dover ricominciare almeno occasionalmente e il tempo di caricamento è abbastanza lungo che va bene farlo una volta e assolutamente inevitabile, ma non devi farlo di nuovo. Che tipo di gioco è questo, comunque? Sembra un po 'uno strano problema ... forse un gioco simile ad un portale ad alta risoluzione in cui si presume che tu abbia sbagliato più volte il puzzle?
Prima di tutto, devi capire che questo non sarà banale. Dovrai scrivere un codice completamente nuovo, non testato, ed è "dipendente dallo stato" in modo da non sapere nemmeno cosa verrà o non verrà riutilizzato tra i giochi di livello. Ci sono elementi casuali, spawn, trame variabili (i tuoi scheletri a volte indossano solo armature?) O altri elementi mutevoli nel tuo livello? Ci sono cose che variano con il giocatore, come un abito o un modello personalizzato o colori / porte / trappole?
Farai confronti, e molti di loro. Stai andando in loop attraverso gli elementi di livello, confrontando ciò che sarà necessario rispetto a ciò che è caricato in questo momento (cosa fai con le cose che sono state caricate per l'ultimo livello ma non per questo? Rilasciali o resisti per prevenire un futuro caricare?). Se questo è davvero un grosso problema per il tuo gioco, probabilmente vorrai cambiare il codice di caricamento / scaricamento per vedere se qualcosa è già caricato prima di caricarlo (rendendo il codice multiuso ma introducendo potenzialmente nuovi bug a funzionalità e funzioni precedentemente funzionanti che rilascino con cura risorse che non saranno in uso nel prossimo futuro). Sospiro.
Indipendentemente da ciò che fai, anche se il tuo gioco è semplice, ti imbatterai in bug oscuri che si basano sul livello / stato del giocatore quando viene riavviato un livello che non ti capita di caricare il livello la prima volta. Quindi puoi scrivere aggiornamenti di gioco con testo come:
"Far cadere un elmetto su una bomba su una tessera che aveva un missile esplodere vicino ad essa che era anche entro 200 pixel d'acqua non corromperà più i dati di gioco o causerà il crash del gioco."
La vera ragione per cui la maggior parte dei giochi non dà fastidio
Hai mai notato che la maggior parte delle persone semplicemente dipinge o muro a secco sui loro muri esistenti invece di spogliarsi su uno strato di base, o stendere il tappeto proprio sopra i pavimenti in legno invece di tirarli su?
Il semplice fatto è che è tutto più lavoro per una ricompensa minima. La pittura sopra le pareti esistenti funziona bene per la maggior parte del tempo e il valore di strappare i pavimenti in legno è spesso minimo o inesistente.
Lo stesso vale per i software, dai giochi alle presentazioni multimediali in Power Point: se tutto ciò che fai è radere qualche secondo fuori da una schermata di caricamento, le persone trascorrono l'1% del loro tempo a guardare, quindi è meglio essere incredibilmente banali da fare o stai ottenendo un rendimento molto scarso sul tempo investito.
E quindi la maggior parte dei giochi non dà fastidio, e ho difficoltà a pensare a molti giochi in cui il caricamento di schermate ha reso meno utile un gioco altrimenti buono, tranne alcuni esempi estremi; gli esempi estremi sono quelli in cui l'ottimizzazione per un caricamento di livello più veloce ha senso, e questa è una piccola frazione di giochi che arriva al pubblico, e probabilmente anche una piccola parte di giochi che nessuno vede mai perché non vengono mai rilasciati.