Skocz do zawartości

pankracy

Użytkownicy
  • Postów

    320
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    1

Treść opublikowana przez pankracy

  1. Czy tą tablice ds_queue_empty mam stworzyć w dowolnym obiekcie w create?
  2. Masz rację Gnysek..ds_create nie ma nic wspólnego z zapisem gry. Spojrzałem dokładnie na kod i mam taki standardowy zapis gry który zapisuje się do pliku save.dat. Sprawdziłem ścieżkę dostępu do projektu w systemie Windows i po zapisie gry ten plik tam się znajduje. Tylko problem polega na tym,że zapis i odczyt gry działa dopóki nie wyjdę całkowicie z gry. Kiedy próbuje załadować grę to wywala mi taki niżej komunikat. Uprościłem,żeby nie wklepywać tu bezmyślnie setki linijek kodu;-) Widać,że odwołuje się to do Mojego skryptu textboxa. Jak to naprawić? takie są dwa błędy 1. ERROR in action number 1 of Step Event0 for object obj_player: Data structure with index does not exist. at gml_Script_no_text (line 6) - if ( ds_queue_empty(global.textq) and global.text_get=true ) ############################################################################################ -------------------------------------------------------------------------------------------- stack frame is gml_Script_no_text (line 6) called from - gml_Object_obj_player_StepNormalEvent_1 (line 51) - if no_text() //teraz Bohater stoi jak jest odwatrzana sekwencja tekstowa textboxa 2. ___________________________________________ ############################################################################################ ERROR in action number 1 of Step Event0 for object obj_text: Data structure with index does not exist. at gml_Object_obj_text_StepNormalEvent_1 (line 1) - if not ds_queue_empty(global.textq) and global.text_get=true ############################################################################################ -------------------------------------------------------------------------------------------- stack frame is gml_Object_obj_text_StepNormalEvent_1 (line 1) obj_text step if not ds_queue_empty(global.textq) and global.text_get=true //jezeli [kolejka] nie jest pusta i mozna [pobrac tekst] { global.text_get=false;//wylacz pobieranie tekstu, aby funkcja sie juz nie wywolala, dopuki znowu nie bedzie true text=ds_queue_dequeue(global.textq);//pobierz tekst z kolejki step=1;//ustaw zadanie na jeden leght=0; } //KROK 1 if step=1 { //zmniejszamy przeswitywalnosc az do max. widocznosci (1) if alpha<1 then alpha+=0.1 else { //przeswitywalnosci juz nie ma, zatem skoncz wykonywanie tego skryptu alpha=1; step=2; } } //KROK 2 if step=2 { if leght<string_length(string(text)) then leght += 1; // Mozesz zmienic predkosc "drukowania" testu dodajac inna liczbe do zmiennej leght } //KROK 3 if step=3 { //teraz zwiekszaj przeswitywalnosc az do znikniecia (0) if alpha>0 then alpha-=0.1 else { //przeswituje juz tak ze bardziej nie moze alpha=0; text=''; global.text_get=true;//ustaw, ze mozna juz pobierac tekst step=0; } } obj_player step if no_text() //teraz bohater stoi jak jest odwatrzana sekwencja tekstowa textboxa { /// } skrypt no_text //zwraca true, jezeli nie ma juz zadnego tekstu do wyswietlenia if ( ds_queue_empty(global.textq) and global.text_get=true ) then return true else return false;
  3. nie ma..przeszukałem wszystkie skrypty w grze... dobra to są wbudowane..kurcze...nie dobrze..bo muszę jedną rzecz dodać,bo brak tej rzeczy powoduje problemy załadowaniem gry. Tylko dziwna sytuacja..bo jednak save game działa wszystko zapisuje nawet jak mam mniejszą ilość energii,ale jak wyjdę już z gry i włączę ją z powrotem i wybiorę load game to wywala błąd...ale jak mówię ten błąd jestem wstanie ogarnąć,bo odwołuje się do jednego ze skryptów od textboxa...Wystarczy właśnie odszukać te nie istniejące skrypty które tworzą pliki save.dat i Save.dat z dużej litery i zainicjować tam w kodzie ten skrypt i będzie działać. tu mam też info,że odczytuje zapis gry to z pliku save.dat obj_menu step if(keyboard_check_pressed(vk_enter) || gamepad_button_check_pressed(0,gp_face1)) { if(selected=0) { room_goto(rm_poziomtrudnosci) } else if(selected=1) { if(file_exists("save.dat")){ game_load( "Save.dat" ); } else { show_message("Cannot find save.dat file. Please start a new game.");//nie odnaleziono pliku } audio_stop_sound (dzwiek_menu_glowne_gry); } else if(selected=2) { room_goto(rm_highscore) } else if(selected=3) { room_goto(rm_options) } else if(selected=4) { room_goto(rm_credits) } else if(selected=5) { game_end() } } obj_save_game Create licznik=x/14; checked = false; //sprawdzenie list = ds_list_create(); //lista zachowujaca stan gry! saveInfo=false; //informacja o zachowaniu gry saveInfoTime=3; //infroamcja o czasie zachowania gry Kolizja z obj_player if( !checked ) { checked = true; game_save("Save.dat"); //gre zachowywana pod nazwa pliku Save.dat if (!saveInfo) { saveInfo=true; audio_play_sound(dzwiek_checkpointisave, 1, false); alarm[0]=saveInfoTime*fps; //czas * ilosc FPS prosty wzor do zachowania stanu gry } }
  4. Mam pytanie: Mam w grze save/load game zbudowany na podstawie list = ds_list_create(); problem w tym,że nie widzę skryptu w kodzie. wiem,że zapis gry następuje do pliku save.dat. ten plik tez znalazłem jest w moim przypadku w C:\Users\laptop\AppData\Local\Moja gra Prawdopodobnie są gdzieś dwa skrypty w kodzie jeden generuje plik save.dat a drugi Save.dat z dużej litery. Jest jakiś sposób w GMS żeby wyszukać te skrypty lub po funkcji ds_list_create? Save game działa,ale kiedy wychodzę z gry przestaje działać.Wiem co powoduje problem i wiem jak to naprawić..tylko muszę zlokalizować w swoim kodzie te skrypty od save i load.
  5. Przepraszam...muszę trochę kodu wkleić;-) żeby to objaśnić;-) Kolizje z obj_Player mam następujące: par_hazzard -To obiekt który po zetknięciu bohatera z tym obiektem powoduje automatycznie śmierć...(np kolce itp) Jest on ustawiony w kolizji z moim bohaterem czyli obj_player obj_player kolizja z par_hazzard ///smierc natychniastowa po dotknieciu obiektu hazard instance_destroy(); instance_create(x,y,obj_player_ginie) with (instance_create(x,y,obj_entity_die)) { sprite_index = spr_player_die02; image_xscale = other.image_xscale; respawn = true; respawnObject = obj_player; respawnX = spawnX; respawnY = spawnY; physics = false; health=-100; image_speed=(image_number/room_speed)/ 2//Czas zanim anatol sie odrodzi global.life -=1; audio_play_sound(dzwiek_anatol_ginie, 1, false); image_alpha=0 } kolejna kolizja: obj_player kolizja z par_obrazenia Tutaj jak sami widzicie poniżej w zależności od wybranego poziomu Przeciwnik w kontakcie z bohaterem zabiera mu energię HP. ///Poziom trudnosci i obrazenia jakie okreslone obiekty dziedziczace z tego rodzica zadaja Bohaterowi if(global.difficulty == "easy") if global.zegarObrazen<0 { global.hp-=17 global.zegarObrazen=room_speed*2 } if(global.difficulty == "medium") if global.zegarObrazen<0 { global.hp-=25 global.zegarObrazen=room_speed*2 } if(global.difficulty == "hard") if global.zegarObrazen<0 { global.hp-=34 global.zegarObrazen=room_speed*2 } i ostatnia kolizja bohatera obj_player z par_attack Ta kolizja jest przypisana do wrogów z moim bohaterem. obj_player kolizja z par_attack ///Obrazenia if other.owner == par_enemy && zegarObrazen == 0 { global.hp -= other.sila; zegarObrazen = room_speed/2; } Problem polega na tym,że mam w dwóch stepach w jednym w obj_player global.hp <= 0 oraz w global_game_controller w stepie mam global.life = 0 Gnysek wspomniał,że if (global.life > 0) { global.life -=1; } Powinien znajdować się u Bohatera w kolizji z obiektem,który ma dawać obrażenia i chyba analogicznie tak samo obiekt który ma zabierać energię a jak energia się skończy zabierać życie. Tak was zrozumiałem zabieranie energii i odjęcie życia oraz odjęcie życia w zetknięciu z obiektem który nie zabiera energii tylko od razu życie nie może być w stepie tylko w kolizji bohatera z danym obiektem,który ma tą energię zabrać a następnie życie lub od razu życie. Mam rozumieć,że mam wywalić jeden i drugi kod ze step z tych dwóch obiektów i wrzucić to do kolizji gracza z obiektami zadającymi obrażenia? Bohater kiedy zginie i skończą mu się życia nie powinien się znowu odradzać na początku planszy chce to wyeliminować..naprawić to. Gracz ma 0 żyć,to koniec gry nie odradza się i już. Przepraszam,że tak po łebkach to wam tłumaczę,ale sam dochodzę powoli do pewnych rzeczy.Doceniam wasz wkład waszą wiedzę...nie każdy od razu zbudował Rzym tak to wygląda: obj_player step //Bohater dostajac obrazenia to miga //miganie dodane specjalnie dla kuli kiedy wartosc zmiennej globalnej hit jest rowna 1 //Bohater miga otrzymujac obrazenia okreslone w pulapce kula oraz innych elementach zadajacych obrazenia global.zegarObrazen-=1 if global.zegarObrazen>0 || global.hit=1 image_alpha=0.7+lengthdir_x(0.3,current_time) else image_alpha=1; if (global.hp <= 0) { global.life-- instance_destroy(); instance_create(x,y,obj_player_ginie) with (instance_create(x,y,obj_entity_die)) { sprite_index = spr_player_die01; image_speed=(image_number/room_speed)/ 2//Czas zanim bohater sie odrodzi image_xscale = other.image_xscale; respawnObject = obj_player; respawnX = spawnX; respawnY = spawnY; physics = true; respawn = true; image_alpha=0 } audio_play_sound(dzwiek_anatol_ginie, 1, false); //odtwarzamy dzwiek gdy bohater ginie } obj_game_controller Step if (global.life = 0) { if (can_finish == false) { if (alarm[0] == -1) { // zacznij tylko gdy jeszcze się nie odlicza alarm[0] = 60; // 150 to 5 sekund } } else { if (global.pScore >= 500) //Sprawdz czy wynik nadaje sie do highscore,ale musi zostac spelniony warunek punktowy { var s=highscores[| ds_list_size(highscores) - 1]; //Czy punkty kwalifikuja sie na top 10 if (ds_list_size(highscores) < 10 || s[?"score"] <= global.pScore) { room_goto(rm_save_score); exit; // zakoncz wykonywanie eventu step w tej klatce } } room_goto(rm_game_over); } }
  6. Konrad, Nie mam w stepie takiej linijki,bo Gnysek Mi to już wyjaśnił,że ten kod nie może być użyty w stepie tylko w kolizji z obiektem czyli np z wrogiem lub dowolny obiekt ,który daje mi obrażenia.. Musiałbym stworzyć jakiegoś parenta dla wszystkich obiektów,które dają obrażenia bohaterowi i tam użyć tego rozwiązania Chłopaki ja wam bardzo dziękuje za pomoc;-) wiem,że staracie się Mi pomóc...naprawdę to doceniam... if (global.life > 0) { global.life -=1; }
  7. Konsola pokazuje mi teraz,że 7 razy "sie wykonalem" właśnie przed chwilką uruchomiłem Simian.
  8. Bez przesady...znaki większości mniejszości równości to ja znam... Mam bazowy silnik gry,który był mocno okrojony... Teraz próbuje do niego dorzucać elementy które są Mi potrzebne do ukończenia gry.
  9. Hehe jest to samo zaraz wychodzi z gry i pojawia się plansza game over;-) Coś Ty cały kod gry by się tu nie zmieścił;D Kurcze mówicie,że global.life wykonuje się co jedna klatkę gry... znalazłem kod w grze naszego kolegi Top Hat i podobnie jak ja ma w stepie bohatera takie rozwiązanie: obj_player z gry Top Hat step global.czasniezniszczalnosci-=1 if global.czasniezniszczalnosci>0 image_alpha=0.7+lengthdir_x(0.3,current_time) else image_alpha=1 //dead if global.graczhp<0 { instance_destroy() instance_create(x+0,y+0,obj_graczdead) global.zycia-=1 } //dead2 if global.graczhp=0 { instance_destroy() instance_create(x+0,y+0,obj_graczdead) global.zycia-=1 } a w kolizji z wrogami obj_player Top hat ma tak if global.czasniezniszczalnosci<0 { global.graczhp-=1 global.czasniezniszczalnosci=room_speed*2 instance_create(x+0,y+0,obj_oberwalefekt); sound_play(snd_oberwal) } i na końcu w Create bohatera Top Hat jest tak grav = 0; vspd = 0; hspd = 0; st=1 time=0 //�ycie i co� tam drabina=0 koniec=0 skok=false nadrabinie=false //bronie global.graczpistol=1 global.graczshotgun=0 global.graczshotgunma=0 global.czasniezniszczalnosci=0 Dlatego teraz zgłupiałem skoro w stepie tak ma i to działa
  10. Sprawdzę później;-) oj zaskoczę was,ale jeszcze cierpliwości;-) fabuły nie zdradzam grafika w stylu hollow knight ;-) coś w ten deseń;-)
  11. Gnysku Mam to w stepie. w kolizjach z wrogami i przeszkodami mam tylko kod na obrażenia jakie zadają bohaterowi. Kurcze to tak jak mówisz...dlatego mi się od razu wykonuje. chociaż spojrzałem w necie na kilka silników gry i widziałem np,że global.hp jest wrzucany do stepa obiektu.. w kolizjach z moim bohaterem mam tak: obj_player kolizja z par_hazzard (jak spadnie na obiekty które od razu zabierają mu życia np kolce) tu jest global.life -=1 :-) było od początku ///smierc natychniastowa po dotknieciu obiektu hazard instance_destroy(); instance_create(x,y,obj_player_ginie) with (instance_create(x,y,obj_entity_die)) { sprite_index = spr_player_die02; image_xscale = other.image_xscale; respawn = true; respawnObject = obj_player; respawnX = spawnX; respawnY = spawnY; physics = false; health=-100; image_speed=(image_number/room_speed)/ 2//Czas zanim anatol sie odrodzi global.life -=1; audio_play_sound(dzwiek_anatol_ginie, 1, false); image_alpha=0 } obj_player kolizja z par_obrazenia ///Obrazenia if other.owner == par_enemy && zegarObrazen == 0 { global.hp -= other.sila; zegarObrazen = room_speed/2; } obj_player kolizja z par_enity który dziedziczy z par_enemy ///poziom trudnosci i obeazenia jakie zadaje Wrog bohaterowi na danym poziomie trudnosci if(global.difficulty == "easy") if global.zegarObrazen<0 { global.hp-=17 global.zegarObrazen=room_speed*2 } if(global.difficulty == "medium") if global.zegarObrazen<0 { global.hp-=25 global.zegarObrazen=room_speed*2 } if(global.difficulty == "hard") if global.zegarObrazen<0 { global.hp-=34 global.zegarObrazen=room_speed*2 } obj_player Step global.zegarObrazen-=1 if global.zegarObrazen>0 || global.hit=1 image_alpha=0.7+lengthdir_x(0.3,current_time) else image_alpha=1; if (global.hp <= 0) { global.life-- instance_destroy(); instance_create(x,y,obj_player_ginie) with (instance_create(x,y,obj_entity_die)) { sprite_index = spr_player_die01; image_speed=(image_number/room_speed)/ 2//Czas zanim bohater sie odrodzi image_xscale = other.image_xscale; respawnObject = obj_player; respawnX = spawnX; respawnY = spawnY; physics = true; respawn = true; image_alpha=0 } audio_play_sound(dzwiek_anatol_ginie, 1, false); //odtwarzamy dzwiek gdy bohater ginie } No i to co wyżej obj_game_controler gdzie w stepie jest ten kod if (global.life > 0) { global.life -=1; } else { if (can_finish == false) { if (alarm[0] == -1) { // zacznij tylko gdy jeszcze się nie odlicza alarm[0] = 60; // 150 to 5 sekund } } else { if (global.pScore >= 500) //Sprawdz czy wynik nadaje sie do highscore,ale musi zostac spelniony warunek punktowy { var s=highscores[| ds_list_size(highscores) - 1]; //Czy punkty kwalifikuja sie na top 10 if (ds_list_size(highscores) < 10 || s[?"score"] <= global.pScore) { room_goto(rm_save_score); exit; // zakoncz wykonywanie eventu step w tej klatce } } room_goto(rm_game_over); } } teraz tak jak wspomniałeś..musiałbym to wrzucić,gdzieś do kolizji jakiegoś obiektu rodzica pod którym są podpięte obiekty dziedziczące jak wrogowie pułapki itp.
  12. Napisałeś żeby warunek dać przed highscore;-) jednak efekt ten sam ;-) gra się włącza zaczynam grać i za momencik wywala mnie do menu głównego;-) dziwna sytuacja global_game_controler step if (global.life > 0) { global.life -=1; } else { if (can_finish == false) { if (alarm[0] == -1) { // zacznij tylko gdy jeszcze się nie odlicza alarm[0] = 60; // 150 to 5 sekund } } else { if (global.pScore >= 500) //Sprawdz czy wynik nadaje sie do highscore,ale musi zostac spelniony warunek punktowy { var s=highscores[| ds_list_size(highscores) - 1]; //Czy punkty kwalifikuja sie na top 10 if (ds_list_size(highscores) < 10 || s[?"score"] <= global.pScore) { room_goto(rm_save_score); exit; // zakoncz wykonywanie eventu step w tej klatce } } room_goto(rm_game_over); } }
  13. No właśnie ten znak równości mnie trochw wybił:-) kurcze co robię nie tak: mam 0 żyć i mi odejmuje życia..nie działa to normalnie obj_game_controler step if (global.life > 0) { if (can_finish == false) { if (alarm[0] == -1) { // zacznij tylko gdy jeszcze się nie odlicza alarm[0] = 60; // 150 to 5 sekund } global.life -=1; } else { if (global.pScore >= 500) //Sprawdz czy wynik nadaje sie do highscore,ale musi zostac spelniony warunek punktowy { var s=highscores[| ds_list_size(highscores) - 1]; //Czy punkty kwalifikuja sie na top 10 if (ds_list_size(highscores) < 10 || s[?"score"] <= global.pScore) { room_goto(rm_save_score); exit; // zakoncz wykonywanie eventu step w tej klatce } } room_goto(rm_game_over); } }
  14. Pomniejszać o jedno życie..tak też robię ale jest błąd global_game_controler Step if (global.life > 0) { if global.life -=1;//tu jest blad if (can_finish == false) { if (alarm[0] == -1) { // zacznij tylko gdy jeszcze się nie odlicza alarm[0] = 150; // 5 sekund } } else { if (global.pScore >= 500) //Sprawdz czy wynik nadaje sie do highscore,ale musi zostac spelniony warunek punktowy { var s = highscores[ | ds_list_size(highscores) - 1]; //Czy punkty kwalifikuja sie na top 10 if (ds_list_size(highscores) < 10 || s[ ? "score"] <= global.pScore) { room_goto(rm_save_score); exit; // zakoncz wykonywanie eventu step w tej klatce } } room_goto(rm_game_over); } } Respawn mam tylko w tym miejscu obj_player Step //Bohater dostajac obrazenia to miga //miganie dodane specjalnie dla kuli kiedy wartosc zmiennej globalnej hit jest rowna 1 //Bohater miga otrzymujac obrazenia okreslone w pulapce kula oraz innych elementach zadajacych obrazenia global.zegarObrazen-=1 if global.zegarObrazen>0 || global.hit=1 image_alpha=0.7+lengthdir_x(0.3,current_time) else image_alpha=1; if (global.hp <= 0) { global.life-- instance_destroy(); instance_create(x,y,obj_player_ginie) with (instance_create(x,y,obj_entity_die)) { sprite_index = spr_player_die01; image_speed=(image_number/room_speed)/ 2//Czas zanim bohater sie odrodzi image_xscale = other.image_xscale; respawnObject = obj_player; respawnX = spawnX; respawnY = spawnY; physics = true; respawn = true; image_alpha=0 } audio_play_sound(dzwiek_anatol_ginie, 1, false); //odtwarzamy dzwiek gdy bohater ginie }
  15. Staram się go analizować...ale wolno Mi idzie.. if global,life > 0 powoduje,że gra się włącza a za chwile ze scenerii przenosi mnie do głównego menu.. obj_game_controler STEP if (global.life > 0) { if (can_finish == false) { if (alarm[0] == -1) { // zacznij tylko gdy jeszcze się nie odlicza alarm[0] = 150; // 5 sekund } } else { if (global.pScore >= 500) //Sprawdz czy wynik nadaje sie do highscore,ale musi zostac spelniony warunek punktowy { var s = highscores[ | ds_list_size(highscores) - 1]; //Czy punkty kwalifikuja sie na top 10 if (ds_list_size(highscores) < 10 || s[ ? "score"] <= global.pScore) { room_goto(rm_save_score); exit; // zakoncz wykonywanie eventu step w tej klatce } } room_goto(rm_game_over); } } obj_player step //Bohater dostajac obrazenia to miga //miganie dodane specjalnie dla kuli kiedy wartosc zmiennej globalnej hit jest rowna 1 //Bohater miga otrzymujac obrazenia okreslone w pulapce kula oraz innych elementach zadajacych obrazenia global.zegarObrazen-=1 if global.zegarObrazen>0 || global.hit=1 image_alpha=0.7+lengthdir_x(0.3,current_time) else image_alpha=1; if (global.hp <= 0) { global.life-- instance_destroy(); instance_create(x,y,obj_player_ginie) with (instance_create(x,y,obj_entity_die)) { sprite_index = spr_player_die01; image_speed=(image_number/room_speed)/ 2//Czas zanim bohater sie odrodzi image_xscale = other.image_xscale; respawnObject = obj_player; respawnX = spawnX; respawnY = spawnY; physics = true; respawn = true; image_alpha=0 } audio_play_sound(dzwiek_anatol_ginie, 1, false); //odtwarzamy dzwiek gdy bohater ginie }
  16. Tak gvX i gvY resetują się na 0. Dobrze..czyli game_end nie jest potrzebny... Wiem w czym jest problem Gnysku... Mój bohater załóżmy ma te 3 życia i po każdym życiu odradza się w pozycji początkowej mapy...Natomiast kiedy kończy się ostatnie życie to bohater zamiast zatrzymać się w miejscu w którym zginał,to znowu się odradza i zaraz następuje koniec gry..Przecież jak zginał,to nie powinien się odradzać. Teraz tak...respawn musiałby być na false rozumiem?po śmierci bohatera kiedy ilość żyć wynosi 0. wystarczy dodać kolejny alarm do obj_game_controler? który wyłączy odradzanie bohatera kiedy jego życia są na zero? obj_game_controler step if (global.life = 0) //czy tu nie powinien być albo warunek lub alarm ustawiony który sprawdzał by czy respawn jest wyłączony gracza??? { if (can_finish == false) { if (alarm[0] == -1) { // zacznij tylko gdy jeszcze się nie odlicza alarm[0] = 150; // 5 sekund } } else { if (global.pScore >= 500) //Sprawdz czy wynik nadaje sie do highscore,ale musi zostac spelniony warunek punktowy { var s = highscores[ | ds_list_size(highscores) - 1]; //Czy punkty kwalifikuja sie na top 10 if (ds_list_size(highscores) < 10 || s[ ? "score"] <= global.pScore) { room_goto(rm_save_score); exit; // zakoncz wykonywanie eventu step w tej klatce } } room_goto(rm_game_over); } }
  17. Czyli u mnie i tak zamyka się gra i nie potrzebne jest użycie game_end()? Flaga wszystko załatwia? Mój bohater jak traci życia wiadomo odradza się i wraca na początku scenerii..(użycie respawnX i respawnY) tak ma być,ale kiedy skończą mu się wszystkie życia to powinien w miejscu gdzie zginie zakończyć grę. ustawienia widoku mam tylko w dwóch obiektach które są cały czas na każdej planszy w grze obj_global_controller - ten sam obiekt End step ///Wyswietlanie widoku okna gry if (view_wport[0] != window_get_width() || view_hport[0] != window_get_height()) && window_get_width() != 0 { view_wport[0] = window_get_width(); view_hport[0] = window_get_height(); view_hview[0] = view_wview[0]/view_wport[0]*view_hport[0]; surface_resize(application_surface,view_wview[0],view_hview[0]); display_set_gui_size(view_wport[0],view_hport[0]); //wersja podstawowa } obj_game_controller End step ///Widok if view_wview[0] != gvW || view_hview[0] != gvH { var tempW, tempH; tempW = view_wview[0]; tempH = view_hview[0]; if gvW/view_wport[0] >= gvH/view_hport[0] { view_hview[0] = lerp(view_hview[0],gvH,.3); view_wview[0] = view_hview[0]/view_hport[0]*view_wport[0]; } else { view_wview[0] = lerp(view_wview[0],gvW,.3); view_hview[0] = view_wview[0]/view_wport[0]*view_hport[0]; } view_xview[0] -= (view_wview[0]-tempW)/2; view_yview[0] -= (view_hview[0]-tempH)/2; } if view_wview[0] > room_width { view_wview[0] = room_width; view_hview[0] = view_wview[0]/view_wport[0]*view_hport[0]; } if view_hview[0] > room_height { view_hview[0] = room_height; view_wview[0] = view_hview[0]/view_hport[0]*view_wport[0]; } if instance_exists(gvObj) { gvX = min(max(0,gvObj.x+gvOffX-view_wview[0]/2),room_width-view_wview[0]); gvY = min(max(0,gvObj.y+gvOffY-view_hview[0]/2),room_height-view_hview[0]); gvOffX = 0; gvOffY = 0; } view_xview[0] = round(min(max(0,lerp(view_xview[0],gvX,.15)),room_width-view_wview[0])); view_yview[0] = round(min(max(0,lerp(view_yview[0],gvY,.15)),room_height-view_hview[0])); gvW = gvWStart; gvH = gvHStart;
  18. Gnysku...działa! wielkie dzięki... Chociaż wygląda to tak,że gracz ginie...i wracam na początku mapy mija te 5 sekund i przechodzi do pokoju game over lub highscore. A można to ustawić że jak straci wszystkie życia i jest koniec gry,to nie przenosi się na początek planszy tylko zatrzymuje się ekran w miejscu,gdzie zginał? Mam jeszcze takie pytanie do Ciebie: Powiedz Mi..bo rozumiem,ze nie musi być game_end() w grze żeby zakończyć ją? za to użyłeś zmiennej can_finish? Mógłbyś mi w skrócie to wytłumaczyć;-)
  19. Nie działa dalej to samo..od razu przechodzi do pokoju game over lub jak zbiorę 500pkt to przechodzi do pokoju game over..kurcze co jest nie tak:/ Wildze w kodzie alarm 0=-1 skoro jest już ustawiony Gnysku jak mówisz dla każdego obiektu,to po co go tu umieszczać. obj_game_controller step ///kontroler odpowiedzialny za giniecie bohatera if (global.life = 0) { if (can_finish == false and alarm[0] == -1) { alarm[0] = 30; // 1 sekunda } else { if (global.pScore >= 500) //Sprawdz czy wynik nadaje sie do highscore,ale musi zostac spelniony warunek punktowy { var s=highscores[| ds_list_size(highscores) - 1]; //Czy punkty kwalifikuja sie na top 10 if(ds_list_size(highscores)< 10 || s[?"score"]<= global.pScore) { room_goto(rm_save_score); exit; // zakoncz wykonywanie eventu step w tej klatce } } room_goto(rm_game_over); } } obj_game_controller Alarm[0] ustawiony jako nowy event i w nim poniżej kod can_finish = true; obj_game_controller create can_finish = false;
  20. Simian miałem evencie tak ustawione...z tym Alarm 0 Tak alarm 0 od początku miał wartość -1 Nie wiem...to tak nie działa,ale pewnie coś zwaliłem game_end() przecież nie mogę dać na koniec kodu,bo wtedy nie wyświetli mi się tabela wyników. obj_game_controller step if (global.life=0) { game_end(); if(global.pScore >= 500) //Sprawdz czy wynik nadaje sie do highscore,ale musi zostac spelniony warunek punktowy { var s=highscores[|ds_list_size(highscores)-1]; //Czy punkty kwalifikuja sie na top 10 if(ds_list_size(highscores)<10 || s[?"score"]<=global.pScore) if (can_finish == false) { alarm[0] = 30; } else { room_goto( rm_save_score ); } else //jesli nie kwalifikuje sie na top 10 { room_goto( rm_game_over ); } } else //jesli nie kwalifikuje sie do highscore { room_goto( rm_game_over ); } } // w alarm 0 can_finish = true; create can_finish = false;
  21. Gnysku, Bo usunąłem Alarm skoro nie działało to rozwiązanie,a miałem tak jak wyżej czyli; obj_game_controller STEP ///kontroler odpowiedzialny za giniecie bohatera if (global.life==0 and alarm[0] = -1) // wlacz kontroler gdy alarm[0] wylaczy sie (przedtem nastaw go, na odliczanie) { game_end(); if(global.pScore >= 500) //Sprawdz czy wynik nadaje sie do highscore { var s=highscores[|ds_list_size(highscores)-1]; //Czy punkty kwalifikuja sie na top 10 if(ds_list_size(highscores)<10 || s[?"score"]<=global.pScore) { room_goto( rm_save_score ); } else //jesli nie kwalifikuje sie na top 10 { room_goto( rm_game_over ); } } else //jesli nie kwalifikuje sie do highscore { room_goto( rm_game_over ); } obj_game_controller CREATE alarm[0] = -1; obj_player_ginie CREATE obj_game_controller.alarm[0] = 3*room_speed;
  22. Przejrzałem...nie mam nigdzie zdublowanego kodu w innym obiekcie od Highscore tylko w global_game_controller w Stepie mam nigdzie więcej ///kontroler odpowiedzialny za giniecie bohatera if (global.life=0) { game_end(); if(global.pScore >= 500) //Sprawdz czy wynik nadaje sie do highscore,ale musi zostac spelniony warunek punktowy { var s=highscores[|ds_list_size(highscores)-1]; //Czy punkty kwalifikuja sie na top 10 if(ds_list_size(highscores)<10 || s[?"score"]<=global.pScore) { room_goto( rm_save_score ); } else //jesli nie kwalifikuje sie na top 10 { room_goto( rm_game_over ); } } else //jesli nie kwalifikuje sie do highscore { room_goto( rm_game_over ); } } ///monety zebranie 100sztuk doda 1 zycie bohaterowi,oraz zerowanie monet if (global.coins=100) { global.coins=0; global.life+=1; } // if (global.coins>100) { global.coins=0; global.life+=1; audio_play_sound(dzwiek_anatol_zbiera_przedmiot, 1, false); //odtwarzamy dzwiek po zdobyciu zycia }
  23. Próbowałem też to w klockach zrobić alarm i nic.. Albo jest jak jest mimo zastosowania alarmu bohater ginie i od razu pokazuje sie albo plansza highscore albo plansza game over.. Nie wiem w czym jest problem..przecież obiekt jest aktywny na mapie kurcze... Próbowałem to samo zrobić w stepie bohatera i efekt ten sam... Prosta wydawałaby się rzecz,a jednak nie do końca..
  24. Tak jest umieszczony zawsze na scenerii...nie mam żadnych alarmów w tym obiekcie.. Kurcze nadal nie działa..co prawda nie ma teraz żadnych błędów,ale dalej jest,że od razu przechodzi Mi do planszy highscore lub game over..kurcze co jest nie tak:/ Obj_game_controller CREATE czas = 3*room_speed; //mnożenie wartości przez room_speed ///Ustawienia globalne image_speed = 0; global.editPlayerSlot = -1; zebraniu ich odpowiedniej ilosci // zmienne ponizej sa dodane do creation code pokojow global.pScore = 0; global.coins = 0; global.Saved = true; globalvar spawnX, spawnY; global.Zabitych[0]=0; //Pierwszy typ npc global.Zabitych[1]=0; //Drugi typ npc global.Zabitych[2]=0; //Trzeci typ npc global.Zabitych[3]=0; //Czwarty typ npc ///Widok globalvar gvX, gvY, gvW, gvH, gvObj, gvOffX, gvOffY; gvX = view_xview[0]; gvY = view_yview[0]; gvW = view_wview[0]; gvH = view_hview[0]; gvObj = view_object[0]; gvOffX = 0; gvOffY = 0; ///HUD hpHUD = 0; maxHpHUD = 0; /// Wyszukaj poziom trudności i ustaw odpowiednio życie i szanse //easy difficult if global.difficulty = "easy" { global.hp = 100; global.life = 7; } //medium difficult if global.difficulty = "medium" { global.hp = 100; global.life = 5; } //hard difficult if global.difficulty = "hard" { global.hp = 100; global.life = 3; } Obj_game_controller STEP ///kontroler odpowiedzialny za giniecie bohatera if (global.life==0 and czas==0) { game_end(); if(global.pScore >= 500) //Sprawdz czy wynik nadaje sie do highscore,ale musi zostac spelniony warunek punktowy { var s=highscores[|ds_list_size(highscores)-1]; //Czy punkty kwalifikuja sie na top 10 if(ds_list_size(highscores)<10 || s[?"score"]<=global.pScore) { room_goto( rm_save_score ); } else //jesli nie kwalifikuje sie na top 10 { room_goto( rm_game_over ); } } else //jesli nie kwalifikuje sie do highscore { room_goto( rm_game_over ); } } czas = max(0, czas-1); //odliczaj do zera obj_player CREATE /// Glowne deklaracje zmiennych Bohatera ////////////////////////////// ///////ZMIENNE STALE////////// ///////////////////////////// ///Ustawienia event_inherited(); zbieranie=true; eksplozja = false; zasiegEksplozji = 22; silaEksplozji = 10; //czas = 3*room_speed; //mnożenie wartości przez room_speed daje Ci sekundy global.damage=0; //zmienna odzpowiedzialna za obrazenia zadawane po upadku z duzej wysokosci global.hp = 100; global.hit=0; //zmienna odpowiada za obrazenia kuli i miganie maxHp = 100; zegarAtaku = 0; odejmij = 0; //zmienna potrzebna do przesuwanie skrzynki w end step atakBierzacy = 0; global.zegarObrazen = 0; kierunekPlywania = 0; wysKierunek = 0; silaSkoku = 0; czasSkoku = 0; drabina = false; rs_timer = 0; //licznik czasowy w grze tlen=10;//ilosc tlenu //Moce specjalne pwrupSpd = 0; pwrupStr = 0; pwrupJmp = 0; //Pozycja odrodzenia Anatola i wywolanie skryptu widoku centralnego na graczu spawnX = x; spawnY = y; centerViewOnMe(); //zachowanie pozycji gracza przy checkpointach if (global.checkpointR == room) { x = global.checkpointx; y = global.checkpointy; } start_x = x; start_y = y; //funkcja dodaje HUD gracza na planszach bossowych if instance_exists(obj_game_controller) obj_game_controller.visible=1 else instance_create(0,0,obj_game_controller); //zamrazanie bohatera zamroz = false; zamroz_x = x; zamroz_y = y; playerSlot = 1; //ustalamy slot dla gracza numer 1 kierunekPlywaniaGamepad = 0; obj_player STEP ///Zycia i dopalacze dodatkowo zabieranie zyc za upadek z bardzo duzej wysokosci //Bohater dostajac obrazenia to miga //miganie dodane specjalnie dla kuli kiedy wartosc zmiennej globalnej hit jest rowna 1 //Bohater miga otrzymujac obrazenia okreslone w pulapce kula oraz innych elementach zadajacych obrazenia global.zegarObrazen-=1 if global.zegarObrazen>0 || global.hit=1 image_alpha=0.7+lengthdir_x(0.3,current_time) else image_alpha=1; if (global.hp <= 0) { global.life-- instance_destroy(); instance_create(x,y,obj_player_ginie) with (instance_create(x,y,obj_entity_die)) { sprite_index = spr_player_die01; image_speed=(image_number/room_speed)/ 2//Czas zanim bohater sie odrodzi image_xscale = other.image_xscale; respawnObject = obj_player; respawnX = spawnX; respawnY = spawnY; physics = true; respawn = true; image_alpha=0 } audio_play_sound(dzwiek_anatol_ginie, 1, false); //odtwarzamy dzwiek gdy bohater ginie } //Dopalacze if pwrupSpd > 0 { //Efekty if pwrupSpd mod 2 == 0 { if image_xscale > 0 { part_type_orientation(pArrow,0,0,0,0,0); part_type_direction(pArrow,0,0,0,0); } else { part_type_orientation(pArrow,180,180,0,0,0); part_type_direction(pArrow,180,180,0,0); } part_type_colour1(pArrow,c_lime); part_particles_create(partSystem,x-image_xscale*16,y-irandom(70),pArrow,1); } //Odliczanie do konca mocy specjalnej pwrupSpd -= 1; } if pwrupStr > 0 { //Efekty image_blend = merge_colour(image_blend,c_red,0.11); //Odliczanie pwrupStr -= 1; } if pwrupJmp > 0 { //Efekty if pwrupJmp mod 2 == 0 { part_type_orientation(pArrow,90,90,0,0,0); part_type_direction(pArrow,90,90,0,0); part_type_colour1(pArrow,c_yellow); part_particles_create(partSystem,x-16+irandom(32),y,pArrow,1); } //Odliczanie pwrupJmp -= 1; } obj_player_ginie CREATE vspeed = -10 gravity = 0.5
  25. Simianie ten twój sposób na wydłużenie tzw pauzy za nim pojawi się pokój highscore lub game over nie działa.. Próbowałem też zrobić tak jak niżej,ale to samo się dzieje co u Ciebie.. jest objaw,że życia się kończą i gra się nie kończy;-)tylko pokazuje przy ilości żyć x-1 itd.. obj_game_controller Create czas=0; step ///kontroler odpowiedzialny za giniecie bohatera if (global.life==0 and czas>=2*10) { game_end(); if(global.pScore >= 500) //Sprawdz czy wynik nadaje sie do highscore,ale musi zostac spelniony warunek punktowy { var s=highscores[|ds_list_size(highscores)-1]; //Czy punkty kwalifikuja sie na top 10 if(ds_list_size(highscores)<10 || s[?"score"]<=global.pScore) { room_goto( rm_save_score ); } else //jesli nie kwalifikuje sie na top 10 { room_goto( rm_game_over ); } } else //jesli nie kwalifikuje sie do highscore { room_goto( rm_game_over ); } }
×
×
  • Dodaj nową pozycję...