Administratorzy gnysek Opublikowano 3 Lutego 2021 Administratorzy Udostępnij Opublikowano 3 Lutego 2021 Dobra, wiem gdzie jest pies pogrzebany. window_get_size() przez pierwsze kilka klatek po wyjściu z pełnego ekranu nadal zwraca wielkość ekranu na fullscreenie i dlatego jest błąd. Poprawiłem go tak: // create display_set_gui_size(1280, 720) full_screen = -1; // step if (full_screen != window_get_fullscreen()) { full_screen = window_get_fullscreen(); alarm[0] = 10; } // alarm0 if (full_screen) { display_set_gui_maximize( 1, 1 ); } else { display_set_gui_maximize( window_get_width()/1270, window_get_height()/720 ); } // moje draw GUI: draw_set_halign(fa_center); draw_text( window_get_width()/2, 20, "Pause"); Wystarczyło za pomocą show_debug_message wyrzucić sobie co zwraca window_get_width() . Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 4 Lutego 2021 Autor Udostępnij Opublikowano 4 Lutego 2021 To nie pomaga...ale coś odkryłem...Gnysku i wygląda na to,że jest to przyczyna powstawania tego problemu otóż.. kiedy tutaj wstawię zamiast display_set_gui_maximize( window_get_width()/1280, window_get_height()/720 ); to display_set_gui_maximise( room_width/1280,room_height/720 ); Przecież mam włączone view w planszach gdzie mam scenerię gry i chodzę bohaterem..a view wszędzie jest ustawiony na 1280x720..wiadomo,że sceneria ma rożne wymiary,ale to nie ma wpływu na wyświetlanie się na warstwie GUI pauzy zegara i paska HUD prawda? To przez dosłownie ułamek sekundy w trybie okienkowym pasek hud oraz zegar jest w prawidłowej pozycji i ładnie skalowany..ale zaraz to znika.. pauza też przez ułamek sekundy jest dobrze skalowana i w dobrej pozycji,ale później już się psuje..Wiem wina alarmu...można to naprawić? tu przykład... menu gry nie mam włączonych view,bo tam grafika ma rozmiary planszy czyli 1280x720... a plansze gdzie jest rozgrywka w grze gdzie chodzi bohater są różnego rozmiaru,ale z ustawionym podglądem gry view 1280x720...wszędzie tak ustawiłem Edycja 1 Wywaliłem w zdarzeniu step linijkę z alarmem alarm[0] = 10; I teraz wszystkie jest w porządku;-) pauza zegar i pasek hud idealnie skalują się na warstwie GUI na małym ekranie..I dopasowują swoją pozycję.;-) Widzisz...mówiłem,że coś jest z tą linijka kodu nie tak;-)jednak coś tam mi świtało wujaszku Gnysku ;-) Mam nadzieje,że na różnych monitorach będzie to cały czas w tym samym miejscu pauza zegar i pasek hud...nie tylko na moim monitorze.. Ostatecznie zostawiłem ten kod tylko wywaliłem tą linijkę..więc kod jest w zdarzeniu step w alarm[0](chociaż chyba tam nie powinien teraz być) i w create Jednak jak dam go do step to się wszystko psuje..a w Alarm0 jest idealnie.. ostatecznie kod wygląda tak // create display_set_gui_size(1280, 720) full_screen = -1; // step if (full_screen != window_get_fullscreen()) { full_screen = window_get_fullscreen(); } // alarm0 if (full_screen) { display_set_gui_maximize( 1, 1 ); } else { display_set_gui_maximise( room_width/1280,room_height/720 ); } Sprawdzisz czy tak to powinno wyglądać? ok jeszcze po za tym mam dwa pytania do tego tematu.. 1.Kiedy przechodzę z plansz gameplayu do menu gry to używam tego kodu aby nie psuło mi grafiki gry..bo zawsze tak jest...pewnie ma to wspólnego ze mianą rozdzielczości itp... Mam to włączone i jest ok..jednak mam pytanie,czy ta poniżej linijka kodu powinna być też włączona? bo obecnie jak ją włączam to wtedy psuje mi się całe gui obj_grafika_poprawa create surface_resize(application_surface,room_width,room_height) //display_set_gui_maximise()//tu wyłaczylem tą linikę,bo przy włączonej tej funkcji psuje mi się całe gui w oknie gry obj_grafika_poprawa1 step if(instance_exists(obj_global_controller)) {with(obj_game_controller){instance_destroy()}} surface_resize(application_surface,room_width,room_height) //display_set_gui_maximise() //to samo wyłaczyłem bo włączenie tej funkcji psuje mi gui..na w oknie gry draw_texture_flush() i pytanie drugie 2. Mam w menu opcji przycisk który naciskam i zmienia mi się tryb wyświetlania gry..pełny ekran/okno i wyświetla mi się też informacja czy jest to tryb pełnoekranowy czy okienkowy... Ale jest jeden mankament z tym wyświetlaniem..Otóż kiedy wejdę do menu opcji..i wybiorę pozycję zmiany wyświetlania obrazu i pokaże mi się jak nacisnę ENTER napis na przycisku windowed i zmieni się tryb na okienkowy to jeśli jeszcze raz wejdę do menu opcji to nie wyświetla mi się napis windowed tylko display.. i analogicznie to samo jak teraz nacisnę przycisk ENTER to przełączy mnie na full screen i wyświetli się napis na przycisku full screen,ale jak znów wejdę do menu opcji to zamiast wyświetlać się napis full screen wyświetla mi się napis display.. Wiem,że to ma związek z tym,że w zdarzeniu create mam tak to zdefiniowane i nazwane..jak usunę nazwę display z create i nic nie wstawię to nic mi się nie wyświetla i przycisk jest pusty..więc coś musiałem tam wpisać.. Reasumując.. Chciałbym aby w menu opcji przycisk jak przejdę w tryb okienkowy to wyświetlał mi się napis windowed nawet jak wejdę po raz drugi do tego menu opcji..póki nie przełączę się w tryb pełnoekranowy i analogicznie tak samo przy pełnym ekranie full screen chce żeby mi się w menu opcji wyświetlał nawet jak wrócę do tej opcji póki nie zmienię go na tryb okienkowy windowed. ok tak wygląda zaprogramowany przycisk 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(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(room_setup_controlls) } else if(selected=1) { room_goto(room_setup_sound) } 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(room_main_menu) } } draw draw_set_valign(1) draw_set_halign(1) draw_set_font(font_menu) 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_white,c_red,animation[i]) var s=options[|i] draw_text_transformed_color(x,y+(line_height*i),s,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...
Administratorzy gnysek Opublikowano 4 Lutego 2021 Administratorzy Udostępnij Opublikowano 4 Lutego 2021 Za dużo tego, żeby ktokolwiek czytał. Jeśli chcesz zadawać pytania, to musisz konkretnie, a nie ścianę kodu. Jeśli zmieniasz rozmiary okien, to musisz umieć dzielić i mnożyć, żeby ustalić proporcje. Poza tym korzystasz z GMS 1.4, które nie jest wspierane już trzeci rok, więc tam rzeczy działają inaczej i już nie bardzo nawet mam ochotę się cofać do różnic z wersją obecną, a akurat na tym tle są. Rozmiary okien, widoków, skalowania można ustawiać na różne sposoby - im więcej tym mieszasz, tym łatwiej wpaść w tarapaty, wiec zawsze, ale to zawsze sprawdź jakie są wartości wszystkiego i czy są odpowiednie proporcje - odpowiedzi powinny wtedy przyjść same. btw. if (window_get_fullscreen()) { options[|2]=("Fullscreen") } else { options[|2]=("Window") } Przecież napis się nie zmienia, bo go ustawiasz na sztywno w create (tworząc zawsze nową mapę) a zmieniasz tylko jak klikasz enter, wiec oczywiste, że się nie zmieni sam, bez kliknięcia. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 4 Lutego 2021 Autor Udostępnij Opublikowano 4 Lutego 2021 Dziękuję...pomogło...miałeś rację w zdarzeniu create na sztywno miałem przypisaną nazwę dla przycisku.. Wiem,że gms 1.4 jest nie wspierany od 3 lat,ale sporo osób jeszcze go używa..ba nawet znam takich co jeszcze używają wersję 8.1 Gnysku powiedz mi jeszcze... uszczuplę kod żeby nie wklejać tu wszystkiego.. czy ta część kodu powinna być w zdarzeniu alarm[0] lub dowolny inny alarm? bo jak wrzucę to do zdarzenia step to gui się psuje...więc mam to w alarmie i jest teraz dobrze.. czyli mam dokładnie tak // create display_set_gui_size(1280, 720) full_screen = -1; // step if (full_screen != window_get_fullscreen()) { full_screen = window_get_fullscreen(); } // alarm0 if (full_screen) { display_set_gui_maximize( 1, 1 ); } else { display_set_gui_maximise( room_width/1280,room_height/720 ); } No i druga ostatnia już sprawa...bo nie chce Cie już męczyć..przynajmniej dziś ;-) nie no żartuje...dużo mi pomogłeś i bardzo dziękuję Ci za pomoc.. Używam tego kodu do naprawy wyświetlania grafiki jak skończę grę i wracam do menu gry... i to ładnie działa..ale jak mam teraz nowy kod od ciebie to zakomenderowałem tą linijkę kodu display_set_gui_maximise() Ponieważ wtedy rozwala mi się menu GUI..raz jest ok,a raz nie..dlatego to wyłączyłem i tego zjawiska już nie ma.. ale pytanie,czy muszę tu wstawić jakieś wartości? czy wystarczy,że to wyłączyłem.. poniżej kod.. obj_poprawa_grafika create surface_resize(application_surface,room_width,room_height) //display_set_gui_maximise()//tu wyłaczylem tą linikę,bo przy włączonej tej funkcji psuje mi się całe gui w oknie gry obj_poprawa_grafika1 step if(instance_exists(obj_global_controller)) {with(obj_game_controller){instance_destroy()}} surface_resize(application_surface,room_width,room_height) //display_set_gui_maximise() //to samo wyłaczyłem bo włączenie tej funkcji psuje mi gui..na w oknie gry draw_texture_flush() Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 4 Lutego 2021 Administratorzy Udostępnij Opublikowano 4 Lutego 2021 Zjadłeś alarm[0] = 10 w step, bez tego alarm sie nigdy nie wykona. Nie wiem też po co zmieniasz application_surface, to się powinno zmieniać tylko jak zmianie ulega rozmiar renderowanego okna gry i tylko jak używasz application_surface, a nie wiem czy go w ogóle używasz. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 4 Lutego 2021 Autor Udostępnij Opublikowano 4 Lutego 2021 Używam jeszcze w jednym obiekcie aplication_surface..tak było od początku w tym silniku gry...tylko usunąłem tą linijkę którą mi zasugerowałeś żebym to zrobił,bo wychodziły wtedy dziwne anomalia z rozdzielczością Zostawiłem sobie tak: na pełnym ekranie mimo,że mam view ustawiony na 1280x720 to gra uruchamia się na pełny ekran i pokazuje 1920x1080 ok tak mi odpowiada..zresztą to już dawno jest standardem i większość monitorów to obsłuży.. Natomiast w oknie gry samo dostosowuje sobie proporcje ekranu tylko muszę ustawić szerokość np 720p lub inną dowolną obj_global_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]); //wersja podstawowa } co do alarmu nie zjadłem go..tylko celowo usunąłem bo jak jest włączony to znika mi pasek gui lub dziwnie się zachowuje..dlatego usunąłem tą linijkę Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 5 Lutego 2021 Administratorzy Udostępnij Opublikowano 5 Lutego 2021 Ale jak uniesz tą linijkę, to sie nie wykonuje reszta kodu. Zatem display_set_gui_maximize nie musisz uzywać, tak by wychodziło. Co do application_surface i viewów... no to tak jak sobie chcesz zrobić, tak musisz to ustawić, ja nie będę za Ciebie zgadywał. Musisz sam ustalić, czy na pełnym ekranie gra ma być powiększona czy 1:1, tak samo w trybie okienkowym. I samemu przeskalować to, przeliczyć proporcje itd. Nie jestem wróżką, żeby wiedzieć co chcesz osiągnąć, a application_surface, viewy i gui to trzy różne warstwy które mogą mieć różne rozmiary. Do tego application surface samemu powinno sie w jakimś post_draw rysować i wtedy też można to robić z innym rozmiarem niż 1:1, więc za dużo tu jest czynników i trzeba pod siebie wszystko ustawić po prostu, spokojnie to rozrysowując i przeliczając na kartce papieru. pankracy 1 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ę