Error ausstellen

  • Allgemein

    Error ausstellen

    Hi
    gibt es eine Funktion womit man die Error ausstellen kann.
    Damit könnte man das unerwünschte Fenster bei den Spielern ausstellen und womöglich einfach einen Code anfertigen, der das dann behebt.

    Freue mich auf Antworten!
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
    Davon wüsste ich ncihts, aber du kannst natürlich das tun, was du auch in anderen Sprachen machst; ein art try/throw/catch
    dann müsstest du alle fragwürdigen Variablen zB überprüfen bevor du sie verwendest, zB in einer Funktion die nachsieht ob der Wert nicht 0 oder zwischen x und y ist, falls nicht wird ein standart zugewiesen oder die folgende Funktion nciht ausgeführt. Damit kannst du verhindern das Fehler auftreten. Aber die meisten kritischen Abfragen sollten sowieso so ungefähr aussehen!

    GML-Quellcode

    1. if (leben - schaden < 0)
    2. {
    3. leben = 0;
    4. }
    5. else
    6. {
    7. leben -= schaden;
    8. }

    so brauchst du keine funktione die das erst überprüft oder iwas anderes, du wirst nie einen Fehler haben oder leben im Minusbereich, weil das für weitere kalkulationen wichtig sein könnte die einen error werfen könnten.

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
    Ja aber ich möchte jetzt nicht jedesmal so abfragen zu machen.
    Gibt es nicht eine Einstellung auf Game settings oder so?
    bei GMPro geht das ja.
    Gm:S leider nicht
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
    Öhm, sorry aber in die Seifenblase muss ich jetzt echt mal nen Reißnagel stopfen.

    Fehlermeldungen abzuschalten ist so ziemlich das schlimmste, was du als Programmierer von irgendwas überhaupt tun kannst (was auch der Grund ist, dass Yoyo dieses Feature für GM:S entfernt hat). Sowas solltest du dir gar nicht erst angewöhnen, nicht mal in Hobbyprojekten. Ich hab gestern erst jemanden in einem C++-Chatroom miterlebt, der allen ernstes gemeint hat, Exception Handling (also das behandeln von vorhersehbaren Fehlern, die zur Laufzeit eines Programms auftreten können), hätte in Produktions-Code nichts verloren und kritische Funktionswerte darauf zu prüfen, ob da ein Fehler war oder alles geklappt hat, sei auch unnötig. Man solle sich doch lieber drauf verlassen, dass man beim Programmieren schon alles richtig gemacht hat und das Betriebssystem den Rest auch ordentlich handhabt.
    Für die C/C++-Erfahreneren unter euch: Der fragliche kritische Funktionswert war der Rückgabewert von std::malloc(). Allein der Satz sollte schon reichen.

    Egal, was du grad codest und für wen: Es ist in 99.995% aller Fälle die richtige Lösung, mögliche Fehler beim Coden zu beheben, anstatt dich drauf zu verlassen, dass es im fertigen Programm/Spiel/whatever dann schon klappen wird, wenn du den Fehler einfach ignorierst. Ja, das bedeutet für dich beim Schreiben eine handvoll Aufwand mehr, weil du z.B. Sachen machen musst wie

    GML-Quellcode

    1. for(var i=0; i<ds_list_size(ein_container_mit_instanzen);++i){
    2. var inst = ds_list_find_value(ein_container_mit_instanzen,i);
    3. if instance_exists(inst){ // <- mehraufwand
    4. inst.mach_was(); // <- hattest du eh vor
    5. /* mach noch mehr
    6. wasimmer du willst
    7. */
    8. } // <- mehraufwand
    9. }

    Aber es bedeutet halt auch, dass dein Code am Ende auch das macht, was er soll und nicht sich nicht auf irgendwelches Verhalten des GM verlässt, das im Zweifelsfall nicht mal klar definiert ist. :deal:
    Aber wenn bei einem Spiel ein Error kommt, kann man ihn ja irgendwie anders anzeigen, um den Spieler mitzuteilen das etwas passiert ist, aber ich finde den Error dingens hässlich. Man kann den Error ja auch verschicken und ein Script auch verbessern und vielleicht die Lösung speichern und dann eben das der nicht mehr vorkommt im nächsten Bugfix ist es behoben.
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
    Nun, joa, das geht, aber das setzt halt auch wieder voraus, dass du diese Fehler selbst behandelst und nicht den GM crashen lässt.
    Ein Beispiel wäre z.B.: Das Spiel will eine Leveldatei laden, aber der Spieler hat diese Datei aus dem Ordner gelöscht, in dem sie liegen sollte.

    GML-Quellcode

    1. // von irgendwo anders:
    2. file = "level42.lvl";
    3. // und im ich-lade-eine-datei-und-mach-was-mit-ihr-skript:
    4. var loaded = meine_ladefunktion(file);
    5. // meine_ladefunktion sollte dabei true oder false zurückgeben,
    6. // je nachdem ob sie die datei finden konnte und dann geladen hat oder halt nicht.
    7. if (loaded == false){
    8. meine_pausefunktion_die_alles_anhält();
    9. meine_fehlermeldung("Level file not found","Could not find level info file "+file+". Returning to main menu.");
    10. exit;
    11. }
    12. // mach hier zeug mit der leveldatei, die jetzt ja geladen ist.


    Und die meine_fehlermeldung-Funktion wäre dann der Teil, der dir eine Instanz deines "Ich bin eine Fehlermeldung" Objektes erzeugt: Das stellt dir dann im Draw-Event diese beiden Strings so dar, wie du willst, und wenn du sie "wegdrückst" bringt sie dich ins Hauptmenü zurück (oder sowas in der Richtung, das kannst du ja z.B. auch von der Art des Fehlers abhängig machen).
    Das wäre dann quasi eine handgeschneiderte eigene Fehlermeldung, die nicht so bähbäh ist wie das GM-Standardding, aber die halt auch nur Fehler abfangen kann, die du selbst behandelt hast. Wenn du ds_list_find_value mit einem Wert aufrufst, der hinter dem Ende der Liste liegt, oder wenn du mit einer Instanz was machen willst, die gar nicht mehr existiert, kriegst du trotzdem noch den Standardfehler. Das sind dann halt Fälle, wo du mit nem einfachen if-Statement erstmal prüfst, ob dein Wert überhaupt gültig ist und dann erst damit weitermachst. In den meisten Fällen kann man solche Fehler still beheben, ohne dass der Spieler überhaupt was davon mitkriegt (siehe mein Beispiel im vorherigen Post - da passiert nur was mit Objekten, die wirklich existieren, alle anderen Werte werden einfach übersprungen und das Ding macht trotzdem noch, was es soll).
    Offtopic:

    Mal kurzer Sidekick zu Visual Basic...

    Da gabs / gibts ne "tolle" funktion "On error goto".

    Das war zum Teil schon hilfreich, zb wenn man "news" aus dem Netz runterlädt und keine Internetverbindung existierte, konnte man den Fehler eben abfangen und behandeln.
    Danke, on error goto wäre echt cool.
    Aber kann man ja mit der variable error...dingens abfangen.

    Also ich habe es gestern mal ausprobiert, und es ging super!
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe