Skocz do zawartości
AdamW

[GM:Studio] Rożne rozmiary View w Roomach

Rekomendowane odpowiedzi

Witam serdecznie,

 

W związku z tym, że GM:Studio Standard zostało niedawne udostępnione za darmo, postanowiłem przeportować mój projekt. Niestety pojawił się dziwny problem który nie do końca rozumiem, bo GM:Studio nie używałem. Sprawa wygląda tak że roomy mają różnego rozmiaru View'y, a same View'y w tychże roomach są też na starcie gry odpowiednio ustawiane w zależności od ustawień. W GM8 wszystko działało ok, kiedy przechodziłem do rooma w którym view miał inne wymiary, okno się przeskalowywało i wszystko cacy, tak samo room_set_view poprawnie ustawiało rozmiary view w trakcie gry.

Wygląda na to że w GM:Studio coś się mocno pozmieniało i działa to bardzo dziwnie. Okno gry nie dopasowuje się do rozmiaru view i w dodatku dzieją się straszne rzeczy z rysowaniem (jakieś takie dziwne prostokąty i czarne pola):

 

wtf.png

 

Jak powinno wyglądać:

 

148.png

 

Oto co próbowałem zrobić: Mam pierwszy room rIntro (640x480, view tak samo), w nim jest wszystko OK, następnie przechodzi do rLogin (400x300, view tak samo), ale niestety okno dalej jest rozmiaru 640x480, view natomiast skaluje się tak by wypełnić całe okno (nie ma jednak takich klockow z rysowaniem jak w roomach z grą :P).

Próbowałem dodać coś takiego w Room Start obiektu kontrolującego grę (persistent):

GML
if ( room == rLogin ) {

window_set_size(400, 300);

surface_resize(application_surface,400,300);

}

... żadnego efektu :)

 

Nie mam pojęcia co się dzieje i szczerze mówiąc nie mam pomysłu jak temu zaradzić. Będę bardzo wdzięczny za pomoc od kogoś kto siedzi dłużej w GM:Studio.

 

Pozdrawiam :)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

GMS rozmiar okna ustala pierwszy room i nigdy nie może się już zmienić. To takie ograniczenie w stosunku do GM8.1

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Chcesz powiedzieć że nie da się zrobić teraz gry która pracuje w różnych rozdzielczościach ;0?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Funkcja window_set_size zmienia rozmiar okna aplikacji, view_wview i view_hview zmieniają rozmiar widoku gry. Nie da się zmienić rozdzielczości ekranu, o ile dobrze rozumiem.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Ale nadal window_set_size działa tylko w 1 roomie. Potem już nie można zmieniać rozmiaru o ile dobrze pamiętam.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Ale trzeba pamiętać o resize application_surface też :)

 

Edit: a w ogóle to w tutorialach i demach z menu startowego GM:S mozna pobrac przykład zmian rozdziałki chyba.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Dobra, czyli żeby ustalić rozmiar ekranu PO wczytaniu z pliku konfiguracyjnego w pierwszym roomie, to muszę ustawić room_set_view dla każdego rooma oraz window_set_size w PIERWSZYM roomie, dobrze rozumiem? w Game Start da radę?

 

Swoją drogą te śmieszne kwadraty biorą się stąd że te grafiki były ładowane z zewnątrz. Z tego co czytam to w GM:Studio jest to gorsze rozwiązanie i lepiej trzymać wszystko w projekcie (zobaczymy ile będzie ważył i się ładował/zapisywał :D), bo się robią różne takie hocki klocki.

 

@Amaterasu: moje próby wywoływania window_set_size spełzały na niczym :P Używasz najnowszego GM:S?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
Dobra, czyli żeby ustalić rozmiar ekranu PO wczytaniu z pliku konfiguracyjnego w pierwszym roomie, to muszę ustawić room_set_view dla każdego rooma oraz window_set_size w PIERWSZYM roomie, dobrze rozumiem? w Game Start da radę?

 

Swoją drogą te śmieszne kwadraty biorą się stąd że te grafiki były ładowane z zewnątrz. Z tego co czytam to w GM:Studio jest to gorsze rozwiązanie i lepiej trzymać wszystko w projekcie (zobaczymy ile będzie ważył i się ładował/zapisywał :D ), bo się robią różne takie hocki klocki.

 

@Amaterasu: moje próby wywoływania window_set_size spełzały na niczym :P Używasz najnowszego GM:S?

 

Niestety w wersji 1.2 GMS zmiana rozmiaru działała, od 1.3 kaszani produkując zmętnienie obrazu. Nie da się przeskalować view tak aby rozmiar się zmienił, a jeden piksel pozostał jednym pikslem - zawsze cośtam interpoluje. Zgłaszałem buga, ale mają inne pilniejsze. Trzeba czekać...

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Ja nie widziałem żadnego problemu z blurem, może coś źle robisz ? Co prawda skrypt który wszystko mi ustawia ma 100 linijek żeby policzyć proporcje GUI/VIEW/DISPLAY/WINDOW ale działa.

 

Trzeba:

zmienić rozmiar okna

zmienić rozmiar view (można za pomocą room set view i pętli i= 0; while(room_exists(i)) {room_set_view(...); i++} ) w tym również port size

zmienić rozmiar gui albo skorzystać z display_set_gui_maximise

zmienić rozmiar application_surface (tylko 1.3)

 

i sprawdzić jak jest ustawione keep aspect ratio bo to w 1.2 i w 1.3 działa inaczej (przez application surface). Zresztą application surface tez mozna rysować jak się chce i gra moze miec rozdziałkę HD, viewy 320x240, a surface będzie rysowany ręcznie przeskalowany. Fajny jest np. ten wpis na blogu: http://yoyogames.com/tech_blog/45

 

I tu jest świetny temat na ten temat, właśnie do 1.3: http://gmc.yoyogames.com/index.php?showtopic=565614

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
zmienić rozmiar application_surface (tylko 1.3)

 

Wielkie dzięki Gnysek! Tego mi brakowało:

GML
surface_resize(application_surface, display_get_gui_width(), display_get_gui_height());

:) Teraz romb wyglada jak romb, a nie jak zęby od piły! 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

No nie wiem czy na rozmiar gui to dobry pomysł, to raczej GUI do czegoś powinno byc rozszerzane (moze window size?) i ten surface tez, żeby jaj nie było :)

Co do rombu poczekaj na kolejny update EAP, gdzie będzie wygładzanie vertexów, to bedzie mozna dopiero fajnie kształty malować:

 

Z ząbkami: BrYmaYiCcAIEy-M.png

Bez: BrYmkmqCEAA9Gn1.png

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Okej, tak wygląda mój skrypt wywoływany w Game Start:

GML

if ( argument1 == r1024x768 ) {

for (e=0; e<argument0; e+=1) {

if ( global.LocationsTable[e,3] > 0 )

room_set_view(global.LocationsTable[e,3],0,1,0,0,1024,768,0,0,1024,768,512,384,-1,-1,oSelfPlayer);

}

room_set_view(rLogin,0,1,168,0,1024,768,0,0,1024,768,512,384,-1,-1,noone);

room_set_view(rCharacterCreate,0,1,168,0,1024,768,0,0,1024,768,512,384,-1,-1,noone);

 

window_set_size(1024,768);

display_set_gui_size(1024,768);

surface_resize(application_surface, 1024, 768);

}

else

if ( argument1 == r1360x768 ) {

for (e=0; e<argument0; e+=1) {

if ( global.LocationsTable[e,3] > 0 )

room_set_view(global.LocationsTable[e,3],0,1,0,0,1360,768,0,0,1360,768,680,384,-1,-1,oSelfPlayer);

}

room_set_view(rLogin,0,1,0,0,1360,768,0,0,1360,768,680,384,-1,-1,noone);

room_set_view(rCharacterCreate,0,1,0,0,1360,768,0,0,1360,768,680,384,-1,-1,noone);

 

window_set_size(1360,768);

display_set_gui_size(1360,768);

surface_resize(application_surface, 1360, 768);

}

 

Viewy się już ładnie ustawiają, ale nadal okno jest rozmiaru 1360x768, gdy ustawimy rozdziałkę 1024x768 (tak jak domyślnie rozmiar pierwszego rooma) i za chiny nie chce się pomniejszyć. (zamiast tego są czarne pasy z boku)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
Viewy się już ładnie ustawiają, ale nadal okno jest rozmiaru 1360x768, gdy ustawimy rozdziałkę 1024x768 (tak jak domyślnie rozmiar pierwszego rooma) i za chiny nie chce się pomniejszyć. (zamiast tego są czarne pasy z boku)

Wydaje mi się, że problem polega na tym, iż kolejne roomy muszą być ustawione tak samo jak pierwszy, a tego pierwszego nie da się ustawić za pomocą room_set_view - "can be used to define a view within any room in your game except the current one".

Trzeba siermiężnie:

GML
view_xport[0] = 0;

view_xview[0] = 0;

view_yport[0] = 0;

view_yview[0] = 0;

view_hport[0] = w_h;

view_hview[0] = w_h;

view_wport[0] = w_w;

view_wview[0] = w_w;

view_enabled = true;

view_visible[0] = true;

window_set_size(w_w, w_h);

surface_resize(application_surface, w_w, w_h);

//a teraz kolejny room:

room_set_view(room_game, 0, true, 0, 0, w_w, w_h, 0, 0, w_w, w_h, 0, 0, 0, 0, -1);

room_set_view_enabled(room_game, true);

//itd.</span>

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Tylko 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ę tutaj.

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×