Kontynuując pytanie o proporcje , jestem zainteresowany usłyszeniem, czego używają inni ludzie podczas pracy nad systemami 2D UI (najprawdopodobniej własnymi rozwiązaniami własnymi). W szczególności, jak radzisz sobie z układami współrzędnych. Moim zdaniem istnieją trzy opcje:
- Współrzędne zakodowane na stałe (np .: 0 -> 720, 0 -> 576)
- Znormalizowane współrzędne (0,0 -> 1,0, 0,0 -> 1,0), odwzorowane na rzeczywiste współrzędne przed renderowaniem
- Współrzędne wirtualne (np .: 0 -> 1600, 0 -> 1000), odwzorowane na rzeczywiste współrzędne przed renderowaniem
Kodowanie jest oczywiście przydatne tylko wtedy, gdy jesteś na stałej platformie i wiesz z góry, jakie są twoje współrzędne przestrzeni ekranu, lub jeśli jesteś przygotowany do tworzenia układów ekranu dla każdego możliwego zestawu wymiarów ekranu.
Znormalizowane współrzędne są ładne, ale cierpią z powodu niejednoznaczności, gdy proporcje ekranu nie są stałe (np. 0,75 odwzorowuje inną fizyczną współrzędną podczas pracy w trybie panoramicznym niż w przypadku 4: 3). Ponadto dla autorów deklarowanie elementu interfejsu użytkownika jako 0,2 (0,2 x 0,2) jest naprawdę sprzeczne z intuicją, ale okazuje się, że nie jest kwadratowe podczas renderowania.
Współrzędne wirtualne są jednoznaczne, ale występują na nich te same problemy, co znormalizowane współrzędne na etapie odwzorowywania: niewielka rozbieżność dziesiętna może powodować błędy „jeden po drugim”, co oznacza, że elementy interfejsu, które powinny być ułożone, mają teraz szew między nimi.
Podobnie, gdy masz ekran o stałej rozdzielczości, zarówno znormalizowane, jak i wirtualne współrzędne oznaczają, że bardzo trudno jest zagwarantować odwzorowanie 1: 1 między precyzyjnie spreparowanymi pikselami artysty na obrazie interfejsu użytkownika a pikselami na ekranie, co oznacza, że ryzykujesz nieprzyjemne skalowanie artefaktów (zakładając, że renderujesz jako teksturowane kwadraty na ekranie).
Zastosowaliśmy wirtualne podejście do współrzędnych, aby uniknąć niejednoznaczności co do proporcji obrazu. Podczas renderowania na ekran 16:10 przestrzeń interfejsu użytkownika wynosi (0,0) -> (1600,1000), ale podczas renderowania do 4: 3, użyteczna przestrzeń interfejsu użytkownika to (133,0) -> (1467 , 0).
Czy są jakieś lepsze rozwiązania, których po prostu nie jestem świadomy? Czy są jakieś dobre strategie minimalizacji problemów, jakie mają te 3 podejścia?
Wiele zależy od rodzaju gry i sytuacji. W przypadku szybkich i brudnych prototypów wolę planować interfejs użytkownika na papierze milimetrowym, zapisywać listę współrzędnych numerycznych dla stałego rozmiaru okna i wszystko kodować na stałe - dla mnie jest to łatwiejsze i szybsze. Ale w przypadku „prawdziwego” projektu, w którym chciałbyś mieć okna o zmiennej wielkości lub alternatywne rozdzielczości ekranu, to oczywiście nie byłoby idealne, a jakieś rozwiązanie pozwalające na skalowanie w obu kierunkach byłoby lepsze.
źródło