pankracy Opublikowano 15 Czerwca 2019 Udostępnij Opublikowano 15 Czerwca 2019 Cześć wszystkim, Mam taki nietypowy problem. Otóż..w momencie,kiedy mój bohater ginie i kończy się gra następuje zapis do tabeli wyników(gra sprawdza czy wynik nadaje się do top 10),ale dziwnie to wygląda,bo gra się kończy bohater ginie i od razu następuje zapis do tabeli wyników. Jest to za szybko..chciałbym to wydłużyć chociaż o 2-3 sekundy. Czyli bohater ginie kończy się gra...mijają 2 sekundy i pojawia się tabela wyników.. podejrzewam,że tu trzeba chyba użyć room_speed ale już mi się pierdzieli. I jeszcze jedna sprawa jak zrobić żeby był spełniony taki warunek,że musi być zebrane 5000 score żeby nastąpił zapis i od tego liczone top 10 wyników,bo teraz co chwile mi zapisuje wyniki top 10 bez względu ile mam zebranych punktów...niech jest jakaś minimalna granica obj_game_controller step ///kontroler odpowiedzialny za giniecie bohatera if (global.life=0) { game_end(); 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 { room_goto( rm_game_over ); } } 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)/ 3//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 } Z góry dziękuje za pomoc;-) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 16 Czerwca 2019 Udostępnij Opublikowano 16 Czerwca 2019 No na te dwa problemy są bardzo proste rady. 1. Żeby od razu nie przechodził do tablicy wyników, stwórz alarm 2-3 sekundowy, który będzie robił za pause. "If (global.life == 0 and alarm[0] = -1) {//kod}". Przed tym sprawdzeniem musisz dać gdzieś alarm[0] = 3*room_speed. 2. A tutaj sam sobie odpowiedziałeś w pytaniu. Skoro ma być spełniony warunek, że od 5000 scoruf ma się dodawać wynik, no to daj ten warunek gdzieś. Warunki to if'y. If(score >= 5000) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 16 Czerwca 2019 Autor Udostępnij Opublikowano 16 Czerwca 2019 W drugim przypadku zrobiłem tak dałem warunek przed przejściem do pokoju highscore,ale raz to działa lub wywala mnie całkiem z gry(zbiorę 5000pkt i następuje zapis wyniku lub nie zbiorę tych punktów i pojawia się plansza game over) Miało to być tak,że wyniki do top 10 mają zaczynać się od 5000 punktów obj_game_controller step ///kontroler odpowiedzialny za giniecie bohatera if (global.life=0) { game_end(); 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(global.pScore >= 5000) room_goto( rm_save_score ); } else { room_goto( rm_game_over ); } } Jeśli chodzi o pierwszy przypadek odnośnie tzw pauzy na 2-3 sekundy za nim przejdzie do pokoju highscore i pokoju game over to alarm[0] = 3*room_speed. mam dać w Create? czy w stepie? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 16 Czerwca 2019 Udostępnij Opublikowano 16 Czerwca 2019 Raczej coś takiego:obj_player_ginie Create: obj_game_controller.alarm[0] = 3*room_speed; //Nastaw alarm dla obj_game_controllerobj_game_controller Create: alarm[0] = -1; Alarm[0]: //Jestem komentarzem w kodzie, aby alarm zostal aktywny 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 >= 5000) //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 ); } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 16 Czerwca 2019 Autor Udostępnij Opublikowano 16 Czerwca 2019 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 ); } } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 16 Czerwca 2019 Udostępnij Opublikowano 16 Czerwca 2019 Może źle użyłeś alarmu, albo nadpisałeś jakiś. Jak chcesz zrobić po swojemu, czyli zmiennymi, to zrób tak: Create: czas = 3*room_speed; //mnożenie wartości przez room_speed daje Ci sekundy 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 I rozumiem, że obj_game_controller jest cały czas aktywny, tak? no, bo jeśli nie, to odliczanie też nie jest aktywne, wtedy musisz to zrobić w innym, aktywnym obiekcie Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 16 Czerwca 2019 Autor Udostępnij Opublikowano 16 Czerwca 2019 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 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 17 Czerwca 2019 Autor Udostępnij Opublikowano 17 Czerwca 2019 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.. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 17 Czerwca 2019 Administratorzy Udostępnij Opublikowano 17 Czerwca 2019 Pewnie nadal nie wywaliłeś kodu od highscore z innego obiektu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 17 Czerwca 2019 Autor Udostępnij Opublikowano 17 Czerwca 2019 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 } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 17 Czerwca 2019 Administratorzy Udostępnij Opublikowano 17 Czerwca 2019 No to ja tu nie widzę alarmu nigdzie. W stepie, czyli kod co klatkę obrazu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 17 Czerwca 2019 Autor Udostępnij Opublikowano 17 Czerwca 2019 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; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 17 Czerwca 2019 Udostępnij Opublikowano 17 Czerwca 2019 A w obj_game_controller dodałeś alarm[0] jako event? Bo inaczej (przynajmniej kiedyś tak było) alarm[0] jest nieaktywny. Musisz dać alarm[0] jako event, a w nim jakąś akcję np. skrypt w którym jest zamieszczona jakakolwiek linijka kodu, może być sam komentarz "//cześć jestem komentarzem i podtrzymuje alarm[0] przy życiu" Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 17 Czerwca 2019 Administratorzy Udostępnij Opublikowano 17 Czerwca 2019 Zanim pierwszy raz ustawisz alarm[0], to on ma już wartość -1 od początku gry, pewnie dlatego ? Zrób inaczej: // create can_finish = false; // gdzies tam gdzie konczy sie gra i ma poczekać if (<nie zyje>) { if (can_finish == false) { alarm[0] = 30; } else { room_goto(<higscore>); } } // w alarm 0 can_finish = true; Poza tym, game_end(); kończy grę, więc cały kod dalej się nie wykona. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 17 Czerwca 2019 Autor Udostępnij Opublikowano 17 Czerwca 2019 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; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 17 Czerwca 2019 Administratorzy Udostępnij Opublikowano 17 Czerwca 2019 Nie musisz ustawiać alarmu na -1, on jest tak ustawiony przez GameMakera dla każdego obiektu. I żadnego game_end() gdziekolwiek bo to wyłącza całkiem grę. //create can_finish = false; // w alarm 0 can_finish = true; // step 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); } } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 17 Czerwca 2019 Autor Udostępnij Opublikowano 17 Czerwca 2019 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; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 17 Czerwca 2019 Administratorzy Udostępnij Opublikowano 17 Czerwca 2019 To jest porównanie. Ale widzę mój błąd. Połączyłem dwa ify w jeden, a powinienem mieć dwa. //create can_finish = false; // w alarm 0 can_finish = true; // 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); } } i żeby było widać, dałem teraz 5 sekund, bo 1 to może być za krótko Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 17 Czerwca 2019 Autor Udostępnij Opublikowano 17 Czerwca 2019 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ć;-) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 17 Czerwca 2019 Administratorzy Udostępnij Opublikowano 17 Czerwca 2019 game_end() zamyka program. Jeśli miałeś to w pierwszej linijce tego kodu, to automatycznie po śmierci zamykała się gra na koniec obecnego stepu. Co do przesuwania sie view - nie wiem jaki masz od tego kod. Jeśli masz śledzenie obiektu i po śmierci ekran się przesuwa (nie skacze), to bym winił... drugą instancję tego samego obiektu. can_finish jest po prostu flagą, czy coś już zostało zrobione czy nie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 17 Czerwca 2019 Autor Udostępnij Opublikowano 17 Czerwca 2019 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; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 17 Czerwca 2019 Administratorzy Udostępnij Opublikowano 17 Czerwca 2019 Nic z tego wyżej nie rozumiem. Strzelam jedynie, że gvX i gvY się resetują na 0. Co do flagi - ona nie ma nic wspólnego z game_end(). Game End robi to samo co Alt+F4, albo zakończenie procesu w menedżerze zadań. Ja zrobiłem flagę, dzięki której albo ma się 1 raz włączyć alarm, jeśli jeszcze nie leciał, albo - jeśli już się zakończył o czym mówi właśnie ta flaga - wykonał kod przejścia do następnego roomu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 17 Czerwca 2019 Autor Udostępnij Opublikowano 17 Czerwca 2019 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); } } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 17 Czerwca 2019 Administratorzy Udostępnij Opublikowano 17 Czerwca 2019 w respawnie daj if global.life > 0 i po sprawie. Mam wrażenie, że nie rozumiesz co robi Twój kod. Po co jakieś alarmy do respawnów, skoro to jest zmienna true/false jak mniemam ? umierasz to umierasz, wyłączasz mozliwosc respawna od razu. Możesz nawet tam, gdzie global.life pomniejszasz o 1. Konrad-GM 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 17 Czerwca 2019 Autor Udostępnij Opublikowano 17 Czerwca 2019 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 } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 18 Czerwca 2019 Autor Udostępnij Opublikowano 18 Czerwca 2019 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 } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 18 Czerwca 2019 Administratorzy Udostępnij Opublikowano 18 Czerwca 2019 Właśnie sie zastanawiałem, dlaczego tam jest >0 ale myślałem, ze tak sobie wymyśliłeś, że 0 = żyje, 1 = nie zyje. Ale ok, w takim razie: if (global.life > 0) { global.life -=1; } else { /// kod od highscore } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 18 Czerwca 2019 Autor Udostępnij Opublikowano 18 Czerwca 2019 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); } } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 18 Czerwca 2019 Administratorzy Udostępnij Opublikowano 18 Czerwca 2019 A co ja napisałem wyżej ? 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); } } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 18 Czerwca 2019 Autor Udostępnij Opublikowano 18 Czerwca 2019 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); } } 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ę