Sollte ein Spiel beim Beenden nach sich selbst aufräumen? [geschlossen]

7

Sollte ein Spiel / eine Engine nach sich selbst bereinigen (Fenster schließen, Renderer herunterfahren, Dateien schließen, freien Speicher), wenn es geschlossen wird?

Das Betriebssystem sollte das sowieso tun, und normalerweise schneller.

Ich denke, die meisten Entwickler kümmern sich nicht wirklich darum, da sie sowieso eine ordnungsgemäße Bereinigung für alles benötigen (mit dynamischem Laden von Assets und Ändern von Karten usw.), aber nicht sicherstellen, dass alles perfekt bereinigt wird.

Aber gibt es etwas Positives beim Aufräumen im Vergleich zum Nicht-Aufräumen oder umgekehrt?

Ich benutze C ++.

Was ist mit Spielekonsolen? Räumen sie alle nach sich selbst auf?

Akaltar
quelle
2
Das klingt nach einer Programmierfrage. Es scheint auf StackOverflow behandelt worden zu sein .
Anko
1
@Anko Großartige Referenz, aber für Spiele könnte dies anders sein, also denke ich, dass dies hier Platz hat.
Akaltar
Ich verstehe nicht, warum dies auf Eis gelegt wurde. Wie Sie in den Antworten sehen können, gibt es spielentwicklungsspezifische Antworten auf diese Frage. (Beispiel: Wie funktioniert das auf Spielekonsolen, Benutzererfahrung)
Akaltar
Nur weil es "spielspezifische" Antworten gibt, heißt das nicht, dass die Frage themenbezogen ist. Ob Sie beim Beenden aufräumen sollten oder nicht, ist eine allgemeine Programmierfrage (ob Sie auf bestimmten Spielekonsolen arbeiten müssen oder nicht, kann hier aus anderen Gründen nicht zum Thema gehören, hauptsächlich auf Trivia-Basis, es sei denn, dies wurde begleitet mit einem konkreten Problem, das der Fragesteller zu lösen versuchte).
@JoshPetire Ich kann Ihre Argumentation nicht in Frage stellen, aber ich denke, die Antwort auf "Kann ein Spieleentwickler diese Frage besser beantworten?" ist ja".
Akaltar

Antworten:

9

Ja, ein Spiel / eine Engine sollte nach dem Schließen nach sich selbst aufräumen. Dafür gibt es gute Gründe:

  • Zeigen Sie Ihrem Team, dass Sie wissen, was in Ihrem Spiel vor sich geht
  • Wissen Sie, wann Ihre Manager heruntergefahren werden
  • Stellen Sie sicher, dass Ihre Dateien und Handles geschlossen sind und Ihre Daten gespeichert sind
  • Verhindern Sie Abstürze beim Beenden, da Sie eine bessere Vorstellung davon haben, was gerade passiert
  • Hilfe beim Auffinden von Speicherlecks: Wenn Sie alles selbst bereinigen, sollten Sie keine Speicherlecks haben. Wenn Sie sie das nächste Mal mit einem Tool erkennen, sollten Sie 0 Lecks erhalten. Es würde Ihnen schwerer fallen, dies zu erreichen, wenn Sie beim Herunterfahren nicht sauber machen.

Und es riecht frischer, wenn das Zeug sauber ist!

Vaillancourt
quelle
Scheint eine gute Begründung dafür zu sein, dass es keinen Absturz bei sauberen und allgemein bewährten Praktiken gibt. Ich werde anderen etwas Zeit geben, bevor ich akzeptiere.
Akaltar
1
Ich würde vorschlagen, dass all dies gute Gründe dafür sind, sie jedoch der Benutzererfahrung untergeordnet sein sollten. Wenn der Spieler unter einer schlechten Exit-Erfahrung leiden muss, ist es eher akademisch, "korrekt" zu sein.
lzcd
3
PS3 erforderte ein sauberes Herunterfahren, 360 jedoch nicht. Die Wii würde im Wesentlichen zwischen den Spielen neu starten und würde es auch nicht erfordern. Nicht alle Plattformen tun dies für Sie, aber viele tun es.
Alan Wolfe
0

Wenn Sie malloc()oder ähnliche Speicherzuweisungsfunktionen verwendet haben, müssen Sie free()den zugewiesenen Speicher zerstören, wenn Sie fertig sind, und ähnlich, wenn Sie den neuen Operator verwenden, um eine Instanz von etwas zu erstellen, müssen Sie ihn verwenden delete(), wenn Sie fertig sind, andernfalls diese Ressourcen und Der Speicher ist möglicherweise noch vorhanden oder im Hintergrund gesperrt. Es empfiehlt sich daher, den Speicher aus Sicherheitsgründen selbst freizugeben.

Brendy Donnelly
quelle
5
Dies gilt nicht beim Beenden der Anwendung. Der gesamte von einem Prozess verwendete Speicher wird beim Beenden automatisch vom Prozess freigegeben. Dies ist jedoch nicht bei allen Objekttypen der Fall. Eine gute Diskussion finden Sie hier gamedev.net/topic/…
Maximus Minimus