Angesichts der hervorragenden Antworten von Sean und Blue in Bezug auf Einschränkungen der physischen Plattform und Pro-Con-Entscheidungen werde ich einen Kommentar auf einen anderen Ansatz ausweiten:
Warum sollten Sie wahrscheinlich nur das Level komplett neu laden
Ihr loadLevel () -Aufruf funktioniert also einwandfrei, yay! Sie streamen Dateiinformationen auf einer Ebene ein und erstellen schrittweise die darauf basierende Welt, erstellen Objekte und laden Texturen und Sounds, während Sie unterwegs sind. Dann, wenn alles erledigt ist - oder "genug" getan, um das Spiel beginnen zu lassen, rufst du startPlay () auf und deine Welt wird enthüllt und deine Musik beginnt zu spielen.
Wenn Sie mit dem Level fertig sind, zum Menü wechseln oder das Spiel beenden, rufen Sie unloadLevel () auf, um alle Ressourcen und den Speicher freizugeben, an denen Sie festgehalten haben, um ein reibungsloses Erlebnis zu ermöglichen.
Was passiert nun, wenn Sie eine Funktion "Ebene neu starten" hinzufügen möchten? Gut...
unloadLevel(currentLevel);
loadLevel(currentLevel);
startPlay();
Und du bist fertig! Kein neuer Code, höchstens ein paar einfache Funktionsaufrufe, und all das haben Sie bereits geschrieben und getestet, sodass Ihre neue, glänzende Neustart-Funktion jetzt von Ihrer Liste gestrichen ist und wahrscheinlich nie wieder vorkommt - cruftloser, nicht rostender Code ist die beste Art! Verschieben Sie den Code in eine restartCurrentLevel () -Funktion, und Sie können den Code wegklappen und ihn nie wieder anzeigen - möglicherweise, nachdem Sie sichergestellt haben, dass eine Ebene zum Neustarten vorhanden ist :)
Aber dann fragt man sich, ob dies keine Verschwendung ist, wenn man Dinge entlädt, die man sowieso gerade neu laden möchte. Nun, wenn Ihr Level und Ihre Ressourcen klein sind, müssen Sie höchstens ein paar Sekunden Ladezeit gewinnen, wenn "Neustart" auch auf langsamen Systemen (und möglicherweise älteren Smartphones) aufgerufen wird. Wen interessiert das? "Vorzeitige Optimierung", Sie haben bessere Dinge mit Ihrer Zeit zu tun.
Ah, aber jetzt wachsen deine Levels und deine Texturen werden detaillierter und der Soundtrack wurde in 512 kbps mit separaten Kanälen für jede Stimme und Musikebene gerippt (es schien zu der Zeit eine gute Idee zu sein, obwohl du dich nicht erinnern kannst warum). ..) und etwas über "zustandsabhängige mehrdimensionale Fouriertransformationsmatrizen mit Voxel-Raytracing", von dem Sie denken, dass es komplett erfunden und nicht real ist, und das Laden des Pegels dauert eine Weile und beginnt Sie zu ärgern. Sie haben sogar mit echten Leuten getestet und sie zeigen tatsächlich eine Abneigung gegen die Wartezeiten, da es schlimmer ist als bei ähnlichen Spielen (Sie erwarten nicht, dass eine MMORPG-Hauptstadt mit 100 Spielern in <2 Sekunden vollständig geladen wird, oder?). und es ist ein Problem.
Wie optimieren Sie? Nun, wenn Ebene re -loading ein Problem ist, ist dann nicht eben Laden ein Problem? Wenn du denkst, dass es nur ein Neuladen ist, warum um alles in der Welt laden die Leute dein Level so viel öfter neu, als sie das Level überhaupt nur laden? Klingt nach einem Spielproblem, nicht nach einem Code-Engineering-Problem. Wer glaubt, dass es Spaß macht, ein Level immer und immer wieder neu zu laden, und wünscht sich, es wäre schneller als völlig vermeidbar ?
Beheben Sie zuerst das eigentliche Problem!
Nehmen wir jedoch an, Ihr Spiel ist so konzipiert, dass Sie es zumindest gelegentlich neu starten müssen und die Ladezeit so lang ist, dass es nur einmal ausgeführt werden kann und absolut unvermeidlich ist, aber Sie möchten nicht, dass Sie es erneut ausführen müssen. Was für ein Spiel ist das überhaupt? Scheint ein komisches Problem zu sein ... vielleicht ein hochauflösendes Portal-ähnliches Spiel, bei dem davon ausgegangen wird, dass Sie das Rätsel wiederholt durcheinander bringen werden?
Zuallererst muss man sich darüber im Klaren sein, dass dies nicht trivial sein wird. Sie müssen völlig neuen, ungetesteten Code schreiben, der "zustandsabhängig" ist, sodass Sie möglicherweise nicht einmal wissen, was zwischen Levelspielen wiederverwendet wird oder nicht. Gibt es zufällige Elemente, Spawns, variable Texturen (tragen deine Skelette manchmal nur Rüstungen?) Oder andere sich ändernde Elemente in deinem Level? Gibt es Dinge, die je nach Spieler variieren, wie z. B. ein Outfit oder ein angepasstes Modell oder Farben / Türen / Fallen?
Sie werden Vergleiche anstellen und viele davon. Sie durchlaufen Level-Elemente und vergleichen, was gerade benötigt wird, mit dem, was gerade geladen wird (was tun Sie mit Sachen, die für das letzte Level geladen wurden, aber nicht für dieses - lassen Sie sie los oder warten Sie, um eine Zukunft zu verhindern Belastung?). Wenn dies wirklich eine große Sache für Ihr Spiel ist, werden Sie wahrscheinlich Ihren Lade- / Entladecode ändern wollen, um zu sehen, ob etwas bereits geladen ist, bevor Sie es laden (wodurch der Code mehrzweckfähig wird, aber möglicherweise neue Fehler in zuvor funktionierende Features und Funktionen einführt) Ressourcen, die in naher Zukunft nicht mehr verwendet werden sollen, vorsichtig freigeben). Seufzer.
Egal was Sie tun, selbst wenn Ihr Spiel einfach ist, werden Sie in undurchsichtige Fehler geraten, die auf dem Level / Player-Status basieren, als ein Level neu gestartet wurde, das Ihnen beim ersten Laden des Levels nicht passiert. So können Sie Spieleupdates mit folgendem Text schreiben:
"Wenn Sie einen Helm auf eine Bombe auf ein Plättchen fallen lassen, auf dem eine Rakete explodiert ist, die sich ebenfalls innerhalb eines Bereichs von 200 Pixeln um Wasser befindet, werden Ihre Spieldaten nicht mehr beschädigt und das Spiel stürzt nicht mehr ab."
Der wahre Grund, warum sich die meisten Spiele nicht darum kümmern
Ist Ihnen jemals aufgefallen, dass die meisten Menschen ihre vorhandenen Wände nur streichen oder trocken bauen, anstatt sie auf eine Unterlage abzustreifen, oder Teppiche direkt auf Hartholzböden legen, anstatt sie hochzuziehen?
Die einfache Tatsache ist, dass es mehr Arbeit für minimale Belohnung ist. Malen über Ihre vorhandenen Wände funktioniert die meiste Zeit einwandfrei, und der Wert, Hartholzböden abzureißen, ist oft minimal oder nicht vorhanden.
Dasselbe gilt für Software, von Spielen bis hin zu Multimedia-Power-Point-Präsentationen. Wenn Sie sich nur ein paar Sekunden vom Ladebildschirm abschneiden und 1% Ihrer Zeit damit verbringen, sich das anzuschauen, ist dies am einfachsten, oder Sie werden es tun eine sehr schlechte Rendite für Ihre investierte Zeit.
Die meisten Spiele stören also nicht, und ich habe Probleme, an sehr viele Spiele zu denken, bei denen das Laden von Bildschirmen ein ansonsten gutes Spiel weniger lohnenswert machte, mit Ausnahme einiger extremer Beispiele. Die extremen Beispiele sind, wo die Optimierung für ein schnelleres Laden von Levels Sinn macht, und das sind winzige Bruchteile von Spielen, die es in die Öffentlichkeit schaffen, und wahrscheinlich sogar kleinere Bruchteile von Spielen, die niemand jemals sieht, weil sie niemals veröffentlicht werden.