Endlosschleifenschutz oder ini voll ?

  • GM 8

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

  • Endlosschleifenschutz oder ini voll ?

    Hallo,
    ich ( und crunk33 )
    haben ein problem bei dem Leveleditor für Zombie Force.
    und zwar werden die erstellten level in einer ini gespeichert
    und auch geladen.

    Geht super aber!!:

    wenn man im Editor das Level mit sehr vielen Wänden oder Gegnern baut
    und man das Level speichert und erneut lädt sind enige Objecte weg ??

    Woran liegt das ?
    ist das ein gm endlosschleifenschutz oder kann man inis etwa vollschreiben ??

    Speicher und Lade Code ausschnitte:
    Spoiler anzeigen

    GML-Quellcode

    1. //Speichern
    2. globalvar i;
    3. global.i=0
    4. file_delete("save.ini")
    5. ini_open("save.ini")
    6. ini_write_real("Spieler","x",obj_player.x)//Spieler
    7. ini_write_real("Spieler","y",obj_player.y)
    8. while(global.i<instance_number(obj_wand)){ // Wand
    9. with(obj_wand){
    10. ini_write_real("Wand",string(global.i)+"_x",x)
    11. ini_write_real("Wand",string(global.i)+"_y",y)
    12. global.i+=1
    13. }
    14. }
    15. ini_close()
    Alles anzeigen



    GML-Quellcode

    1. //Laden
    2. with(obj_player) instance_destroy()
    3. with(obj_wall) instance_destroy()
    4. globalvar i;
    5. global.i=0
    6. ini_open("save.ini")
    7. while(ini_key_exists("Wand",string(global.i)+"_x")){
    8. instance_create(ini_read_real("Wand",string(global.i)+"_x",0),ini_read_real("Wand",string(global.i)+"_y",0),obj_wand)
    9. i+=1
    10. }
    11. instance_create(ini_read_real("Spieler","x",0),ini_read_real("Spieler","y",0),obj_player)
    12. ini_close()
    Alles anzeigen



    Edit: Achja, die ini ist dann so aufgebaut:
    Spoiler anzeigen

    [Spieler]
    x=192
    y=160
    [Wand]
    0_x=192
    0_y=96
    1_x=224
    1_y=96
    2_x=256
    2_y=96
    3_x=288
    3_y=96
    usw...
    Kopiere dies in deine Signatur, um es in deiner Signatur zu haben.
    Achtung: Dieser Beitrag läuft ende des Monats ab, bitte lese ihn noch vor dem Monatswechsel...
    Nach langer zeit wieder im Forum aktiv :D

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

  • Gibt es einen guten Grund weshalb die Variable i global ist?
    Vllt wird diese beim Laden irgendwo überschrieben.

    Mach besser:

    GML-Quellcode

    1. var i = 0;

    Damit die Variable nur in dem Code verwendet wird.



    Übrigens; bei einer mit globalvar definierten Variable kann das global. vor dem Variablenname weggelassen werden.
    :thumbsup:
  • die ist global, weil ich sie ja mit den einzelnen Wänden wieder veränder

    Und warum i ?
    erlich gesagt k.a.
    ich hätte auch t nehmen können oder s

    Edit:
    Achja meine wände im Editor sind " ganz dumm "
    die wissen nur das sie beim Rechtsklick verschwinden sollen
    Es kann also nicht sein, das die i irgendwie weiter ändern.
    Kopiere dies in deine Signatur, um es in deiner Signatur zu haben.
    Achtung: Dieser Beitrag läuft ende des Monats ab, bitte lese ihn noch vor dem Monatswechsel...
    Nach langer zeit wieder im Forum aktiv :D

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

  • Larsi schrieb:

    Haha und was bringt mir das ?
    Es ist immer blöd mehrere Variablen mit dem selben Namen zu haben.
    Sollte aber eigentlich nicht der Fehler sein.
    Ehrlich gesagt fällt mir kein Fehler auf.

    Auf jeden Fall kannst du aber die Zeile while(global.i<instance_number(obj_wand)) // Wand vollständig weglassen.
    Indem du with(obj_wand) schreibst, werden automatisch alle Objekte namens obj_wand durchgenommen! Das with-statement ist sozusagen ebenfalls eine Schleife.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • @Dragon Gamer
    Naja, es geht zwar immer noch nichts, aber es hat etwas gebracht.
    1. Lädt er das Level schneller ( glaub ich )
    2. mein code ist übersichtlicher.

    @henrik1235
    DLL s will ich nur ungerne benutzen.
    und Bits sind mir etwas zu komplieziert.


    Aber ich muss es ja trotzdem irgendwie Speichern....
    Kopiere dies in deine Signatur, um es in deiner Signatur zu haben.
    Achtung: Dieser Beitrag läuft ende des Monats ab, bitte lese ihn noch vor dem Monatswechsel...
    Nach langer zeit wieder im Forum aktiv :D
  • Gleich bits würde ich dafür eigentlich auch nicht benutzen. Eher bytes :D

    Du kannst ja mal eine simple struktur machen:
    Eine Zeile beschreibt die Anzahl der Wände und hinterher werden eifnach die x und y Koordinaten reinegschrieben.

    Also in etwa so:

    GML-Quellcode

    1. var f; f = file_text_open_write("save.sav");
    2. file_text_write_real(instance_number(obj_wand));
    3. with(obj_wand)
    4. {
    5. file_text_writeln(f);
    6. file_text_write_real(f,x);
    7. file_text_writeln(f);
    8. file_text_write_real(f,y);
    9. }
    10. file_text_close(f);


    Dies speichert in die Datei z.B. das:
    3 // Anzahl der Wände
    100 // x-koordinate der ersten Wand
    200 // y-koordinate der ersten Wand
    40 // x-koordinate der zweiten Wand
    90 // usw...
    20
    350


    Dies kannst du ganz einfach auslesen.
    Weitere Objekt-arten fügst du einfach drunter hinzu.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • Gleich bits würde ich dafür eigentlich auch nicht benutzen. Eher bytes :D
    Der Game Maker kann in älteren Versionen (kA wie das in Studio/GM 6.1 ist) nur Bytes speichern, aber um shorts oder ints zu speichern müssen wir wissen was die einzelen Bytes sind -> Bitoperatoren.
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%
  • sorry aber ich hab auch noch gegner, waffen und andere items.

    ist das denn eher ein endlosschleifenschutz
    oder eher die ini voll ?
    Kopiere dies in deine Signatur, um es in deiner Signatur zu haben.
    Achtung: Dieser Beitrag läuft ende des Monats ab, bitte lese ihn noch vor dem Monatswechsel...
    Nach langer zeit wieder im Forum aktiv :D
  • @Larsi.
    Wie gesagt als nächstes fügst du an (vor dem file_close):

    GML-Quellcode

    1. file_text_writeln(f);
    2. file_text_write_real(instance_number(obj_gegner));
    3. with(obj_gegner)
    4. {
    5. file_text_writeln(f);
    6. file_text_write_real(f,x);
    7. file_text_writeln(f);
    8. file_text_write_real(f,y);
    9. }
    Und schon sind die Koordinaten aller Gegner vermerkt.
    Einen Endlos-schleifenschutz gibt es nicht und schon garnicht wenn du nur die with-"schleife" benutzst, die kann ja unmöglich unendlich sein.
    Es könnte tatsächlich sein dass der GM solch eine große Anzahl Einträge in INIs nicht zulässt...

    @henrik1235
    Ich weiss ich weiss. Wollte nur ein doofes Wortspiel machen :P

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • kann man inis etwa vollschreiben ?
    hab ich noch nie gehört.
    * hilfe aufblätter und noch mal genau les *

    Edit:
    von vollschreiben steht da nichts...
    Kopiere dies in deine Signatur, um es in deiner Signatur zu haben.
    Achtung: Dieser Beitrag läuft ende des Monats ab, bitte lese ihn noch vor dem Monatswechsel...
    Nach langer zeit wieder im Forum aktiv :D
  • Habe jetzt fast alles untersucht,
    und bin nun zu dem erkenntnis gekommen:
    Ich habe mal die anzahl, der wände im editior anzeigen lassen.
    Und gespeichert.
    Und dann in der ini waren genau die richtige anzahl an Wänden.
    Dann habe ich geladen, und wieder war vieles weg.

    Der Fehler ist beim Laden aber wo ??????
    Kopiere dies in deine Signatur, um es in deiner Signatur zu haben.
    Achtung: Dieser Beitrag läuft ende des Monats ab, bitte lese ihn noch vor dem Monatswechsel...
    Nach langer zeit wieder im Forum aktiv :D
  • Glaube der Fehler ist dort wo jlsnews ihn angedeutet hatte. Versuch mal die Variablen (wie bereits erwähnt) auseinander zu halten!

    GML-Quellcode

    1. global.i=0
    2. ini_open("save.ini")
    3. while(ini_key_exists("Wand",string(global.i)+"_x")){
    4. instance_create(ini_read_real("Wand",string(global.i)+"_x",0),ini_read_real("Wand",string(global.i)+"_y",0),obj_wand)
    5. global.i+=1
    6. }


    Denn wenn ich mich nicht irre, unetrscheidet der GM zwischen eine mittels globalvar globalisierten variablen und der selben variablen mit "global." davor!

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • So, ich habe es jetzt endlich getestet.

    Leider das selbe Ergebnis.

    Gibt es etwa eine Maximale anzahl an Objecten die GM in einem Step erstellen darf ???
    Kopiere dies in deine Signatur, um es in deiner Signatur zu haben.
    Achtung: Dieser Beitrag läuft ende des Monats ab, bitte lese ihn noch vor dem Monatswechsel...
    Nach langer zeit wieder im Forum aktiv :D