Testen ob Array leer ist

  • GM 8

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Testen ob Array leer ist

    Hallöchen!
    Wie kann man testen ob ein "Stück" vom array leer ist
    Hier der Code den ich bis jetzt hab:

    GML-Quellcode

    1. while text[satz] != ""
    2. {
    3. show_message(text[satz])
    4. satz += 1
    5. }

    Dann geht er aber immer außerhalb des arrays und es gibt einen Error.
    Also wie kann ich machen das er den Array solange liest bis nix mehr drin steht?
    Twitter: @BytingGames
  • @jlsnews: An deinem Code hat sich im Grunde nichts vom vorherigen Code geändert...

    Soweit ich weiß, ist das nicht möglich. Jedenfalls nicht ganz. Du kannst immernoch mit "error_occured" prüfen, ob ein Error an dieser Stelle im Code aufgetreten ist, dann weißt du dass es da nicht weiter geht. Allerdings würde ich dir nicht empfehlen, über einen Array hinauszugehen, weil es evtl. auch zu Programmabstürzen führen kann.
    Warum machst du nicht einfach eine Variable, die die Größe des Arrays angibt?
  • @Marvin

    Zum Beispiel wurde die Zählervariable definiert, auch wenn er es aus versehen nicht mit rein kopiert hat. Allerdings tritt ein solcher Fehler auf, weil die Variable nicht definiert wird und somit die While-Schleife auf ein Array-Key zugreift, der nicht vorhanden ist.
    :thumbsup:
  • Wie wäre es solange suchen zu lassen, bis ein Fehler auftritt?
    Als die schleife wird wenn error_occurred 1 zurück gibt unterbrochen.
    Oder man überprüft mit error_last ,ob das Array "out of bound" ist.

    EDIT: Oh, Entschuldige Marvin, hab ganz übersehen, dass du das schon gepostet hast.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Shapow ()

  • @Shapow

    -$Marvin$- schrieb:

    Du kannst immernoch mit "error_occured" prüfen, ob ein Error an dieser Stelle im Code aufgetreten ist, dann weißt du dass es da nicht weiter geht. Allerdings würde ich dir nicht empfehlen, über einen Array hinauszugehen, weil es evtl. auch zu Programmabstürzen führen kann.
    Ich würde die Möglichkeit aber nicht unterstützen, weil wie schon gesagt, kann das auch zu Programmabstürzen führen und das ist eher ungewollt.
  • oha so viele Antworten gleich 8|

    Also erstmal habe ich die definition von der Variable vergessen reinzukopieren.

    Ok ich glaub ich geh jetzt mal genauer ins Thema ein. Ich mach grad ein RPG Spiel mit GM 8.1, und es geht um den "Text" der NPCs.
    Ich mache ein NPC Objekt das für alle NPCs im ganzen Spiel steht, die Einzelheiten für die Einzelnen NPCs schreibe ich in einen Creation Code(nur GM 8.1 da kann man Codes für einzelne Objekte im room schreiben). Bei einem z.b. steht:

    GML-Quellcode

    1. text[0] = "Hallo Ich heiße Peter."
    2. text[1] = "Ich wohne hier."
    3. text[2] = "Schon seit 3 Jahren."

    So und dann steht im step event:

    GML-Quellcode

    1. if reden = 1 //wenn man ihn anspricht
    2. {
    3. satz = 0
    4. while text[satz] != ""
    5. {
    6. show_message(text[satz])
    7. satz += 1
    8. }
    9. reden = 0
    10. }

    Ich glaube das sollte klar sein. Nach den ganzen Beiträgen glaube ich dass es für das "nichts im array" keinen Code gibt, aber vielleicht eine Dll also wenn jemand eine kennt kann er sie mir schicken.
    Ok ich könnte das auch einfach so machen:

    GML-Quellcode

    1. text[0] = "Hallo Ich heiße Peter."
    2. text[1] = "Ich wohne hier."
    3. text[2] = "Schon seit 3 Jahren."
    4. text[3] = "" //So würds auch gehn.

    aber wär halt bequemer wenns anders auch geht weil man das auch öfter braucht.(Und ich bin Faul :P )

    @henrik1235
    Ich glaub ob ichs jetzt mit for oder while mach ist jetzt egal aber wie genau soll ich das dann mit den Listen machen, ich meine das ist doch genau das gleiche Problem.

    Naja und mit dem Error machs ich dann lieber nicht.
    Twitter: @BytingGames
  • iks deh schrieb:

    die Einzelheiten für die Einzelnen NPCs schreibe ich in einen Creation Code(nur GM 8.1 da kann man Codes für einzelne Objekte im room schreiben)
    Nur so nebenbei, das geht auch bei 8.0 ^^

    An deiner Stelle würde ich im Array, vielleicht am 1. Index (0) angeben, wie viele Sätze der NPC auf Lager hat.
    Z.B. so:

    GML-Quellcode

    1. text[0] = 3
    2. text[1] = "Hallo Ich heiße Peter."
    3. text[2] = "Ich wohne hier."
    4. text[3] = "Schon seit 3 Jahren."


    in einer Schleife kannst du dann die Sätze nacheinander Abfragen.

    GML-Quellcode

    1. for(i=1;i<=text[0];i+=1)
    2. {
    3. show_message(text[i])
    4. }
  • Mit Lists hat man mehr Kontrolle und vereinfacht manche Aktionen. Im Create-Event definiert man die Sätze:

    GML-Quellcode

    1. text = ds_list_create();
    2. ds_list_add(text, "Hallo Ich heiße Peter.");
    3. ds_list_add(text, "Ich wohne hier.");
    4. ds_list_add(text, "Schon seit 3 Jahren.");


    Und im Step-Event wird der Text ausgegeben:

    GML-Quellcode

    1. var satz;
    2. if(reden)
    3. {
    4. for(satz = 0; satz < ds_list_size(text); satz += 1)
    5. {
    6. show_message(ds_list_find_value(text, satz));
    7. }
    8. reden = false;
    9. }
    Alles anzeigen


    Und um Speicherlecks zu verhindern(auch wenn nur sehr kleine), sollte man im Destroy-Event die Sätze wieder löschen:

    GML-Quellcode

    1. ds_list_destroy(text);


    Man braucht also um die Sätze zu definieren nicht einmal die Array Nummer, was das einfügen von Sätzen, mitten im Text, vereinfacht.
  • Was man kann creationcodes auch in GM8 machen... AAAAAAAH wenn ich das gewusst hätte :headtouch:, denn ich hab nur GM 8 pro die andere ist lite egal ich habs convertiert zu GM 8.

    @-$Marvin$-
    Ja ok so könnt ichs natürlich auch machen...

    @Chris987
    Achso man kann die größe von lists angeben, na das ist natürlich praktisch. Habs mal in mein Spiel eingebaut, aber gibts da nicht irgendein nachteil z.b. dass es mehr Speicherplatz verbraucht?
    Und kann man da irgendwie 2-Dimensionale Lists machen?
    Twitter: @BytingGames
  • Achso man kann die größe von lists angeben, na das ist natürlich
    praktisch. Habs mal in mein Spiel eingebaut, aber gibts da nicht
    irgendein nachteil z.b. dass es mehr Speicherplatz verbraucht?

    Und kann man da irgendwie 2-Dimensionale Lists machen?
    Listen sind dynamische Arrays, die erweitern sich wenn man mehr Platzbrauch. Da Arrays im Game Maker keine Längen Eigenschaft haben sind Listen gut dafür.
    2D-Listen:

    GML-Quellcode

    1. var w,list;
    2. w=4;
    3. list=ds_list_create();
    4. repeat(w)
    5. {
    6. ds_list_add(ds_list_create());
    7. }

    GML-Quellcode

    1. //Add:
    2. var x;
    3. x=2;
    4. ds_list_add(ds_list_find_value(list,x),42);
    5. //Get:
    6. var x,y;
    7. value=ds_list_find_value(ds_list_find_value(list,x),y);
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%