Problem mit Level Script

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

  • Problem mit Level Script

    Hi Community.
    Ich arbeite gerade an einem Script, dass es mir ermöglicht ein Level in eine Text Datei zu speichern.
    Mein Code zum Speichern sieht derzeit folgendermaßen aus:

    [ scr_Save_Game ]

    GML-Quellcode

    1. // Argument0: File
    2. var xx, yy, file, write;
    3. file = argument0;
    4. write = file_text_open_write (file);
    5. for (yy = 0; yy < room_height; yy += 32) {
    6. for (xx = 0; xx < room_width; xx += 32) {
    7. var obj;
    8. obj = instance_position (xx, yy, all);
    9. if (obj != noone) {
    10. if (obj.object_index == obj_Player) {
    11. file_text_write_string (write, string (1));
    12. }
    13. else if (obj.object_index == obj_Wall) {
    14. file_text_write_string (write, string (2));
    15. }
    16. }
    17. else {
    18. file_text_write_string (write, string (0));
    19. }
    20. }
    21. file_text_writeln (write);
    22. }
    23. file_text_close (write);
    Alles anzeigen


    Es Speichert einen Level so ab:

    Quellcode

    1. 0000000000
    2. 0010000000
    3. 0000000000
    4. 0000000000
    5. 2002002002
    6. 0000000000
    7. 0200200200
    8. 0000000000
    9. 0020020020
    10. 0000000000

    0 = Nichts,
    1 = Spieler,
    2 = Wand

    Das klappt gut. Nur das Laden will noch nicht so richtig. Mein Code:

    [ scr_Load_Game ]

    GML-Quellcode

    1. // Argument0: File
    2. var xx, yy, file, write;
    3. file = argument0;
    4. write = file_text_open_read (file);
    5. strpos = 0;
    6. str = "";
    7. for (yy = 0; yy < room_height; yy += 32) {
    8. var i;
    9. str = file_text_read_string (write);
    10. for (i = 1; i < string_length (str); i += 1) {
    11. if (string_char_at (str, i) == "1") {
    12. instance_create ((i - 1) * 32, yy, obj_Player);
    13. }
    14. else if (string_char_at (str, i) == "2") {
    15. instance_create ((i - 1) * 32, yy, obj_Wall);
    16. }
    17. }
    18. file_text_readln (write);
    19. }
    20. file_text_close (write);
    Alles anzeigen


    Er lädt die Levels zwar bis zur 9ten Reihe korrekt, aber die 10te lädt er nicht mehr.
    Obwohl er noch eine Wand in Zeile 5 erstellen müsste.

    Ich hab das schon mit vielen Arten probiert, das -1 weggelassen, etc... Wollte nich gehen, deshalb frag ich hier. ;D
    Wie kann ich das Problem beheben?
    Danke schonmal. :)
    fabse64 -> haiyyu

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

  • (Im Script sehe ich keinen Fehler, aber das gespeicherte Level hat in Zeile 10 gar keine Wand... vielleicht liegts ja daran.)
    EDIT: Du meinst wohl Spalte... ich schaus mir nochmal an...
    EDIT2: Versuch das:

    GML-Quellcode

    1. // Argument0: File
    2. var xx, yy, file, write;
    3. file = argument0;
    4. write = file_text_open_read (file);
    5. strpos = 0;
    6. str = "";
    7. for (yy = 0; yy < room_height; yy += 32) {
    8. var i;
    9. str = file_text_read_string (write);
    10. for (i = 1; i <= string_length (str); i += 1) {
    11. if (string_char_at (str, i) == "1") {
    12. instance_create ((i - 1) * 32, yy, obj_Player);
    13. }
    14. else if (string_char_at (str, i) == "2") {
    15. instance_create ((i - 1) * 32, yy, obj_Wall);
    16. }
    17. }
    18. file_text_readln (write);
    19. }
    20. file_text_close (write);
    Alles anzeigen

    mfg Dragoon
    int (*x(*x(int))[5])(int*);
    Confused? Yes, it's C!
  • Oh, Tschuldigung, ich meinte nicht Zeile 10, sondern Position 10, Zeile 5.
    [...]
    5. 2002002002
    [...]

    EDIT: Danke, das klappt @Dragoon. :)
    Aber was ist an dem Code anders? Sry, hab den Unteschied nicht gefunden. ;D

    @Foo: Wieso 'EOF' ?
    fabse64 -> haiyyu

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von fabse64 ()

  • Der Unterschied liegt in dieser Zeile:

    GML-Quellcode

    1. for (i = 1; i <= string_length (str); i += 1)

    Wenn man bei 'ner for-Schleife mit i=1 beginnt, dann muss man in der Regel eine Bedingung mit kleiner-gleich ( <= ) verwenden.

    mfg Dragoon

    PS: EOF = End of file (file_text_eof(file_id)), er meint damit, dass du das Auslesen nicht von der Raumhöhe sondern von den Anzahl Zeilen in der Textdatei abhängig machen sollst.
    int (*x(*x(int))[5])(int*);
    Confused? Yes, it's C!
  • Benutzer online 1

    1 Besucher