Skocz do zawartości

Sprawdzanie, czy istnieje już plik zapisu gry


MetalowyNerd

Rekomendowane odpowiedzi

Witam. Siedzę nad tym już kilka godzin, i za cholerę nie wiem, co zrobić, żeby zadziałało. Zrobiłem w grze na razie opcję tylko dla mnie, w której po otwarciu menu, pojawia się menu:

F1 - zapisz grę,

F2 - wczytaj grę,

F3 - usuń zapis (nie działa),

F4 - zrestartuj grę,

(tekst) Zapis istnieje.

 

F1 i F2 działają dobrze. Pod przyciskiem F3 jest skrypt:

 

GML
if(file_exists("savegame.sav"))

file_delete("savegame.sav");

 

, jednak nie usuwa on wcale zapisu, bo jeśli po F3 wcisnę F2, gra się znowu wczytuję. To jeden problem.

 

Moim drugim problemem natomiast jest tekst ostatniej linijki, "Zapis istnieje/nieistnieje". Chodzi w tym o to, żeby napis zmieniał się, jeśli plik zapisu istnieje, a jakoś widzę, że ten tekst nie ma na to ochoty xd. Nie wiem, co robię źle. Oto kod do tego tekstu:

 

W STEP'IE

GML
if(file_exists("savegame.sav")==true) //if(file_exists("savegame.sav")) też nie działało...

saveExists = true;

else

saveExists = false;

 

W DRAW'IE

GML
if(saveExists == true)

draw_text(10,50,"Save exists");

else

draw_text(10,50,"No save");

 

Proszę o jakąś podpowiedź doświadczonych ;), bo myślałem, że mi to z pół godzinki zajmie, to oczywiście nieee, schody zawsze muszą być xD, przy każdej pierdółce.

Odnośnik do komentarza
Udostępnij na innych stronach

Zapisuję tak:

GML
if(file_exists("gamesave.sav"))

{

file_delete("gamesave.sav");

}

game_save("gamesave.sav");

 

, natomiast wczytuję tak:

GML
if(file_exists("gamesave.sav"))

{

game_load("gamesave.sav");

}

 

 

Na prawdę, nie rozumiem, czemu tak prosty mechanizm nie chce dzialać :/.

Odnośnik do komentarza
Udostępnij na innych stronach

Niestety, zmiana rozszerzenia na ".ini" nic nie dała, tak samo jak podmienienie "gamesave.ini" na "working_directory+"/gamesave.ini"". Może to bug GM:S'a? Niedopracowanie... nie wiem, ale to niby taka banalna rzecz, a stawia opór konkretnie :/. Próbowałem też z rozszerzeniem ".dat" ale GM:S nic sobie z tego nie robi. Macie jeszcze jakieś pomysły? Nawet te najdziwniejsze i najbardziej skomplikowane, może w końcu się uda

Odnośnik do komentarza
Udostępnij na innych stronach

Rozszerzenie nie ma znaczenia. Możesz zapisywać bez. A komentarza o użyciu ini nie skomentuję.

 

Jeżeli wszystko robisz dobrze to problem pewnie leży w śmieciach albo jest bugiem GM:S (co nie powinno już mieć miejsca).

 

Jakbyś jeszcze nie wiedział to GM:S obsługuje dane w dziwny sposób. Zapisywać możesz tylko i wyłącznie do working_directory czyli do folderu gry w %appdata%. Za to odczytywać możesz aż z trzech lokalizacji. working_directory, folderu instalacyjnego gry i program_directory. Dwa ostatnie zazwyczaj są te same, ale zdarzają się wyjątki.

 

Twój problem może być taki że masz gdzieś plik który dla GM jest tylko "do odczytu". GM otwiera go, czyta ale gdy próbuje go zapisać nie może wiec robi to do working_directory. Następnie jeżeli masz plik o tej nazwie w working_directory to nie szuka już w innych lokacjach tylko otwiera ten. Możesz go edytować, zapisywać i kasować. Ale jeżeli usuniesz ten plik to ponownie będzie go szukać w innych lokacjach.

 

Spróbuj założyć nowy projekt i w nim zrobić to samo.

Odnośnik do komentarza
Udostępnij na innych stronach

Yoyo najchętniej by wywaliło tą funkcję :P

Tak po za problemem z usuwaniem to pomyśl czy w ogóle game_save się tobie przyda bo cytując dokumentację:

NOTE: This function is very limited and it is designed for the beginner to get a save system up and running quickly, but more advanced users may prefer to code their own system using the File functions, due to the fact that the game will not save any of the dynamic resources like data structures, surfaces, added backgrounds and sprites etc..

tzn funkcja nie zapisze żadnej struktury( np zwykłej ds_list ), surfaceu itd... co czyni ją bezużyteczną.

Odnośnik do komentarza
Udostępnij na innych stronach

Threef - założenie nowego projektu będzie się trochę mijało z celem, bo projekt robiłem dość długo i jest zbyt rozbudowany, a stworzenie niemal identycznego zajęłoby mi sporo czasu.

 

ediepl - Dlatego teraz nie wiem, jak ten problem rozwiążę. Kusi mnie opcja, żeby wszystkie zmienne gry zapisywać w jednym pliku klasycznie, bez użycia game_save i game_load, ale nie wiem, jak mi to wyjdzie. Dodatkowo sprawę komplikuje fakt, że na przykład gdy podczas gry powstały nowe obiekty, to nie będę wiedział, jak zapisać ich koordynaty na ekranie w pliku, żeby można było je odczytać na nowo.

 

Ignatus - ja właśnie też nie bardzo wiem

 

Pozornie prosta funkcja, postawiła mi konkretne schody w rozwoju tej gry. To zniechęca, jak każde schody w programowaniu, ale (pewnie jak każdy z tego forum) jestem tego typu masochistą xD

Odnośnik do komentarza
Udostępnij na innych stronach

Threef - założenie nowego projektu będzie się trochę mijało z celem, bo projekt robiłem dość długo i jest zbyt rozbudowany, a stworzenie niemal identycznego zajęłoby mi sporo czasu.

Chodziło mi o to żebyś założył nowy projekt i sprawdził czy działa zapisywanie. Nie o to abyś zaczynał od nowa.

 

ediepl - Dlatego teraz nie wiem, jak ten problem rozwiążę. Kusi mnie opcja, żeby wszystkie zmienne gry zapisywać w jednym pliku klasycznie, bez użycia game_save i game_load, ale nie wiem, jak mi to wyjdzie. Dodatkowo sprawę komplikuje fakt, że na przykład gdy podczas gry powstały nowe obiekty, to nie będę wiedział, jak zapisać ich koordynaty na ekranie w pliku, żeby można było je odczytać na nowo.

game_save i tak ci się popsuje jeżeli dokonasz jakiś zmian w grze. Jeżeli dojdzie do sytuacji że zapiszesz grę a potem zmienisz coś w projekcie to jest bardzo duża szansa że już nie wczytasz tego zapisu gry. Dlatego YYG nie poleca już używania tego.

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ę...