Skocz do zawartości

Save i load game do pliku - GM:S


Cygnus

Rekomendowane odpowiedzi

Na zdrówko Wujku Threef;) co za dobre piwo spijasz?

 

ach własnie event podmieniłem na ten od Ciebie no i teraz to wyskakuje przy kompilacji taki błąd :

 

Compile errors

tekst na czerowono

 

 

GML
In Object obj_ice,In Event StepBeginEvent action number 1 at line 2: unknow function or script ds_exit

Compile Failed - Please check the Compile window for any additional informatiom

Odnośnik do komentarza
Udostępnij na innych stronach

Tak tez myslalem,jak wczesniej wspominales,ze z kolejnym obiektem moze byc problem,teraz to wyswietla taki komunikat

 

obj_164 czyli ruchoma platforma

 

GML
ERROR in

action number 1

of Step Event0

for object object164:

 

Data structure with index does not exist.

at gml_Object_object164_StepNormalEvent_1 (line 58) - for (i=0;i<ds_list_size(notOnMeList);i++) {

 

 

 

a to cały kod obj_164

 

create

 

GML
hspd = 0;

vspd = 0;

onMeList = ds_list_create();

notOnMeList = ds_list_create();

entity_collision = false;

 

Destroy

 

GML
ds_list_destroy(onMeList);

ds_list_destroy(notOnMeList);

 

Step

 

GML
///Move

entity_collision = false;

xprevious = x;

yprevious = y;

 

//Check for intances on top

while place_meeting(x,y+min(-1,vspd),par_entity) {

with instance_place(x,y+min(-1,vspd),par_entity) {

if !place_meeting(x,y-1,other) {

xprevious = x;

yprevious = y;

ds_list_add(other.onMeList,id);

y -= 9999;

} else {

ds_list_add(other.notOnMeList,id);

y -= 9999;

}

}

}

//Check for intances on below

while place_meeting(x,y+max(1,vspd),par_entity) {

with instance_place(x,y+max(1,vspd),par_entity) {

if !place_meeting(x,y-1,other) {

ds_list_add(other.onMeList,id);

y -= 9999;

} else {

ds_list_add(other.notOnMeList,id);

y -= 9999;

}

}

}

//Check for intances to the right

while place_meeting(x+max(1,hspd),y,par_entity) {

with instance_place(x+max(1,hspd),y,par_entity) {

if !place_meeting(x,y-1,other) {

ds_list_add(other.onMeList,id);

y -= 9999;

} else {

ds_list_add(other.notOnMeList,id);

y -= 9999;

}

}

}

//Check for intances to the left

while place_meeting(x+min(-1,hspd),y,par_entity) {

with instance_place(x+min(-1,hspd),y,par_entity) {

if !place_meeting(x,y-1,other) {

ds_list_add(other.onMeList,id);

y -= 9999;

} else {

ds_list_add(other.notOnMeList,id);

y -= 9999;

}

}

}

 

//Move non-lifted back

for (i=0;i<ds_list_size(notOnMeList);i++) {

with ds_list_find_value(notOnMeList,i) {

y += 9999;

}

}

ds_list_clear(notOnMeList);

 

//Move horizontally

for (i=0;i<abs(hspd);i++) {

if !solid_place(x+sign(hspd),y) {

x += sign(hspd);

} else {

hspd *= -1;

break;

}

}

 

//Move vertically

for (i=0;i<abs(vspd);i++) {

if !solid_place(x,y+sign(vspd)) {

y += sign(vspd);

} else {

vspd *= -1;

break;

}

}

 

//Move carried instances

for (i=0;i<ds_list_size(onMeList);i++) {

with ds_list_find_value(onMeList,i) {

y += 9999;

 

x += other.x-other.xprevious;

y += other.y-other.yprevious;

 

if solid_place(x,y) {

other.entity_collision = true;

}

}

}

 

//Cancel movement

if entity_collision == true {

x = xprevious;

y = yprevious;

hspd *= -1;

vspd *= -1;

for (i=0;i<ds_list_size(onMeList);i++) {

with ds_list_find_value(onMeList,i) {

x = xprevious;

y = yprevious;

}

}

}

 

//Clean up

ds_list_clear(onMeList);

Odnośnik do komentarza
Udostępnij na innych stronach

Dobra zadziałało nawiasu nie dałem na końcu kodu;) dzięki Threef ,czyli wychodzi na to,że jak będzie problem z odczytem load game,to wystarczy tą linijkę dodać kodu i powinno zadziałać;)

 

P.S nie pij młody już więcej tego niedobrego piwa;)

Odnośnik do komentarza
Udostępnij na innych stronach

Walcze jeszcze z jedną rzeczą,a mianowicie z tym,że jak bohater najedzie na obj_savegame,to wyświetli się wiadomość,że zapis gry został zakończony

 

robiłem przez kod w stepie wpisując

 

msg = show_message_async("zapis gry został zakończony");

ale to nie ten efekt,bo wyskakuje fakt info,ale w postaci okienka,które trzeba kliknąć na OK żeby się zamknęło,no to zacząłem kombinować w DRAW w obiekcie savegame,ale nie wiem jak to zrobić

 

draw_text(x, y, "zapis gry został zakończony"); ale to nic nie pomaga i nie wyświetla mi się napis w momencie najechania na obj_savegame.

Jak to zrobić?

Odnośnik do komentarza
Udostępnij na innych stronach

Create

GML
saveInfo=false;

saveInfoTime=3;//ustaw sobie tu ile sekund ma się wyświetlać</span>

Gdy zapisujesz (ta kolizja czy co tam masz)

GML
if (!saveInfo)

{

saveInfo=true;

alarm[0]=saveInfoTime*fps;

}

Alarm 0

GML
saveInfo=false;

Draw

GML
if (saveInfo)

{

draw_text(x, y, "zapis gry został zakończony")

}

Nom, cuś takie.

Odnośnik do komentarza
Udostępnij na innych stronach

No właśnie twój sposób nie działa;) i nie wyświetla mi się info,że gra została zapisana

 

a kod cały w obiekcie savegame mam taki:

 

obj_savegame

 

CREATE

GML
checked = false;

list = ds_list_create();

 

Colission z obj_player

 

GML
if( !checked )

{

checked = true;

game_save("Save.dat");

}

 

 

DRAW

 

GML
draw_self();

draw_set_color( c_white );

draw_text(x,y, "zapis gry został zakończony" );

Odnośnik do komentarza
Udostępnij na innych stronach

Wut? hm. po pierwsze w twoim kodzie tekst rysuje się w pozycji obiektu cały czas, niezależnie od tego czy zapisałeś właśnie czy nie. Jeśli go nie widzisz to pewnie nie widzisz też obiektu. Albo rysujesz na białym tle. W moim sposobie nie ma co nie działać,no oprócz wyświetlania bo może po prostu nie widzisz tego tekstu. Spróbuj zamiast x,y dać 20,20 i ustaw font na gigantyczny.

Odnośnik do komentarza
Udostępnij na innych stronach

Zobacz robię tak jak Ty napisałeś i nadal nie wyświetla mi teraz obiektu i napisu

 

obj_savegame

 

Create

 

GML
checked = false;

list = ds_list_create();

saveInfo=false;

saveInfoTime=3;

 

 

Alarm 0

 

GML
saveInfo=false;

 

 

Kolizja z bohaterem

 

GML
if( !checked )

{

checked = true;

game_save("Save.dat");

}

if (!saveInfo)

{

saveInfo=true;

alarm[0]=saveInfoTime*fps;

}

 

 

Draw

 

GML
if (saveInfo)

{

draw_text(20,20,"zapis gry został zakończony")

}

Odnośnik do komentarza
Udostępnij na innych stronach

Spróbuj draw zmienić na:

GML
draw_self();

if (saveInfo)

{

draw_text(view_xview[0]+20,view_yview[0]+20,"zapis gry został zakończony")//to z view może być źle ale powinno być jakoś podobnie, nie pamiętam dokładnie

}

na początku.

 

Kolizje zmień na:

GML
if( !checked )

{

checked = true;

game_save("Save.dat");

if (!saveInfo)

{

saveInfo=true;

alarm[0]=saveInfoTime*fps;

}

}

Odnośnik do komentarza
Udostępnij na innych stronach

Spróbuj draw zmienić na:

GML
draw_self();

if (saveInfo)

{

draw_text(view_xview[0]+20,view_yview[0]+20,"zapis gry został zakończony")//to z view może być źle ale powinno być jakoś podobnie, nie pamiętam dokładnie

}

na początku.

 

Kolizje zmień na:

GML
if( !checked )

{

checked = true;

game_save("Save.dat");

if (!saveInfo)

{

saveInfo=true;

alarm[0]=saveInfoTime*fps;

}

}

 

Jeżeli to jest GameMaker:Studio, to czy nie lepiej wrzucić to do draw_GUI ?

Automatycznie np. x:16, to jest xview+16...

Odnośnik do komentarza
Udostępnij na innych stronach

No dobra zrobiłem tak jak napisałeś teraz przynajmniej jest obj_savegame,gra się zapisuje,ale w momencie najechania na niego nie ma informacji,że gra została zapisana...coś jeszcze jest nie tak.

Tak to jest game maker studio.

Odnośnik do komentarza
Udostępnij na innych stronach

Jak ten kod z draw wrzucę do draw gui to jest tak nie daleko od bohatera pojawia się podążający za mną mały obj_savegame co wygląda dziwnie,no i podchodzę potem do miejsca zapisu czyli umiejscowionego w danym miejscu obj_savegame po czym jest informacja biały napis,że gra została zapisana..ale nadal za mną podażą mały obj_savegame..

Odnośnik do komentarza
Udostępnij na innych stronach

Jak ten kod z draw wrzucę do draw gui to jest tak nie daleko od bohatera pojawia się podążający za mną mały obj_savegame co wygląda dziwnie,no i podchodzę potem do miejsca zapisu czyli umiejscowionego w danym miejscu obj_savegame po czym jest informacja biały napis,że gra została zapisana..ale nadal za mną podażą mały obj_savegame..

później musisz to saveinfo dac na false, po kilku sekundacch

Odnośnik do komentarza
Udostępnij na innych stronach

Super teraz działa faktycznie do draw trzeba było dać

draw_self();

 

a reszte w draw GUI.

 

Dziekuje;)

 

No i jeszcze jedna rzecz,bo na razie jak pojawiają się napis że zapis gry został zakończony powodzeniem,jest na górze,próbuje go jakoś ustawić nad bohaterem,ale się za mocno przesuwa...jak to zrobić??

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