Level aus externer Datei laden

    • Skript

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

    • Level aus externer Datei laden

      Hi Community,
      ich habe ein kleines Script geschrieben, mit dem ihr ein Level aus einer externen Datei laden könnt.
      Die genaue Anwendung erkläre ich unten.

      GML-Quellcode

      1. // load_level(str path);
      2. var f, h, i, j, s;
      3. f = argument[0];
      4. h = file_text_open_read(f);
      5. j = 1;
      6. do {
      7. s = file_text_read_string(h);
      8. file_text_readln(h);
      9. for (i = 1; i <= string_length(s); i += 1) {
      10. var a, px, py;
      11. a = string_char_at(s, i);
      12. px = i * 24 - 12;
      13. py = j * 24 - 12;
      14. switch (real(a)) {
      15. case 1:
      16. instance_create(px, py, objObject1);
      17. break;
      18. case 2:
      19. instance_create(px, py, objObject2);
      20. break;
      21. case 3:
      22. instance_create(px, py, objObject3);
      23. break;
      24. }
      25. }
      26. j += 1;
      27. } until (file_text_eof(h));
      28. file_text_close(h);
      Alles anzeigen
      Die Leveldateien sind so aufgebaut:

      Quellcode

      1. 11111
      2. 12001
      3. 11111
      Natürlich können auch mehrere und längere Zeilen vorhanden sein.
      Bei dem obigen Beispiel wäre 1 eine Mauer und 2 der Spieler. Wo eine 0 steht, wird keine Instanz erstellt.
      Nun müsst ihr das Script nur noch ein wenig anpassen. Beispiel:

      GML-Quellcode

      1. switch (real(a)) {
      2. case 1:
      3. instance_create(px, py, obj_wall);
      4. break;
      5. case 2:
      6. instance_create(px, py, obj_player);
      7. break;
      8. }
      Und bei den folgenden Zeilen müsst ihr 24 mit der (Standard-)Breite eurer Objekte ersetzen. Falls der Origin eurer Sprites auf 'center' gestellt ist, müsst ihr -12 mit der Hälfte der (Standard-)Breite der Objekte ersetzen. Sonst könnt ihr es löschen (das -12, nicht die zwei Zeilen Code ;))

      GML-Quellcode

      1. px = i * 24 - 12;
      2. py = j * 24 - 12;
      Da die Leveldateien mit jedem beliebigen Texteditor bearbeitet werden können, empfiehlt es sich, sie zu verschlüsseln.
      Ich hoffe das Script hilft ein paar Leuten ^^

      MfG,
      -fabse64
      fabse64 -> haiyyu

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

    • Nunja so wie dein Script im Moment ist kannst du nur 9 verschiedene Objekte erstellen.
      Also nur für sehr kleine spiele zu gebrauchen.
      Face in the wind, we're riding the storm
      We'll stay our course whatever will come
      ~~ Stay (Running) Wild ~~
    • Ändert nichts an der Tatsache, dass es nur für kleine spiele zu gebrauchen ist.
      Da man für die Landschaft Texturen und keine Objekte nutzt, bzw nutzen sollte.
      Und ich hab ja gesagt so wie es im moment ist, und wenn du das real() raus nimmst is es ja verändert ;)
      Btw fehlt noch die Klammer ) beim 3. Case
      Face in the wind, we're riding the storm
      We'll stay our course whatever will come
      ~~ Stay (Running) Wild ~~
    • Defmaster schrieb:

      Ändert nichts an der Tatsache, dass es nur für kleine spiele zu gebrauchen ist.
      Da man für die Landschaft Texturen und keine Objekte nutzt, bzw nutzen sollte.

      So etwas ähnliches hatte ich auch mal gemacht, nur anstatt Textdateien sollte das Level in PNG Dateien geschrieben werden(unter anderem wegen der eingebauten Komprimierung)
      Danach hatte ich die RGB Werte der Pixel ausgelesen und die Tiles / Objekte in ein 32x32 grid geladen(alle Objekte / Tiles waren gleich groß).
      Und mit

      Quellcode

      1. 3 x 256 / 256 + (256² = 65 536) / 256³ = 16 777 216
      Möglichkeiten pro Pixel ist schon einiges drin an Leveldesign, ohne endlos große Dateien zu generieren.
    • Ohne jetzt deine Bemühungen komplett in den Schatten stellen zu wollen, muss ich jetzt doch mal zeigen, wie man das Ganze ohne große Einschränkungen und allgemeingültig lösen kann. Ich tu dies unter der Vewendung einer Map.

      Es handelt sich hierbei nur um das Script zum Speichern, die anderen Scripts sind noch nicht ganz fertig. Ich wollte das ganze Paket erst die Tage hier vorstellen, also seht das mal als kleinen Vorgeschmack an (GM7).

      Edit: Das Paket ist nun online, Thread dazu hier.
    • Ich habe mal ne Frage:
      Ich möchte gerne, dass man die Datei Namen selber angeben kann.
      Also habe ich in Room start:

      GML-Quellcode

      1. global.h = get_integer("Geben Sie die Levelzahl an:",0)


      Und in <Enter>

      GML-Quellcode

      1. // load_level(str path);
      2. var f, h, i, j, s;
      3. f = argument[0];
      4. h = file_text_open_read(global.h);
      5. j = 1;
      6. do {
      7. s = file_text_read_string(h);
      8. file_text_readln(h);
      9. for (i = 1; i <= string_length(s); i += 1) {
      10. var a, px, py;
      11. a = string_char_at(s, i);
      12. px = i * 24 - 12;
      13. py = j * 24 - 12;
      14. switch (real(a)) {
      15. case 1:
      16. instance_create(px, py, objwall);
      17. break;
      18. case 2:
      19. instance_create(px, py, objplayer);
      20. break;
      21. case 3:
      22. instance_create(px, py, objbig);
      23. break;
      24. case 4:
      25. instance_create(px, py, objziel);
      26. break;
      27. }
      28. }
      29. j += 1;
      30. } until (file_text_eof(h));
      31. file_text_close(h);
      Alles anzeigen


      Wenn ich das Spiel starte kommt bei mir immer der Fehler:

      SQL-Abfrage

      1. ___________________________________________
      2. ERROR in
      3. action number 1
      4. of Keyboard Event for <Enter> Key
      5. for object object1:
      6. File is not opened for reading.


      Was mache ich Falsch???

      Ich bin keine Signatur... Ich putze hier nur!
    • Du weist dem global.h einen Integer Wert zu und file_text_read_string akzeptiert nur einen string als Argument.
      Mach aus

      GML-Quellcode

      1. global.h = get_integer("Geben Sie die Levelzahl an:",0)

      daraus

      GML-Quellcode

      1. global.h = get_string("Geben Sie die Levelzahl an:","0")
      In meiner psychisch soziologischen Konstellation, manifestiert sich die absolute Dominanz positiver Impressionen meines Individuums.
      Kurz: Ich bin geil!

    • Kann ich auch irgenwie Prüfen, ob die Datei vorhanden ist?
      Denn wenn nicht kommt immer die Fehlermeldung und dann reagiert das Programm nicht mehr!!!
      Dann muss ich dass immer erst über den Task-Manager beenden...

      Ich bin keine Signatur... Ich putze hier nur!