hgter Opublikowano 21 Listopada 2015 Udostępnij Opublikowano 21 Listopada 2015 Witajcie Problem jest pewnie banalny, ale coś poległem. W przypadku roomów o wielkości view korzystam z poniższego kodu wywoływanego na początku wczytywania każdego roomu (to nie jest mój kod, przyznaję): GML if os_type == os_windows { device_w = window_get_width(); device_h = window_get_height(); } else { device_w = display_get_width(); device_h = display_get_height(); } window_set_size(device_w, device_h); game_w = room_width; game_h = room_height; device_aspect = device_w / device_h; game_aspect = game_w / game_h; if device_aspect/game_aspect>=1 { view_wview[0] = game_h * device_aspect; view_hview[0] = game_h; offset_y=0; offset_x = (game_w - view_wview[0])/2; view_xview[0] = offset_x; view_yview[0] = room_height - game_h; } else { view_wview[0] = game_w; view_hview[0] = game_w / device_aspect; offset_x=0; offset_y = (game_h - view_hview[0])/2; view_xview[0] = room_width-game_w; view_yview[0] = offset_y; } view_wport[0] = device_w; view_hport[0] = device_h; idt=tile_add(til_outofscreen, 0, 0, 15, 15, -300, -300, 99999); tile_set_scale(idt, 20, 120); idt=tile_add(til_outofscreen, 0, 0, 15, 15, 1280, -300, 99999); tile_set_scale(idt, 20, 120); idt=tile_add(til_outofscreen, 0, 0, 15, 15, 0, -300, 99999); tile_set_scale(idt, 120, 20); idt=tile_add(til_outofscreen, 0, 0, 15, 15, 0, 720, 99999); tile_set_scale(idt, 120, 20); Celem tego jest dopasowanie roomu do wyświetlacza. Proporcje roomu zostają zachowane a jeżeli wyświetlacz ma inne to wyświetlane są czarne paski (robię to czarnym rozciągniętym tilem na samym końcu - bez tego w miejscu czarnych pasków wyświetla się tło roomu). Problem jest gdy roomy są większe niż view. Tu rzecz w tym, że takie skalowanie dla większych roomów teoretycznie nie ma sensu. Bo nie ma sensu wyświetlać pasków jeżeli room jest większy bo można bez problemu użyć całego wyświetlacza. Tyle, że ja mam roomy o różnej wielkości i chciałbym aby były wyświetlane tak samo - czyli z paskami. Ma ktoś z Was pomysł jak uzyskać dla dużych roomów view o takiej samej proporcji jak dla mniejszych? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
baca Opublikowano 22 Listopada 2015 Udostępnij Opublikowano 22 Listopada 2015 Zamiast tila nie lepiej użyć koloru roomu(background color w zakładce backgrounds roomu) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
hgter Opublikowano 22 Listopada 2015 Autor Udostępnij Opublikowano 22 Listopada 2015 Zamiast tila nie lepiej użyć koloru roomu(background color w zakładce backgrounds roomu) Tylko, że to nie działa. Jeżeli nie dam tila to wyświetla się to co teoretycznie jest poza roomem z tłem roomu. Ustawienie koloru roomu nic nie zmienia tutaj. Jeżeli nie dam grafiki na tło to okno przyjmuje ten kolor (także na tym obszarze gdzie normalnie mam paski), ale normalnie wszędzie mam grafikę tła. Myślę, że jest to efekt wyłączonych surface. I dokładnie taki efekt by mnie zadowalał w przypadku dużych roomów (paski sobie dodaję ręcznie i jest ładnie). Ale tam albo mam zapełniony cały ekran normalną treścią roomu (także tam gdzie w małych rumach jest "pustka" która przykrywam czarnym tilem) i nie ma jak dać pasków albo room jest zmniejszony tak, że się cały mieści. Teraz rozwiązałem to tak, że duże roomy wyświetlam na całej powierzchni ekranu bez względu na proporcje (na jednych urządzeniach w danym momencie widać trochę mniej niż na innych) a w przypadku małych tam gdzie były czarne tile mam rozszerzone grafiki stanowiące "ramkę" roomu. W rezultacie to ile tej ramki widać jest zależne od urządzenia. Efekt nie jest zły, ale jednak wolałbym paski. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
hgter Opublikowano 22 Listopada 2015 Autor Udostępnij Opublikowano 22 Listopada 2015 Cały dzień zabawy i się udało:) Może komuś się przyda. Kluczem było odpowiednie użycie danych liczonych dla małych roomów. Przy uruchamianiu pierwszego małego roomu wywoływany jest kod z pierwszego posta. Ale po nim dodałem: GML global.ekran_szer=1280+2*abs(offset_x) global.ekran_wys=720+2*abs(offset_y) global.pasek_x=offset_x global.pasek_y=offset_y Co wylicza mi dane potrzebne do wyświetlenia dużego roomu (liczby to wielkość view czyli 1280x720) Przy jego starcie wywołuję: GML view_wview[0]=global.ekran_szer //1280 view_hview[0]=global.ekran_wys //800 view_xview[0]=global.pasek_x //0 view_yview[0]=global.pasek_y //-40 view_wport[0]=device_w //pobieram wcześniej view_hport[0]=device_h Wartości w komentarzach to wartości podczas skalowania view 1280x720 do ekranu 1920x1200 - podane dla przykładu. To powoduje, że jeżeli proporcje ekranu różnią się od mojego pierwotnego view to na ekran idzie też trochę tego co znajduje się poza view (co powoduje, że przy krawędziach wyświetlają się dane spoza roomu). Potem te dodatkowe obszary przysłaniam czarnymi paskami. Mamy natomiast dwa "ale". Po pierwsze, ponieważ wyświetlam także obszary spoza roomu, przestaje poprawnie działać podążanie view za obiektem. To trzeba samemu zakodować. Podobnie jeżeli mamy ręcznie przesuwane view. I po drugie, tym razem nie możemy czarnych pasków narysować tilem, bo te paski muszą się przy przesuwaniu view także przesuwać. Musimy je narysować w odpowiednich miejscach zależnych od view. Całość działa dokładnie tak jak miała. Jeżeli proporcja ekranu się nie zgadza to pojawiają się dodatkowe paski zarówno przy roomach o wielkości view jak i większych. Rozwiązanie banalne, ale zabawy było od groma. PS A miałem grać w Fallouta cały dzień. 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ę