pankracy Opublikowano 1 Lutego 2021 Udostępnij Opublikowano 1 Lutego 2021 Cześć wszystkim, Próbuje od jakiegoś czasu rozwiązać problem ze skalowaniem paska HUD w trybie okienkowym.. Moja gra pracuje na pełnym ekranie w rozdzielczości 1280x720. W grze ustawiłem sobie możliwość przełączania gry z pełnego ekranu na tryb okienkowy z zachowaniem proporcji obrazu ze skalowaniem. Wszystko ładnie działa..Prawie wszystko się skaluje w trybie okienkowym,ale pasek HUD nie chce się skalować do wymiarów okna gry..Jest cały czas w takich samych rozmiarach jak na pełnym ekranie.. Próbowałem użyć nawet funkcji display_set_gui_size() Wpisując odpowiednie wartości czyli połowę display_set_gui_size(640,360) Pomimo tego nadal pasek HUD nie chce się skalować i wszystkie sprity które są na nim umieszczone.Mało tego jak użyje tej właśnie funkcji to pasek HUD w trybie pełnoekranowym i w trybie okienkowym jest jeszcze większy. Bardzo proszę o waszą pomoc..bo nie mam już pomysłów jak to naprawić.. dziękuję Kod wygląda następująco room_display_manager creacion code window_set_fullscreen(true); obj_display_manager (trwały) create ideal_width = 0; ideal_height = 720; aspect_ratio = display_get_width()/display_get_height(); ideal_width = round(ideal_height * aspect_ratio); //Sprawdź czy liczba jest nieparzysta if (ideal_width & 1) { ideal_width ++; } for (var i=2; i <= room_last; i++) { if (room_exists(i)) { view_wview[0] = ideal_width; view_hview[0] = ideal_height; view_wport[0] = ideal_width; view_hport[0] = ideal_height; } } surface_resize(application_surface, ideal_width, ideal_height); window_set_size(ideal_width, ideal_height); room_goto(room_next(room)); obj_game_controller step ///Przełącz tryb okienkowy if (keyboard_check_pressed(ord("F"))) { window_set_fullscreen(!window_get_fullscreen()); if (!window_get_fullscreen()) { window_set_size(obj_display_manager.ideal_width, obj_display_manager.ideal_height); } } draw GUI /// Wyswietlamy HUD gracza draw_set_color(c_white); draw_sprite(spr_mniejszy_hud,1,50,64); var __guiW = display_get_gui_width(), __guiH = display_get_gui_height(); //punkty czyli score wysrodkowalem to na HUD draw_set_color(c_white); draw_set_valign(fa_middle); draw_set_halign(fa_center); draw_set_font(fn_punkty); draw_sprite(spr_score,1,310,30); draw_text(310,75,"$"+string(global.pScore)); // Rozmieszenie monet draw_set_color(c_white); draw_set_valign(fa_middle); draw_set_halign(fa_center); draw_set_font(fn_punkty); draw_sprite(spr_coins,1,400,30); draw_text(400, 75, string(" " + string(global.coins))); //HP HUD if instance_exists(par_player) { //hpHUD = lerp(hpHUD,par_player.hp,.5); hpHUD=global.hp; maxHpHUD = par_player.maxHp; //HUD dopalaczy with obj_player { var _offset; _offset = 0; draw_set_font(fnt_pwrup); draw_set_valign(fa_bottom); draw_set_halign(fa_center); draw_set_color(c_white); draw_texture_flush(); if pwrupSpd > 0 { draw_sprite_ext(spr_pwrup_speed,0,__guiW-26,29+35*_offset,1,1,0,c_gray,.5); draw_text(__guiW-26,29+35*_offset,string(ceil(pwrupSpd/room_speed))); _offset++; } if pwrupStr > 0 { draw_sprite_ext(spr_pwrup_strength,0,__guiW-26,35+35*_offset,1,1,0,c_gray,.5); draw_text(__guiW-26,35+35*_offset,string(ceil(pwrupStr/room_speed))); _offset++; } if pwrupJmp > 0 { draw_sprite_ext(spr_pwrup_jump,0,__guiW-26,28+35*_offset,1,1,0,c_gray,.5); draw_text(__guiW-26,28+35*_offset,string(ceil(pwrupJmp/room_speed))); _offset++; } } } else { hpHUD = lerp(hpHUD,0,.5); } //HUD zycia draw_sprite_part(spr_hp_bar,1,1,0,180/maxHpHUD*hpHUD,130,90,14); draw_set_color(c_white); draw_set_valign(fa_middle); draw_set_halign(fa_center); draw_set_font(fn_punkty); draw_text(70, 74, string("x" + string(global.life))); //rozmieszczenie wskaznika zyc draw_sprite(spr_glowa,1,40,1); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 1 Lutego 2021 Administratorzy Udostępnij Opublikowano 1 Lutego 2021 użyj display_set_gui_maximize(), aby ustalić o ile skalować GUI. Zmiana rozmiaru działa jak zmiana szerokości surface - z prawej i na dole po prostu obcinasz obszar rysowania, więc na pełnym ekranie raczej musisz skalować. Ta funkcja pozwala też użyć offsetu dla ekranów dziwnych/innych szerokości. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 1 Lutego 2021 Autor Udostępnij Opublikowano 1 Lutego 2021 A jak to dokładnie obliczyć? mam ustawić tutaj również połowę rozdzielczości obrazu??Pytam,bo nie używałem jeszcze tej funkcji.. Mam jeszcze jedno pytanie do tego tematu.. Ustawiłem sobie w menu gry zmianę obrazu z trybu pełnoekranowego w tryb okienkowy.. ale myślę,że część kodu nie działa..zwłaszcza ten warunek przy którym napisałem komentarz.. obj_opcje create options=ds_list_create() options[|0]=("Controlls") options[|1]=("Sound") options[|2]=("Display") options[|3]=("Back") 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(keyboard_check_pressed(vk_enter) || gamepad_button_check_pressed(0,gp_face1)) { if(selected=0) { room_goto(room_controls_setup) } else if(selected=1) { room_goto(room_sound_setup) } else if(selected=2) { window_set_fullscreen(!window_get_fullscreen()); //nie wiem czy ten warunek dziala tak jak go tu zaimplementowalem if (!window_get_fullscreen()) { window_set_size(obj_display_manager.ideal_width, obj_display_manager.ideal_height); } } else if(selected=3) { room_goto(room_menu_glowne) } } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 1 Lutego 2021 Administratorzy Udostępnij Opublikowano 1 Lutego 2021 22 minuty temu, pankracy napisał: A jak to dokładnie obliczyć? mam ustawić tutaj również połowę rozdzielczości obrazu??Pytam,bo nie używałem jeszcze tej funkcji.. To zależy jakie masz rozdzielczości. Jak masz grę 800x600, a fullscreen jest na 1920/1080, to skalowanie wynosi zapewne poziomo 1920/800 i 600/1080 w pionie. Możesz oczywiscie wpisać od razu wynik działania, ale tutaj przynajmniej wiesz o co chodzi o możesz podstawić funkcję display_get_width() albo ..._height() i ustawić do dowolnego monitora. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 1 Lutego 2021 Autor Udostępnij Opublikowano 1 Lutego 2021 Grę mam ustawioną na 1280x720 i full screen jest ustawiony na 1280x720 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 1 Lutego 2021 Autor Udostępnij Opublikowano 1 Lutego 2021 Teraz tak...w draw gui mam użyć tych dwóch funkcji ? display_get_width() lub display_get_height() oraz display_set_gui_maximize() Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 1 Lutego 2021 Administratorzy Udostępnij Opublikowano 1 Lutego 2021 Nie wiem co chcesz uzyskać. Jeśli grę i fullscreen masz ustawione na te same rozdzielczości to GUI powinno być dobrego rozmiaru. Jeśli GUI jest ustawione na mniejsze, no to podziel jak pokazałem. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 1 Lutego 2021 Autor Udostępnij Opublikowano 1 Lutego 2021 No właśnie o to chodzi,że po za paskiem HUD wszystko jest dobrze skalowane do rozmiaru okna.. Gra jest ustawiona na pełnym ekranie na 1280x720...i wszystkie mam tak ustawione pokoje na taką rozdzielczość Tu jest tylko problem z paskiem HUD i spritami które są osadzone na nim...kiedy przełączę się z ekranu (full screen 1280x720) na ekran okienkowy..to pasek HUD ze spritami umieszczonymi na nim nie skalują się do rozmiaru okna..tylko nadal mają pierwotny rozmiar.. draw GUI /// Wyswietlamy HUD gracza draw_set_color(c_white); draw_sprite(spr_mniejszy_hud,1,50,64); var __guiW = display_get_gui_width(), __guiH = display_get_gui_height(); //punkty czyli score wysrodkowalem to na HUD draw_set_color(c_white); draw_set_valign(fa_middle); draw_set_halign(fa_center); draw_set_font(fn_punkty); draw_sprite(spr_score,1,310,30); draw_text(310,75,"$"+string(global.pScore)); // Rozmieszenie monet draw_set_color(c_white); draw_set_valign(fa_middle); draw_set_halign(fa_center); draw_set_font(fn_punkty); draw_sprite(spr_coins,1,400,30); draw_text(400, 75, string(" " + string(global.coins))); //HP HUD if instance_exists(par_player) { //hpHUD = lerp(hpHUD,par_player.hp,.5); hpHUD=global.hp; maxHpHUD = par_player.maxHp; //HUD dopalaczy with obj_player { var _offset; _offset = 0; draw_set_font(fnt_pwrup); draw_set_valign(fa_bottom); draw_set_halign(fa_center); draw_set_color(c_white); draw_texture_flush(); if pwrupSpd > 0 { draw_sprite_ext(spr_pwrup_speed,0,__guiW-26,29+35*_offset,1,1,0,c_gray,.5); draw_text(__guiW-26,29+35*_offset,string(ceil(pwrupSpd/room_speed))); _offset++; } if pwrupStr > 0 { draw_sprite_ext(spr_pwrup_strength,0,__guiW-26,35+35*_offset,1,1,0,c_gray,.5); draw_text(__guiW-26,35+35*_offset,string(ceil(pwrupStr/room_speed))); _offset++; } if pwrupJmp > 0 { draw_sprite_ext(spr_pwrup_jump,0,__guiW-26,28+35*_offset,1,1,0,c_gray,.5); draw_text(__guiW-26,28+35*_offset,string(ceil(pwrupJmp/room_speed))); _offset++; } } } else { hpHUD = lerp(hpHUD,0,.5); } //HUD zycia draw_sprite_part(spr_hp_bar,1,1,0,180/maxHpHUD*hpHUD,130,90,14); draw_set_color(c_white); draw_set_valign(fa_middle); draw_set_halign(fa_center); draw_set_font(fn_punkty); draw_text(70, 74, string("x" + string(global.life))); //rozmieszczenie wskaznika zyc draw_sprite(spr_glowa,1,40,1); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 1 Lutego 2021 Administratorzy Udostępnij Opublikowano 1 Lutego 2021 Godzinę temu, pankracy napisał: nim nie skalują się do rozmiaru okna..tylko nadal mają pierwotny rozmiar.. No tak, GUI nadal będzie mieć 1280x720, tak jak w momencie startu gry - jeśli nie podasz inaczej w kodzie. Jeśli chcesz przeskalować, to musisz zrobić tak: // create: display_set_gui_size(1280, 720); // wymuś zawsze taki rozmiar na każdym monitorze // skalowanie - przy zmianie ekranu (nie trzeba co krok) display_set_gui_maximize( 1280/window_get_width(), 720/window_get_height() ); Reszta kodu którą tutaj podajesz nie ma związku z problemem. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 1 Lutego 2021 Autor Udostępnij Opublikowano 1 Lutego 2021 te rozwiązanie nie działa.. ale odkryłem jedną zależność.. na scenerii tam gdzie się rozgrywa akcja gry i jest bohater to mam dwa obiekty które kontrolują grę... jeden z tych obiektów miał włączoną dodatkową aplication_surface..wyłączyłem to..i teraz widać idealnie jak skaluje pasek HUD jak gra przechodzi w tryb okienkowy... Ale jest jedno ale... kod do zmiany trybu z full screen na okienkowy umieściłem chwilowo w step jednego z tych kontrolerów które wyłącznie znajdują się na scenerii gry(nie w menu głównym gry) Jak ten sam kod umieszczę w menu głównym gry.to nie skaluje mi paska HUD... Teraz mam zagadkę jak to naprawić..jest to dość uciążliwe zjawisko...bo bez sensu jak będę zmieniał tryb pełno ekranowy i okienkowy w samej rozgrywce..Od tego mam specjalne miejsce w menu gry.. Przejrzałem już czy nie mam gdzieś w menu głównym i opcji jakiegoś kodu z aplication_surface i nic już nie ma... to jest ten kod.... jak umieszczę go w zdarzeniu step np w obiekcie obj_game_controller który jest obiektem trwałym w nim jest w draw GUI pasek HUD i on znajduje się wszędzie ten obiekt po za planszami menu gry game over i highscore...czyli tam gdzie jest gracz..To tutaj skalowanie idealnie działa if (keyboard_check_pressed(ord("F"))) { window_set_fullscreen(!window_get_fullscreen()); if (!window_get_fullscreen()) { window_set_size(obj_display_manager.ideal_width, obj_display_manager.ideal_height); } } natomiast ten sam kod jak mam w menu gry opcji(tam gdzie nie ma obj_game_controller) to nie skaluje mi paska HUD room_menu obj_opcje step if(keyboard_check_pressed(vk_enter) || gamepad_button_check_pressed(0,gp_face1)) { if(selected=0) { room_goto(rm_controls_setup) } else if(selected=1) { room_goto(rm_sound_setup) } else if(selected=2) { window_set_fullscreen(!window_get_fullscreen()); options[|2]=("Fullscreen"); if (!window_get_fullscreen()) { window_set_size(obj_display_manager.ideal_width, obj_display_manager.ideal_height); options[|2]=("Windowed"); } } else if(selected=3) { room_goto(roo_menu) } } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 2 Lutego 2021 Autor Udostępnij Opublikowano 2 Lutego 2021 Zobrazowałem to na poniższym obrazku jak to wygląda...wszystko poza paskiem HUD się skaluje do rozmiaru okna gry. Pełny ekran full screen view 1280x720 i tryb okienkowy view 1280x720 Edit.. Jeśli użyje kodu który mi podałeś... to sytuacja jest wtedy taka: w oknie gry pasek jest takiej samej wielkości jak przy pełnym ekranie full screen,a na pełnym ekranie full screen pasek jest zmniejszony i pasowałby do okna gry.. obj_display create display_set_gui_size(1280, 720) draw GUI display_set_gui_maximize( 1280/window_get_width(), 720/window_get_height() ); Pomyślałem sobie..zmienię wartości.. więc zrobiłem tak w create zostało jak jest..a w draw gui zmieniłem wartości na takie.. display_set_gui_maximize( 720/window_get_width(), 360/window_get_height() ); Teraz w oknie gry pasek skaluje się prawidłowo,ale na pełnym ekranie jest jeszcze mniejszy...czyli i te rozwiązanie nie jest dobre.. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 2 Lutego 2021 Administratorzy Udostępnij Opublikowano 2 Lutego 2021 No dobrze, a podstawiłeś sobie cyferki pod dzielenie i sprawdziłeś wynik? Wtedy byś wiedział, skąd błąd. Bardzo możliwe, że podałem na odwrót kolejność, bo nie wiem czemu, założyłem, że podajemy ile razy pomniejszyć GUI, a przecież dla mniejszego okna musi być < 1. Możliwe też, że window_get_width() na pełnym ekranie zwraca wartość okienka niepełnego, chociaż byłoby to dziwne - no ale to już musiałbyś sobie na ekran/w output wrzucić ten wynik, dla pewności. Zatem, na pełnym ekranie: display_set_gui_maximize( 1, 1 ); a w oknie: display_set_gui_maximize( 720/window_get_width(), 360/window_get_height() ); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 2 Lutego 2021 Autor Udostępnij Opublikowano 2 Lutego 2021 Fakt...masz rację nie podstawiłem sobie cyfry pod dzielenie. czy przypadkiem tu nie ma być display_set_gui_size(1, 1) zamiast display_set_gui_maximize( 1, 1 ); ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 2 Lutego 2021 Administratorzy Udostępnij Opublikowano 2 Lutego 2021 A zajrzałeś kiedyś do dokumentacji ? display_set_gui_size ustawi Ci interfejs na 1x1 piksel, zdecydowanie tego nie chcesz Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 2 Lutego 2021 Autor Udostępnij Opublikowano 2 Lutego 2021 Łobuz z Ciebie;-) Dobra...pytam,bo nie używałem tej funkcji wcześniej... a napisałeś ją dwukrotnie z innymi wartościami stąd moje pytanie;-) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 2 Lutego 2021 Autor Udostępnij Opublikowano 2 Lutego 2021 I dupka;-) teraz w trybie okienkowym są dobre proporcje paska hud,a w trybie pełny ekran pasek jest bardzo malutki..jeszcze mniejszy niż w trybie okienkowym.. create display_set_gui_maximize( 1, 1 ); draw gui display_set_gui_maximize( 720/window_get_width(), 360/window_get_height() ); Może muszą być większe te wartości niż 1? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 2 Lutego 2021 Administratorzy Udostępnij Opublikowano 2 Lutego 2021 Czyli nie przeczytałeś dokumentacji, tak jak sądziłem Masz dwa różne tryby ekranu, wiec musisz odpowiednio do niego używać innego kodu skalowania GUI, stąd problem. Żeby nie ustawiać tego co krok, wystarczy sprawdzać, czy właśnie się nie zmienił tryb ekranu i go zapamiętywać. // create display_set_gui_size(1280, 720) full_screen = -1; // step if (full_screen != window_get_fullscreen()) { full_screen = window_get_fullscreen(); if (full_screen) { display_set_gui_maximize( 1, 1 ); } else { display_set_gui_maximize( 720/window_get_width(), 360/window_get_height() ); } } Oczywiście przy innych monitorach niż Twój, zamiast 1,1 będzie dzielenie przez display_get_width() i ..._height() . Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 2 Lutego 2021 Autor Udostępnij Opublikowano 2 Lutego 2021 Wiesz..dokumentacja to pojęcie szeroko rozumiane:-) Nie przeczytałem książki gms...ale przeczytałem krótki opis tej funkcji... Z której zrozumiałem jak zrozumiałem. Gnysku, Czy pod obsługę innych monitorów niż mój muszę zmienić te wartości z 1,1 na dzielenie przez display_get_width() i ..._height() .? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 2 Lutego 2021 Autor Udostępnij Opublikowano 2 Lutego 2021 Gnysku, Teraz skaluje się pasek HUD do rozmiaru okna... Jeszcze jedna rzecz...nie chce skalować się pauza a skalowała się i zegar gry...który jest w prawym górnym rogu.. Jak jest na pełnym ekranie to wszystko ładnie wygląda i jest na swoim miejscu..kiedy przełączę na tryb okienkowy pasek HUD też się ładnie już skaluje,ale nie skaluje się pauza i zegar. Odkryłem tą zależność..jak włączę ten kod poniżej to zegar i pauza skalują się,ale wtedy pasek HUD nie skaluje się.... Jak to naprawić? Pauza i zegar też jest rysowany na warstwie GUI obj_game_controller begin 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]); } edit tak to wygląda jak na obrazku Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 2 Lutego 2021 Administratorzy Udostępnij Opublikowano 2 Lutego 2021 Zmieniasz display_set_gui_size na view_wport[0],view_hport[0], które nie muszą być równe ani rozmiarowi okna, ani ekranu i jeszcze mogą być różne na pełnym ekranie i na okienkowym, więc nie mam pojęcia co się dzieje w Twojej grze Generalnie zalecałbym tego nie zmieniać, skoro wcześniej ustaliliśmy, że tylko w create to ląduje, a teraz nagle zmieniasz warunki. Proponuję wyświetlić sobie te wartości na ekranie: draw_text(10,10, string(view_wport[0]) + ", " + string(view_hport[0])); I wtedy się dowiesz co się dzieje i jakie są różnice. A co do czytania manuala... całego nie musisz czytać, ale ja po wejściu w opis dowolnej funkcji staram sie przeczytać wszystkie o podobnej nazwie w tym samym dziale (albo i sam wstęp do działu), co pomaga zrozumieć wiele podstaw i zależności. Bez przeliczenia co obecnie masz i co ma kiedy jaki rozmiar - niewiele zrozumiesz, musisz trochę prostej matematyki (głównie dzielenia i mnożenia) odbębnić. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 3 Lutego 2021 Autor Udostępnij Opublikowano 3 Lutego 2021 Gnysku tak.. Teraz pytanie dlaczego pauza i zegar narysowane na warstwie GUI (draw GUI) przy zmianie na tryb okienkowy nie chcą zmienić swojego położenia dopasowanego do okna gry...? Pomogło wyświetlić wartości na ekranie.. draw_text(10,10, string(view_wport[0]) + ", " + string(view_hport[0])); Przy wyłączonym tym poniżej kodzie ///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]); } */ Tryb pełnoekranowy wyświetla informacje 1280x720 a tryb okienkowy wyświetla informacje 1280x720 pauza i zegar gry bez względu na tryb gry czy to pełnoekranowy czy okienkowy ich położenie jest złe nie są na swoim miejscu Pasek HUD jest usytuowany w porządku Natomiast przy włączonym poniżej kodzie ///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]); } Tryb pełnoekranowy wyświetla informacje 1920x1080 a tryb okienkowy wyświetla informacje 1280x720 Tu pauza i zegar w trybie pełnoekranowym są dobrze umieszczone,ale kiedy przełączymy na tryb okienkowy ich położenie jest złe(jest takie same jak w powyższym wcześniejszym przypadku) pasek HUD jest usytuowany w porządku Tylko teraz...jak to naprawić? aby i pauza i zegarek które są narysowane na warstwie GUI tak samo skalowały się jak reszta rzeczy Tak to ostatecznie powinno wyglądać jak na poniższym obrazku Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 3 Lutego 2021 Administratorzy Udostępnij Opublikowano 3 Lutego 2021 Przede wszystkim wywal display_set_gui_size z tego fragmentu powyżej, bo tym zmieniasz rozmiar gui na jakiś inny, więc może i się wtedy rysuje inaczej. Poza tym, jeśli uzależniasz pozycję od rozmiaru okna czy view, to na pełnym ekranie i w okienku one są różne. Np. rysowanie napisu pauza na środku ja bym zrobił tak: draw_set_halign(fa_center); draw_text(display_get_gui_width()/2, 50, "Pauza"); Wtedy zawsze będzie na środku. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 3 Lutego 2021 Autor Udostępnij Opublikowano 3 Lutego 2021 Już usunąłem display_set_gui_size z tego poprzedniego kodu. Ja mam na środku pauze..jest w zdarzeniu draw GUI... zobacz obj_pauza_controller (wywołuje on obiekt obj_pauza na ekranie) step if keyboard_check_pressed(vk_escape) { if !instance_exists(obj_pauza) { instance_create(0, 0, obj_pauza); } } obj_pauza draw gui draw_set_color(c_fuchsia); draw_set_font(fn_pauza); draw_set_halign(fa_center); draw_set_valign(fa_middle); draw_text( display_get_gui_width()/2, display_get_gui_height()/2-200,"PAUSED"); draw_set_font(fn_pauza); draw_set_valign(fa_middle); draw_set_halign(fa_center); if (interest == "continue") { draw_text_colour(display_get_gui_width()/2, display_get_gui_height()/2-100,"CONTINUE",c_red,c_red,c_red,c_red,1) draw_text_colour(display_get_gui_width()/2, display_get_gui_height()/2,"RESTART",c_white,c_white,c_white,c_white,1) draw_text_colour(display_get_gui_width()/2, display_get_gui_height()/2+100,"EXIT",c_white,c_white,c_white,c_white,1) } else if (interest == "restart") { draw_text_colour(display_get_gui_width()/2, display_get_gui_height()/2-100,"CONTINUE",c_white,c_white,c_white,c_white,1) draw_text_colour(display_get_gui_width()/2, display_get_gui_height()/2,"RESTART",c_red,c_red,c_red,c_red,1) draw_text_colour(display_get_gui_width()/2, display_get_gui_height()/2+100,"EXIT",c_white,c_white,c_white,c_white,1) } else if (interest == "exit") { draw_text_colour(display_get_gui_width()/2, display_get_gui_height()/2-100,"CONTINUE",c_white,c_white,c_white,c_white,1) draw_text_colour(display_get_gui_width()/2, display_get_gui_height()/2,"RESTART",c_white,c_white,c_white,c_white,1) draw_text_colour(display_get_gui_width()/2, display_get_gui_height()/2+100,"EXIT",c_red,c_red,c_red,c_red,1) } else if (interest == "main manu") { draw_text_colour(display_get_gui_width()/2, display_get_gui_height()/2-100,"CONTINUE",c_white,c_white,c_white,c_white,1) draw_text_colour(display_get_gui_width()/2, display_get_gui_height()/2,"RESTART",c_white,c_white,c_white,c_white,1) draw_text_colour(display_get_gui_width()/2, display_get_gui_height()/2+100,"EXIT",c_red,c_red,c_red,c_red,1) } tak samo zegar patrz obj_timer draw gui var i, notimer_room; notimer_room = false; for (i = 0; i < ds_list_size(global.RT_room_list); ++i) { if (ds_list_find_value(global.RT_room_list, i) == room) { notimer_room = true; break; } } if (notimer_room == false) { draw_set_font(fnt_zegar); draw_set_color(c_white); draw_set_halign(fa_right); draw_set_valign(fa_top); draw_text(display_get_gui_width()+30-string_width(time_string), 0, "CZAS: " + time_string); draw_text(display_get_gui_width()-string_width(fps),y-5,"FPS: " + string(fps)); } Na pełnym ekranie jest wszystko w porządku z pozycja pauzy i zegara... jeśli nie zmniejszymy paska hud i zegara oraz pauzy to pozycja w okienku też wtedy jest w porządku tych rzeczy,ale są one za duże.. jest tak obecnie a powinno być tak To jest dziwna sytuacja..bo skoro na warstwie GUI jest narysowana pauza i zegar gry to powinni dostosować się do trybu okienkowego... Wygląda to tak,że przez zmianę rozmiaru pauzy i zegara podczas zmiany w tryb okienkowy zmienia się ich pozycja... Pasek hud ma swoją stałą pozycję bo jest usytuowany cały czas w lewym górnym rogu bez względu na rozmiar okna gry.. zmniejszając całą warstwę GUI przy trybie okienkowym...zmienia się ich położenie...tylko pasek HUD ma prawidłowe położenie a pauza i zegar już nie...w trybie okienkowym display_set_gui_maximise(720/window_get_width(),360/window_get_height()); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 3 Lutego 2021 Administratorzy Udostępnij Opublikowano 3 Lutego 2021 Nie wiem co mam odpowiedzieć, bo to nie są screeny z gry. Widać, że fonty mają ten sam rozmiar, wiec nie wiem co się dzieje w Twojej grze. Zalecam wypisanie sobie na ekranie wszelkich wartości i sprawdzenie, czy faktycznie są dobre proporcje (dlaczego w ogóle 720 i 360?). Dla pewności, jako 3 i 4 argument w display_set_gui_maximize możesz podać 0,0, żeby się offset nie robił - co oczywiście jest w dokumentacji. Wciaż też twierdzisz, że tryb okna i pełnego ekranu maja tę samą rozdzielczość co nie jest możliwe Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 3 Lutego 2021 Autor Udostępnij Opublikowano 3 Lutego 2021 Źle mnie Gnysek zrozumiałeś... wyjaśniam ;-) użycie tych wartości display_set_gui_maximise(720/window_get_width(),360/window_get_height()); powoduje,że w trybie okienkowym pasek hud pauza i zegar mają dobry rozmiar..tylko umiejscowienie pauzy i zegara jest złe.Narysowałem to na tych dwóch obrazkach gdzie są umiejscowione;-) i teraz sztuczka.. jak ustawię te wartości na takie display_set_gui_maximise(1280/window_get_width(),720/window_get_height()); To wtedy pasek HUD,pauza i zegar jest takiej samej wielkości jak na pełnym ekranie jak przełączę się w tryb okienkowy..plusem tego rozwiązania,że wszystko jest wtedy na swoim miejscu pauza i zegar..ale wszystko jest powiększone i rozmiarów takich jak na pełnym ekranie;-) Teraz rozumiesz co mam na myśli? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 3 Lutego 2021 Autor Udostępnij Opublikowano 3 Lutego 2021 czyli tak dać argument;-) display_set_gui_maximise(720/window_get_width(),0,360/window_get_height(),0); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 3 Lutego 2021 Administratorzy Udostępnij Opublikowano 3 Lutego 2021 nie, dwa ostatnie 0,0 - zajrzyj w końcu do dokumentacji i przeczytaj opis funkcji! Poza tym, jeśli tylko jeden element jest źle, a reszta ok, to znaczy, że coś po drodze zmienia rozmiary. Muszą być albo wszystkie źle, albo wszystkie dobrze, nie może być pół na pół. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 3 Lutego 2021 Autor Udostępnij Opublikowano 3 Lutego 2021 jak pasek HUD ma pozycję x,y nie wycentrowaną tylko 0,0 to chyba tak myślę jest to wytłumaczenie dlaczego sam pasek HUD jest prawidłowo usytuowany..bo przecież jego pozycja nie zmieni po przełączeniu w tryb okienkowy.. ok już zajrzałem i sprawdzam teraz te wartości.. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 3 Lutego 2021 Autor Udostępnij Opublikowano 3 Lutego 2021 Gnysek, Sprawdziłem... Nie mam w żadnym z obiektów kodu który zmienia gdzieś po drodze rozmiary. W menu gry idealnie wszystko wygląda bo tam nie używam view ponieważ menu gry jest w natywnej rozdzielczości 1280x720 a scenerie mają różne wymiary i włączony view gdzie wszędzie ustawiam podgląd gry na 1280x720 Skoro przy użyciu tego poniżej kodu te trzy obiekty pasek HUD zegar i pauza skalują się o te wartości to chyba jest to w porządku prawda? display_set_gui_maximise(720/window_get_width(),0,360/window_get_height(),0); One mają dobre w trybie okienkowym rozmiary..ale położeniew trybie okienkowym pauzy i zegara jest w złym miejscu.. nie wiem jak mam to bardziej wytłumaczyć:-) jak wstawie takie np wartości display_set_gui_maximise(1280/window_get_width(),0,720/window_get_height(),0); To te trzy obiekty pasek hud zegar i pauza nie zmniejszają się i są takie same jak na pełnym ekranie i w trybie okienkowym..A ich umiejscowienie w trybie pełnoekranowym i okienkowym jest prawidłowe Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 3 Lutego 2021 Autor Udostępnij Opublikowano 3 Lutego 2021 Gnysek.. Uwierz mi że jest takaa sama rozdzielczość w trybie pełnoekranowym i w oknie czyli 1280x720 Sprawdziłem to jak podałeś mi kod draw_text(10,10, string(view_wport[0]) + ", " + string(view_hport[0])); ..i mi wyświetliły się te wartości na ekranie Wspomniałem Ci że wyłączyłem ten jedyny kod który miał te hport w kodzie i na włączonym tamtym kodzie tryb pełnoekranowy pokazywał 1920x1080 a okienkowy 1280x720..ale to wyłączyłem.. Pytasz czemu takie wartości tu zasugerowałem? display_set_gui_maximise(720/window_get_width(),0,360/window_get_height(),0); bo to jest przecież połowa rozdzielczości w jakiej gra ma podgląd gry. Stąd takie proporcje.. Ja obstawiam..że coś źle jest w tej linijce..może faktycznie musiałbym podać xoffset i yoffset? Nie wartości 0,0 tylko wstawić odpowiednią wartość która w trybie okienkowym przesunie mi na środek pauze i na prawy górny róg zegarek? 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ę