pankracy Opublikowano 4 Czerwca 2019 Udostępnij Opublikowano 4 Czerwca 2019 Cześć wszystkim, Zastanawiam się nad stworzeniem poziomu trudności czyli: - łatwy - normalny - trudny jak to najlepiej zrobić? użyć zmiennej globalnej? generalnie chciałbym żeby wyglądało to tak: uruchamiam grę pojawia się plansza osobnego roomu z wyborem trudności w tym przypadku trzy stopnie trudności łatwy z większa ilością żyć np 5 żyć z pełną energią i bardziej flegmatycznymi to ujmę pułapkami i wrogami;-) dostaje dużo broni w tym przypadku amunicji np 30 Normalny czyli poziom ten co jest obecnie w grze;-) bez zmian Trudny ten poziom z połową energii lub 3/4 energii 3 życiami wrogowie są szybsi i dostaje też mniej broni amunicji 10 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 4 Czerwca 2019 Udostępnij Opublikowano 4 Czerwca 2019 Zapewne jest mnóstwo sposobów aby to zrobić. Niemniej jednak, użycie globalnej zmiennej według mnie, będzie dla Ciebie najłatwiejszym (ale możliwe, że najbardziej pracochłonnym) sposobem. Przy każdej akcji, która ma kilka wariantów (łatwy, średni, wysoki - poziom), daj if'a, który będzie odpowiedzialny, jaka wariacja się wykona, np. [Object Enemy1] ///Create /// ------------------------------------------------------------------------ SPOSOB 1 //Deafult values //Zabezpieczenie, na wypadek gdyby zaden wariant sie nie wykonal, to wtedy mob dostanie ponizsze wartosci max_hp = 100; attack_damage = 5; movement_speed = 3; //Gdy poziom bedzie ustawiony na latwy if(global.difficult == "easy") { max_hp = 80; attack_damage = 3; movement_speed = 2; } //Gdy poziom bedzie ustawiony na sredni if(global.difficult == "medium") { max_hp = 100; attack_damage = 5; movement_speed = 3; } //Gdy poziom bedzie ustawiony na trudny if(global.difficult == "hard") { max_hp = 120; attack_damage = 7; movement_speed = 4; } /// ------------------------------------------------------------------------ SPOSOB 2 //Albo mozesz to zrobic na switch'u, wtedy bedzie bardziel klarownie switch(global.difficult) { case "easy": max_hp = 80; attack_damage = 3; movement_speed = 2; break; case "medium": max_hp = 100; attack_damage = 5; movement_speed = 3; break; case "hard": max_hp = 120; attack_damage = 7; movement_speed = 4; break; deafult: max_hp = 100; attack_damage = 5; movement_speed = 3; break; } Pewnie bardziej doświadczeni, będą mieli inne sposoby Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 4 Czerwca 2019 Administratorzy Udostępnij Opublikowano 4 Czerwca 2019 Zamiast stringów lepiej używać constantow/macro, kompiler wykryje błędy i podpowiadanie składni zadziała Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 4 Czerwca 2019 Udostępnij Opublikowano 4 Czerwca 2019 Globalna zmienna, tak jak to opisuje @SimianVirus7, jest jak najbardziej spoko opcją, ale dodatkowo zrobiłbym to jak @gnysek proponuje, wystarczy dodać stałe do projektu difficult_easy, difficult_medium i difficult_hard. Ale zrezygnowałbym ze switchy, są mega brzydkie Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 5 Czerwca 2019 Autor Udostępnij Opublikowano 5 Czerwca 2019 Dzięki Chłopaki;-) będę operował na globalnej zmiennej:-) I teraz tak: Mam menu gry zbudowane w taki sposób jak poniżej: Teraz chciałbym po wybraniu New Game przejść do pokoju z wyborem trudności poziomu ok to oczywiste,ale czy mam w tym pokoju użyć funkcji ds_list_create? Jak to ma wyglądać? Przechodzę z New Game do pokoju,gdzie wybieram poziom trudności następnie po wybraniu pokoju trudności przechodzę już do samej gry. Teraz tak ten kod wyżej powinien znajdować się we wrogu? czy może on być jako odrębny obiekt umieszczony na mapie gry? Obj_menu CREATE options=ds_list_create() options[|0]=gmt("New game") options[|1]=gmt("Load game") options[|2]=gmt("Highscore") options[|3]=gmt("Options") options[|4]=gmt("Credits") options[|5]=gmt("Exit") selected=0 gp_up=false gup_down=false gp_left=false gp_right=false //Używane do animacji menu animation_speed=room_speed/4 for(var i=0; i<ds_list_size(options); i++) { animation[i]=0 } STEP if(abs(gamepad_axis_value(0,gp_axislv))<0.3 && !keyboard_check(vk_anykey)) { gp_up=0 gp_down=0 } if(abs(gamepad_axis_value(0,gp_axislh))<0.3 && !keyboard_check(vk_anykey)) { gp_left=0 gp_right=0 } if(keyboard_check_pressed(vk_down) || gamepad_button_check_pressed(0,gp_padd) || (gamepad_axis_value(0,gp_axislv)>0.7 && !gp_up)) { selected++ if(selected>=ds_list_size(options)) { selected=ds_list_size(options)-1 } gp_up=true } if(keyboard_check_pressed(vk_up) || gamepad_button_check_pressed(0,gp_padu) || (gamepad_axis_value(0,gp_axislv)<-0.7 && !gp_down)) { selected-- if(selected<0) { selected=0 } gp_down=true } if(keyboard_check_pressed(vk_enter) || gamepad_button_check_pressed(0,gp_face1)) { if(selected=0) { room_goto(inicjacja) } 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.");//tu daj po angielsku info,że nie znaleziono 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() } } DRAW draw_set_valign(1) draw_set_halign(1) draw_set_font(fontIntro) var line_height=ceil(string_height("M")*1.1) for(var i=0; i<ds_list_size(options); i++) { if(i=selected) { //Wybrana opcja animation[i]=clamp(animation[i]+(1/animation_speed),0,1) } else { animation[i]=clamp(animation[i]-(1/animation_speed),0,1) } var color=merge_colour(c_black,c_red,animation[i]) draw_text_transformed_color(x,y+(line_height*i),options[|i],1+animation[i]/5,1+animation[i]/5,0,color,color,color,color,1) } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 6 Czerwca 2019 Autor Udostępnij Opublikowano 6 Czerwca 2019 ;-) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 6 Czerwca 2019 Administratorzy Udostępnij Opublikowano 6 Czerwca 2019 Kod powinien znajdować sie tam, gdzie go potrzebujesz. Nie wiem jak tworzysz przeciwników, czy stawiasz ich w roomie, czy tworzy ich jakiś obiekt-nadzorca. Musisz sobie sam odpowiedzieć na swoje pytanie bo to Ty wiesz jak robisz grę i co w niej jest, my nie będziemy zgadywać, a ściany kodu nie pomagają. Trzeba zawsze minimalizować problem, a nie po prostu wklejać kod który nic nie mówi, albo nie jest potrzebny. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 6 Czerwca 2019 Autor Udostępnij Opublikowano 6 Czerwca 2019 Przeciwników stawiam w danym roomie..scenerii. Właśnie kod potrzebuje żeby był jako odrębny obiekt umieszczony na mapie tam gdzie są wrogowie.. Stąd też moje pytanie było zadane w taki sposób;-) Jasne bez sensu jest wklejać kod który nic nie mówi zgadzam się z tą tezą... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 6 Czerwca 2019 Autor Udostępnij Opublikowano 6 Czerwca 2019 Coś mnie olśniło... w roomie osobnym,gdzie ustawie wybór poziomu trudności za nim rozpocznę grę mogę użyć taki kod;: korzystając z tablicy ds_list_create() „global.difficulty = 0” dla easy, „global.difficulty = 1” dla medium „global.difficulty = 2” dla hard. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 6 Czerwca 2019 Administratorzy Udostępnij Opublikowano 6 Czerwca 2019 ds_list to nie tablica i nie kasuje sie automatycznie, więc memory leak jak nic. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 6 Czerwca 2019 Autor Udostępnij Opublikowano 6 Czerwca 2019 Kurcze...fakt... Dobra jak to najprościej zrobić..tworze pokój a w nim obiekt np o nazwie obj_poziomtrudnosci i teraz tak... po wyborze z listy poziomu trudności,czy to easy,normal lub hard uruchomi się gra na danym poziomie.. ja myślę żeby użyć tych zmiennych globalnych „global.difficulty = 0” dla easy, „global.difficulty = 1” dla medium „global.difficulty = 2” dla hard. Tylko teraz patrze funkcji ds_list_create() nie można użyć... Co mam użyć żeby stworzyć menu poziomu trudności(nie mylić ze zwykłym menu) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 6 Czerwca 2019 Udostępnij Opublikowano 6 Czerwca 2019 w obj_poziomtrudnosci w nowym roomie (nie rób w tym samym pokoju, gdzie masz obj_menu, czy cokolwiek co Ci rysuje menu) ///Create (nie mam pojęcia co robi gmt, jak nie zadziała, to spróbuj usunąć ten wyraz sprzed nawiasu) options_difficulty=ds_list_create() options_difficulty[|0]=gmt("Łatwy") options_difficulty[|1]=gmt("Normalny") options_difficulty[|2]=gmt("Wysoki") selected=0 gp_up=false gup_down=false gp_left=false gp_right=false //Używane do animacji menu animation_speed=room_speed/4 for(var i=0; i<ds_list_size(options_difficulty); i++) { animation[i]=0 } ///Step if(abs(gamepad_axis_value(0,gp_axislv))<0.3 && !keyboard_check(vk_anykey)) { gp_up=0 gp_down=0 } if(abs(gamepad_axis_value(0,gp_axislh))<0.3 && !keyboard_check(vk_anykey)) { gp_left=0 gp_right=0 } if(keyboard_check_pressed(vk_down) || gamepad_button_check_pressed(0,gp_padd) || (gamepad_axis_value(0,gp_axislv)>0.7 && !gp_up)) { selected++ if(selected>=ds_list_size(options_difficulty)) { selected=ds_list_size(options_difficulty)-1 } gp_up=true } if(keyboard_check_pressed(vk_up) || gamepad_button_check_pressed(0,gp_padu) || (gamepad_axis_value(0,gp_axislv)<-0.7 && !gp_down)) { selected-- if(selected<0) { selected=0 } gp_down=true } if(keyboard_check_pressed(vk_enter) || gamepad_button_check_pressed(0,gp_face1)) { if(selected == 0) then global.difficulty = 0; //ustaw latwy if(selected == 1) then global.difficulty = 1; //ustaw sredni if(selected == 2) then global.difficulty = 2; //ustaw trudny } ///Draw draw_set_valign(1) draw_set_halign(1) draw_set_font(fontIntro) var line_height=ceil(string_height("M")*1.1) for(var i=0; i<ds_list_size(options_difficulty); i++) { if(i=selected) { //Wybrana opcja animation[i]=clamp(animation[i]+(1/animation_speed),0,1) } else { animation[i]=clamp(animation[i]-(1/animation_speed),0,1) } var color=merge_colour(c_black,c_red,animation[i]) draw_text_transformed_color(x,y+(line_height*i),options_difficulty[|i],1+animation[i]/5,1+animation[i]/5,0,color,color,color,color,1) } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 6 Czerwca 2019 Autor Udostępnij Opublikowano 6 Czerwca 2019 dzięki SimianVirus7;-) gmt-to jest akurat funkcja ktora odwołuje się do skryptu odpowiedzialnego za tłumaczenia.Akurat nie ma problemu,bo do słownika dodałem tłumaczenie;-) Jednak dalej coś robię nie tak: wrzuciłem kod do create bohatera... założenia sa na razie takie(potem dodam więcej założeń) gracz wybierając poziom easy(łatwy) dostaje żyć 7 i energie ma 100% na poziomie normalnym ma energii też 100% ale żyć już 5 oraz poziom trudy hard energia 50% żyć 3 używam zmiennych globalnych global.live = 5; global.hp = 100; i wygląda to tak: obj_bohater Create /// Glowne deklaracje zmiennych Anatola ////////////////////////////// ///////ZMIENNE STALE////////// ///////////////////////////// ///Ustawienia event_inherited(); zbieranie=true; eksplozja = false; zasiegEksplozji = 22; silaEksplozji = 10; global.damage=0; //zmiena 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; ///poziomy trudnosci global.difficulty = 0; //ustaw latwy global.difficulty = 1; //ustaw sredni global.difficulty = 2; //ustaw trudny //easy difficult if(global.difficulty == "easy") { global.hp = 100; global.live = 7; } //medium difficult if(global.difficulty == "medium") { global.hp = 80; global.live = 5; } //hard difficult if(global.difficulty == "hard") { global.hp = 50; global.live = 3; } teraz obj_poziomy ( on jest w odrębnym pokoju) CREATE options_difficulty=ds_list_create() options_difficulty[|0]=("Easy") options_difficulty[|1]=("Medium") options_difficulty[|2]=("hard") selected=0 gp_up=false gup_down=false gp_left=false gp_right=false //Używane do animacji menu animation_speed=room_speed/4 for(var i=0; i<ds_list_size(options_difficulty); i++) { animation[i]=0 } STEP if(abs(gamepad_axis_value(0,gp_axislv))<0.3 && !keyboard_check(vk_anykey)) { gp_up=0 gp_down=0 } if(abs(gamepad_axis_value(0,gp_axislh))<0.3 && !keyboard_check(vk_anykey)) { gp_left=0 gp_right=0 } if(keyboard_check_pressed(vk_down) || gamepad_button_check_pressed(0,gp_padd) || (gamepad_axis_value(0,gp_axislv)>0.7 && !gp_up)) { selected++ if(selected>=ds_list_size(options_difficulty)) { selected=ds_list_size(options_difficulty)-1 } gp_up=true } if(keyboard_check_pressed(vk_up) || gamepad_button_check_pressed(0,gp_padu) || (gamepad_axis_value(0,gp_axislv)<-0.7 && !gp_down)) { selected-- if(selected<0) { selected=0 } gp_down=true } if(keyboard_check_pressed(vk_enter) || gamepad_button_check_pressed(0,gp_face1)) { if(selected == 0) then global.difficulty = 0; //ustaw latwy room_goto(inicjacja) if(selected == 1) then global.difficulty = 1; //ustaw sredni room_goto(inicjacja) if(selected == 2) then global.difficulty = 2; //ustaw trudny room_goto(inicjacja) } DRAW draw_set_valign(1) draw_set_halign(1) draw_set_font(fontIntro) var line_height=ceil(string_height("M")*1.1) for(var i=0; i<ds_list_size(options_difficulty); i++) { if(i=selected) { //Wybrana opcja animation[i]=clamp(animation[i]+(1/animation_speed),0,1) } else { animation[i]=clamp(animation[i]-(1/animation_speed),0,1) } var color=merge_colour(c_black,c_red,animation[i]) draw_text_transformed_color(x,y+(line_height*i),options_difficulty[|i],1+animation[i]/5,1+animation[i]/5,0,color,color,color,color,1) } Gra się uruchamia wybieram poziom łatwy normalny i trudny i nadal jest jak było..jakikolwiek poziom bym wybrał to mam pełną energię i tyle żyć ile miałem cały czas na początku gry. Coś źle robię chłopaki.. A może też zamiast wrzucać ten kod do bohatera to stworzyć odrębny obiekt nazwać go np obiekt_poziomytrudnosci i w nim wrzucić kod z bohatera i od razu kod z wrogów? no sam nie wiem z tym pomyślę..tylko teraz mam problem,że to nie działa. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 6 Czerwca 2019 Udostępnij Opublikowano 6 Czerwca 2019 O Matko Boska Elektryczna, coś Ty za młyn tam narobił. Wybieranie Ci nic nie da, skoro za każdym tworzeniem bohatera, ustawiasz global.difficulty = 2; W obiekcie bohatera, masz mieć skrypty tylko z kodem, który sprawdza jaki jest poziom trudności. Do tego w większości używasz if'a. Żadnych global.difficulty = cokolwiek! Przed rozpoczęciem gry (a przynajmniej tak mi się wydaje, że taki masz zamiar) gracz ma określić jaki ma być poziom trudności, a później dopiero ma się zacząć gra. Czyli:Menu gry -> wybierane trudności -> rozgrywka (pojawienie się bohatera) Ten cały kod który Ci napisałem (a raczej przerobiłem twój), masz dać do innego obiektu, choćby obiekt_poziomytrudnosci. Pamiętaj, że kod wybierania trudności gry, ma być przed pierwszym pojawieniem się bohatera w grze, bo inaczej wywali błąd. Oczywiście możesz się przed tym zabezpieczyć. ///Create bohatera - kod na sprawdzanie poziomu gry ///poziomy trudnosci /*tutaj wyrzuciłem Ci to, co przeszkadzało*/ //Ustaw domyślne wartości życia i szans, gdyby nie wyszukało jaki jest poziom trudności global.hp = 100; global.live = 7; /// Wyszukaj poziom trudności i ustaw odpowiednio życie i szanse //easy difficult if(global.difficulty == "easy") { global.hp = 100; global.live = 7; } //medium difficult if(global.difficulty == "medium") { global.hp = 80; global.live = 5; } //hard difficult if(global.difficulty == "hard") { global.hp = 50; global.live = 3; } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 6 Czerwca 2019 Administratorzy Udostępnij Opublikowano 6 Czerwca 2019 hit miesiaca, ustawiać w kodzie po kolei każdy poziom trudności tak, że ustawi się zawsze ostatni. Pomyśl na spokojnie co tam piszesz, linijka po linijce mów na głos - to jest dokładnie to co gra zrobi w jedną klatkę obrazu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 6 Czerwca 2019 Autor Udostępnij Opublikowano 6 Czerwca 2019 Właśnie widze jaki numer odwaliłem kurcze W swoim kodzie resetowałem zmienne w obj_bohater a to cofało prace wykonaną przez obj_poziomtrudnosci.. Wywaliłem to z obj_bohater global.difficulty = 0; //ustaw latwy global.difficulty = 1; //ustaw sredni global.difficulty = 2; //ustaw trudny Niemniej poprawiłem to w taki sposób jaki mi pokazaliście i nadal to samo..bez względu jaki wybiore na nowej planszy poziom gry to i tak gra uruchamia Mi się w normalny sposób czyli z taką samą ilością żyć i energii jak było wcześniej.. Macie rację I tak właśnie jest Menu gry -> wybierane trudności -> rozgrywka (pojawienie się bohatera) I osobny obiekt w pokoju do wyboru poziomu trudnosci... obj_poziomtrudnosci zreszta byl wczesniej pod nazwa obj_poziomy zmienilem tylko nazwe ale to szczegol. obj_bohater Create /// Glowne deklaracje zmiennych Anatola ////////////////////////////// ///////ZMIENNE STALE////////// ///////////////////////////// ///Ustawienia event_inherited(); zbieranie=true; eksplozja = false; zasiegEksplozji = 22; silaEksplozji = 10; global.damage=0; //zmiena 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; ///poziomy trudnosci //Ustaw domyślne wartości życia i szans, gdyby nie wyszukało jaki jest poziom trudności global.hp = 100; global.live = 7; /// Wyszukaj poziom trudności i ustaw odpowiednio życie i szanse //easy difficult if(global.difficulty == "easy") { global.hp = 100; global.live = 7; } //medium difficult if(global.difficulty == "medium") { global.hp = 80; global.live = 5; } //hard difficult if(global.difficulty == "hard") { global.hp = 50; global.live = 3; } obj_poziomtrudnosci (jest umieszczony w osobnym roomie) CREATE options_difficulty=ds_list_create() options_difficulty[|0]=("Easy") options_difficulty[|1]=("Medium") options_difficulty[|2]=("hard") selected=0 gp_up=false gup_down=false gp_left=false gp_right=false //Używane do animacji menu animation_speed=room_speed/4 for(var i=0; i<ds_list_size(options_difficulty); i++) { animation[i]=0 } STEP if(abs(gamepad_axis_value(0,gp_axislv))<0.3 && !keyboard_check(vk_anykey)) { gp_up=0 gp_down=0 } if(abs(gamepad_axis_value(0,gp_axislh))<0.3 && !keyboard_check(vk_anykey)) { gp_left=0 gp_right=0 } if(keyboard_check_pressed(vk_down) || gamepad_button_check_pressed(0,gp_padd) || (gamepad_axis_value(0,gp_axislv)>0.7 && !gp_up)) { selected++ if(selected>=ds_list_size(options_difficulty)) { selected=ds_list_size(options_difficulty)-1 } gp_up=true } if(keyboard_check_pressed(vk_up) || gamepad_button_check_pressed(0,gp_padu) || (gamepad_axis_value(0,gp_axislv)<-0.7 && !gp_down)) { selected-- if(selected<0) { selected=0 } gp_down=true } if(keyboard_check_pressed(vk_enter) || gamepad_button_check_pressed(0,gp_face1)) { if(selected == 0) then global.difficulty = 0; //ustaw latwy room_goto(inicjacja) if(selected == 1) then global.difficulty = 1; //ustaw sredni room_goto(inicjacja) if(selected == 2) then global.difficulty = 2; //ustaw trudny room_goto(inicjacja) } DRAW draw_set_valign(1) draw_set_halign(1) draw_set_font(fontIntro) var line_height=ceil(string_height("M")*1.1) for(var i=0; i<ds_list_size(options_difficulty); i++) { if(i=selected) { //Wybrana opcja animation[i]=clamp(animation[i]+(1/animation_speed),0,1) } else { animation[i]=clamp(animation[i]-(1/animation_speed),0,1) } var color=merge_colour(c_black,c_red,animation[i]) draw_text_transformed_color(x,y+(line_height*i),options_difficulty[|i],1+animation[i]/5,1+animation[i]/5,0,color,color,color,color,1) } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 6 Czerwca 2019 Udostępnij Opublikowano 6 Czerwca 2019 Dobrze, błąd widać od razu, ale teraz dam Ci pogłówkować, tak minimalnie. Zobacz sobie, co przypisujesz do zmiennej global.difficulty w obj_poziomtrudnosci, a co sprawdzasz w obj_bohater. ps: i może rzeczywiście, tak jak mistrzu Gnysek napisał, powiedz to sobie głośno. Ja tak też czasami muszę robić, kiedy nie mogę znaleźć błędu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 6 Czerwca 2019 Autor Udostępnij Opublikowano 6 Czerwca 2019 hmmmm...:-) w bohaterze jest np: global.difficulty == "easy" a w obj_poziomtrudnosci jest np: global.difficulty = 0; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 6 Czerwca 2019 Administratorzy Udostępnij Opublikowano 6 Czerwca 2019 No to chyba logiczne, co robisz źle tu cyfry, tu tekst Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 6 Czerwca 2019 Autor Udostępnij Opublikowano 6 Czerwca 2019 O to chodzi :-) SimianVirus7:-)? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 6 Czerwca 2019 Autor Udostępnij Opublikowano 6 Czerwca 2019 Ech dobra już poprawiam gamoń ze mnie przepraszam chłopaki;-) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 6 Czerwca 2019 Udostępnij Opublikowano 6 Czerwca 2019 Tak, o to chodzi Panie gamoniu Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 7 Czerwca 2019 Autor Udostępnij Opublikowano 7 Czerwca 2019 Chłopaki działa teraz elegancko;-) Gamoń dał radę:-) ustawiłem sobie nawet na danym poziomie w w create wroga żeby mu więcej lub mniej hp zabierało;-) Utkwiłem na problemie związanym może błahostka,ale walczę z tym od kilku godzin z szybkością jaką poruszają się wrogowie.. używałem image_speed oraz hspeed,speed i niestety nie mogę przyspieszyć wroga. A założenie mam takie że np na poziomie easy wróg chodzi tak jak chodził na poziomie normal wróg przyspieszy np o 2 razy więcej niż na poziomie easy i na poziomie hard o 4 razy szybciej niż na poziomie easy. I druga sprawa...to chciałbym aby wrogowie na poziomie normal i hard zabierali mi wiecej energii... Obecnie jest tak,że bohater jest na 6 strzałów;-) chciałbym żeby na poziomie normalnym był na 4 strzały,a na poziomie trudnym na 3 strzały.. Kod bohatera nie będę wklejał,bo jest ten co wyżej tylko poprawiony o te zmienne;-) przykładowy kod wroga obj_bandyta CREATE ///Ustawienia event_inherited(); pointvalue=choose(10,20,30,40,50,60,70,80,90,100);//dodaje nam losowa ilosc pkt dead=false; follow=0 hp = 10; maxHp = 10; global.zegarObrazenWroga = 0; at=1 st=1 //pozycje powrotu wroga po restarcie mapy start_x = x; start_y = y; enum stan { patrol, wait, follow } action=stan.patrol ///poziomy trudnosci //easy difficult if global.difficulty = "easy" { hp = 10; } //medium difficult if global.difficulty = "medium" { hp = 15; } //hard difficult if global.difficulty = "hard" { hp = 20; } STEP if(instance_exists(obj_player) && action!=stan.patrol && collision_line(x,y,obj_player.x,obj_player.y,obj_niewidzialny,0,1)) { if(follow>room_speed/2) { follow=0 } image_speed=0 image_index=0 action=stan.wait } else if (instance_exists(obj_player) && distance_to_object(obj_player)<=250 && abs(y-obj_player.y)<64 && follow>=room_speed/2 && image_xscale-sign(obj_player.x-x)=0 && !collision_line(x,y,obj_player.x,obj_player.y-12,obj_niewidzialny,0,1)) { action=stan.follow follow=30 } if(action=stan.wait) { image_speed=0 image_index=0 follow++ if(follow>room_speed/2) { action=stan.patrol follow=0 } } else { image_speed=0.3 } if(action=stan.patrol) { follow++ } if (place_free(x,y+1)) {gravity = 0.5} else {gravity = 0} if at=1 { at=2 speed=4 } if at=2 { if (hspeed<0) { image_xscale = -1; if (!place_meeting(x-30,y+10,par_solid ) or place_meeting(x-1,y,par_solid )) { speed*=-1 st=1 if(action=stan.follow) { action=stan.wait } } } else if (hspeed>0) { image_xscale = 1; if (!place_meeting(x+30,y+10,par_solid ) or place_meeting(x+1,y,par_solid )) { speed*=-1 st=2 if(action=stan.follow) { action=stan.wait } } } } //Podazanie za graczem if(action=stan.follow && follow>0) { follow=max(0,follow-1) if(instance_exists(obj_player) && distance_to_object(obj_player)>3) { move_towards_point(obj_player.x,y,min(5,abs(obj_player.x-x))); } } else if(action=stan.patrol && distance_to_point(xstart,ystart)>2) { speed=4 } else if(action=stan.wait) { speed=0 } //ginie wrog if hp<0 { instance_destroy() } //Gdy wrog zostaje atakowany mruga if global.zegarObrazenWroga > 0 { visible = !visible; global.zegarObrazenWroga -= 1; } else { visible = true; } if hp <= 0 { instance_destroy(); dead = true; //wywolujemy alarm gdy wrog jest martwy //tworzymy losowa ilosc punktow po zabiciu wroga,oraz napis,ktory sie nad nim wyswietla z iloscia punktow losowych z = instance_create(x,y-10,obj_floating_txt); global.pScore+=pointvalue z.txt = "$" + string(pointvalue); z.yspeed = -4; //instance_create(x,y-50,choose(obj_coin,obj_diamencik,obj_trzy_poduszki,obj_serducho,obj_motyl,obj_gwiazdka,obj_ksiezyc)) // daje losowy item np monety albo jabłuszka with instance_create(x,y,obj_entity_die) with instance_create(x,y,obj_bandyta_ginie) { //sprite_index = sprWrogGinie; //sprite do poruszania sie wroga image_xscale = other.image_xscale; image_yscale = other.image_yscale; hspd = other.hspd; vspd = other.vspd; audio_play_sound(dzwiek_wrog_ginie, 1, false); //odtwarzamy dzwiek przy smierci wroga } } // czasowy respawn wrogow troche pomeczyles sie ale dziala jak trzeba :) if (dead == true) { //obj_spawn.dead = true; //respawn zabitego wroga jak nie bedzie dzialac to wtedy dead=true i wpisac instance_create(x,y,obj_spawn) instance_create(x,y,obj_spawn_bandyta); } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 7 Czerwca 2019 Administratorzy Udostępnij Opublikowano 7 Czerwca 2019 zamiast "easy" itp. możesz też enuma zrobić. Bo potem łatwo o literówkę, a tak kompilator/sprawdzanie składni wykrywa błąd. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 7 Czerwca 2019 Autor Udostępnij Opublikowano 7 Czerwca 2019 Myślę też nad tym:-) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 8 Czerwca 2019 Autor Udostępnij Opublikowano 8 Czerwca 2019 image_speed,speed,hspd,hspeed Nie działa:-/ coś źle robię... Wróg nie chce przyspieszyć na poziomie medium i hard. Druga sprawa: Żeby wróg zabierał mi energię w takiej ilości zależne od poziomu trudności gry to rozumiem,że mam użyć zmiennej global.hp od bohatera tylko to ma się znajdować w CREATE wroga? Poziom easy zostaje bez zmian po 6 spotkaniach z wrogiem lub strzałach tracę życie Poziom medium bohater po 4 spotkaniach z wrogiem lub strzałach traci życie Poziom hard bohater po 3 spotkaniach z wrogiem lub strzałach traci życie Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 8 Czerwca 2019 Administratorzy Udostępnij Opublikowano 8 Czerwca 2019 Global oznacza , że taka zmienną jest jedna współdzielona na całą grę. Jak ja dasz w przeciwnikach, to wszystkim na raz zmienisz, to bez sensu. A hspeed czy vspeed są zależne od speed i direction, więc jak zmieniasz tamte zmieniają się te (albo jak jakoś kod powoduje ich zmianę). To są współbieżne zmienne - zmiana jednych zmienia drugie i vice versa. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 8 Czerwca 2019 Autor Udostępnij Opublikowano 8 Czerwca 2019 Reasumując Gnysku Piotrze...czyli rozumiem,że jak chcę osiągnąć wyżej zamierzony efekt to używam zmiennych w CREATE bohatera. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 8 Czerwca 2019 Administratorzy Udostępnij Opublikowano 8 Czerwca 2019 Może być. Ja akurat takie zmienne definuję wcześniej, na początku gry, to wtedy można je przenosić pomiędzy poziomami. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 8 Czerwca 2019 Udostępnij Opublikowano 8 Czerwca 2019 Create - wszystko co tam napiszesz jest wykonywane przy pojawieniu się instancji (każdego obiektu na mapie nawet jeśli jest taki sam). Także hp, zmienna dla speed, energia może tam być zdefiniowana. Step - kod wykonywany przy każdej klatce gry (fps). Czyli, cały kod poruszania się, zadawania obrażeń itp Jeśli masz w kodzie napisane tak że "If(keyboard_check(vk_right)) { hspeed = 3 } " To musisz zrobić tam to samo sprawdzenie co przy definiowaniu hp, czyli " If(global.difficulty == "easy") { If(keyboard_chceck(vk_right)) { hspeed = 3 } } " 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ę