Skocz do zawartości

Niepoprawny odczyt z pliku .ini


Rekomendowane odpowiedzi

///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

  • Administratorzy

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

  • 4 tygodnie później...

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

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ę
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...