Dester Opublikowano 6 Maja 2019 Udostępnij Opublikowano 6 Maja 2019 ///event naciśnięcia S (zapis) if keyboard_check(vk_control) and not saveload { saveload = true; // poproś o plik filename = get_save_filename("project file|*.ini", filename); if filename == "" { show_message_async("Saving canceled."); saveload = false; exit; } // usuń stare dane savefile = ini_open(filename); sectionNum = 0; while ini_section_exists(sectionNum) { ini_section_delete(sectionNum); sectionNum++; } ini_close(); // zapisz nowe dane sectionNum = 0; with obj_gate { savefile = ini_open(other.filename); ini_write_real(other.sectionNum, "x", x); ini_write_real(other.sectionNum, "y", y); ini_write_real(other.sectionNum, "o", output); ini_write_real(other.sectionNum, "d", dualInput); ini_write_real(other.sectionNum, "a", inputA); ini_write_real(other.sectionNum, "b", inputB); ini_write_real(other.sectionNum, "s", sprite_index); ini_write_real(other.sectionNum, "i", id); ini_write_real(other.sectionNum, "t", type); ini_close(); other.sectionNum++; } show_message_async("Project saved."); saveload = false; } ///event naciśnięcia L(odczyt) if keyboard_check(vk_control) and not saveload { saveload = true; // poproś o plik filename = get_open_filename("project file|*.ini", filename); if filename == "" { show_message_async("Loading canceled."); saveload = false; exit; } // wyczyść room with obj_gate instance_destroy(); //wczytaj dane ini_open(filename); sectionNum = 0; while ini_section_exists(sectionNum) { var loadGate = instance_create(0, 0, obj_gate); loadGate.x = ini_read_real(sectionNum, "x", -1); loadGate.y = ini_read_real(sectionNum, "y", -1); loadGate.output = ini_read_real(sectionNum, "o", -1); loadGate.inputA = ini_read_real(sectionNum, "a", -1); loadGate.inputB = ini_read_real(sectionNum, "b", -1); loadGate.sprite_index = ini_read_real(sectionNum, "s", -1); loadGate.oldId = ini_read_real(sectionNum , "i", -1); loadGate.dualInput = ini_read_real(sectionNum, "d", -1); loadGate.type = ini_read_real(sectionNum, "t", -1); sectionNum++; } ini_close(); // skonfiguruj bramki (zmienna id jest tylko do odczytu, dlatego taki workaround) with obj_gate { with obj_gate { if oldId == other.inputA { other.inputA = self; } else if oldId == other.inputB { other.inputB = self; } } } show_message_async("Project loaded."); saveload = false; } Zapisuję dane o wszystkich instancjach obiektu obj_gate do pliku ini, a potem je wczytuję. Wszystko działa poprawnie, oprócz pierwszego odczytu od uruchomienia gry. Zgadzają się pozycje bramek, ale zmienne inputA i inputB wariują. Kilkakrotne wczytanie od nowa rozwiązuje problem. Jeśli w roomie przed wczytaniem ustawię więcej bramek niż jest zapisanych w pliku, błąd nie wysętpuje. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 7 Maja 2019 Administratorzy Udostępnij Opublikowano 7 Maja 2019 Próbowałeś w osobnym projekcie jakoś zminimalizować ten kod, zeby znaleźć problem? Strasznie jest długi, ale na pierwszy rzut oka wyglada ok. Ja tylko dodam od siebie, że czasem miałem problem z zapisem liczb i generalnie używałem ini_write_string zamiast ini_write_real bo dawało to lepsze efekty Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dester Opublikowano 30 Maja 2019 Autor Udostępnij Opublikowano 30 Maja 2019 Nadal nie rozumiem tego problemu, ale korzystam z tego "tymczasowego" rozwiązania, które działa nie działa. // room - creation code repeat room_width/32 { repeat room_height/32 { instance_create(0, 0, obj_gate); } } with obj_gate instance_destroy(); EDIT: Ok. Teraz połączyłem tą metodę z wczytywaniem każdego pliku kilkakrotnie. Wygląda na to, że działa. Nevermind, nie działa. EDIT: Zamiast korzystać z wbudowanej zmiennej id postanowiłem nadawać własne id obiektom. Jak na razie wszystko działa. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się