Exceptions bei Computergames
-
Hallo, ich bin neu hier und habe eine Frage zu Exceptions. Ich programmiere mit Visual Studio .Net in C++ und möchte bald mit einem Computerspiel anfangen. Nichts besonders großes aber das tut nichts zur Sache. Da es bei Computerspielen immer auf die Geschwindigkeit ankommt, könnte ich mir vorstellen, daß Exceptions dort nicht so gut zu gebrauchen sind. Sollte man diese verwenden, und wenn ja wie, oder eher auf die alte und vorallem schnellere Weise zurückgreifen, nämlich Errorcodes vom Typ int, um das Errohandling zu bewerkstelligen? Ich kann mir leider das nicht genau vorstellen wieviel Zeit Errorhandling kostet, wenn man es mit Expetions umsetzt, da ich ja noch kein fertiges Spiel habe und ich deshalb auch noch nicht weiß, wo letzen Endes die Rechenpower benötigt wird und wo nicht. Kann man da eine grobe Schätzung abgeben oder kommt es ganz auf das Spiel an?
-
Ich hab zwar keien Erfahrung in Spieleprogrammierung aber ich würds so sehen: In dem Moment wo eine Exception Sinn macht ist so ein Fehler aufgetreten, wo das Spiel sowieso nicht mehr korrekt läuft und daher der Geschwindigkeitsaspekt nicht zählt. Wenn du Exceptions versuchst im normalen Spiel anzuwenden, wendest du das Konzept falsch an, für alle wirklichen Ausnahmesituationen dürften Exceptions geeignet sein.
-
Ich verwende Exceptions nicht in der GameLoop, also wenn das Spiel
gerade gespielt wird. Im Ladevorgang hingegen, wird die gesamte Fehlerbehandlung mit Exceptions realisiert.
Schau mal auf Flipcode.com nach, da gab es einen kleinen Artikel über Exceptions und Spieleprogrammierung.
-
Benutze Exceptions ! Fertig !
Es macht den Code keinen Deut langsamer und wenn würden das ErrorCodes noch viel mehr !!! Heutzutage fressen Exceptions gut verwendet kaum bis garkeine Performance. Das sie keine Performance beanspruchen solange sie nicht fallen ist gelogen, da der Compiler zusatzinformationen (StackTrace) bereitstellen muss, und diese vergrössern natürlich den Code!
Aber generell -> verwenden !
Gut für Spiele macht sich auch ein eigener StackTrace, wo also noch ausgegeben wird in welcher Funktion und auf welchem Wege dort hingelangt wurde. Ebenfalls ohne Mehrkosten.
-
Original erstellt von ChaosAngel:
**Das sie keine Performance beanspruchen solange sie nicht fallen ist gelogen, da der Compiler zusatzinformationen (StackTrace) bereitstellen muss, und diese vergrössern natürlich den Code!
**Codevergrößerung heißt nicht immer Verlangsamung.
Der Festplatte ist es egal ob sie 123 oder 124 Sektoren laden muss, ebenso dem RAM.
Wenn das Programm läuft, kostet Code, der nur passiv rumliegt, gar nichts.p.s.:
Naja, vielleicht macht der Compiler hier und da ein mov irgendwo,irgendwas rein. Aber das fällt bei heutigen Prozessoren überhaupt nicht mehr ins Gewicht, wenn es geschickt platziert ist.
-
Codevergrösserung ist eben nicht egal ...
Ich meine nicht was von Festplatte geladen werden muss oder ähnliches !
Es entsteht durch den StackTrace zusätzlicher Overhead der ProzessorPipe und auch einige Caches belastet ! Ich kenn mich mit dem ganzen LowLevel kram leider nicht aus, ich weiss nur das durch irgendwelche Pages oder son shit da Overhead entsteht !
Aber wie ich auch schon sagte, er ist vernachlässigbar wenn sie richtig angewendet werden.PS: Auch im Gameloop kann man ohne Probleme Exceptions benutzen !!!
-
Original erstellt von ChaosAngel:
**
Auch im Gameloop kann man ohne Probleme Exceptions benutzen !!!**Klar. Aber nur in wirklichen Ausnahmesituationen. Sonst sind Exceptions fehl am Platze.
Es sollte z.B. keine Exception ausgelöst werden, wenn jemand von einer Waffe getroffen wird oder wenn ein Gegner stirbt. Das ist keine Ausnahme.
Auch ein Tor oder Portal zu einem neuen Level sollte nicht unbedingt eine Exception auslösen.Exceptions sollten im normalen Programmverlauf nicht geworfen werden, außer wenn etwas wirklich ernstes passiert, das eine (tiefliegende) Funktion beim besten Willen nicht selbst beheben kann.
-
Es sollte z.B. keine Exception ausgelöst werden, wenn jemand von einer Waffe getroffen wird oder wenn ein Gegner stirbt. Das ist keine Ausnahme.
Ganz meine Meinung, ich sehe nur leider viel zu oft Code, der Exceptions
als augemotzes Mittel zu retrun-Wertübergabe benutzt.
Nach dem Moto, was die Funktion sagen will, steht in der Exception die sie
auswirft.
-
Don't use exceptions for flow control. (...) It violates the PrincipleOfLeastAstonishment. This makes it harder for programmers to read. Perhaps more important, it's not what compiler implementors expect. They expect exceptions to be set up often but thrown rarely, and they usually let the throw code be quite inefficient.
-
Was spricht eigentlich dagegen, keine Exceptions zu benutzen?
-
Original erstellt von TGGC:
Was spricht eigentlich dagegen, keine Exceptions zu benutzen?a) speed (wenn exceptions gut implemetiert sind)
b) klarheit (wenn progger gut coden kann)
c) codegröße (nicht mehr 50% des c-codes für fehlerweiterreichung)
d) ihr müßt es gar nicht raffen. macht weiterhin betriebssysteme in c und games in c, denn das ist üblich so. schnelle oberflächen am besten in java.
-
Was spricht eigentlich dagegen, keine Exceptions zu benutzen?
kotzen zu müssen bei Fehlerhandling.. Rückgabewerte werden doch eigentlich vergewaltigt wenn man sie als Error-Code verwendet
denn das ist üblich so.
guter Grund.. wenn's wo üblich ist , ne Klippe runterzuspringen, sollte man es dann auch machen?
-
Bei integer werten muss ich jedesmal überprüfen, wie der Wert denn grade ist: Abreit, egal, ob ein Fehler auftritt oder nicht.
Bei exceptons passiert erst dann was, wenn ein Fehler geworfen wird: Nur arbeit, wenn ein Fehler auftritt. Und dann ist es eh egal.
-
Na, da ich die Probleme a bis c nicht hab...
-
Moment. Du programmierst Spiele und bei dirist Geschwindigkeit kein problem. Schreibst du rundenbasiertes Zeug?
Mehr klarheit im Code ist immer von Vorteil, auch wenn man vorher bereits recht sauberen Code hat.
Und bei dir gibts keine Fehlerbehandlung?
-
Original erstellt von Helium:
Moment. Du programmierst Spiele und bei dirist Geschwindigkeit kein problem. Schreibst du rundenbasiertes Zeug?Nein, aber die Geschwindigkeit ist nich dadurch begrenzt, wie schnell Fehler behandelt werden.
Original erstellt von Helium:
Mehr klarheit im Code ist immer von Vorteil, auch wenn man vorher bereits recht sauberen Code hat.Der Vorteil ist das ich meine nicht vorhandenen Probleme reduziere?
Original erstellt von Helium:
Und bei dir gibts keine Fehlerbehandlung?Hab ich nie behauptet.