Jak ustawić niezależność rozdzielczości / gęstości gry libGDX? Czy istnieje sposób, aby określić rozmiary obrazu jako „bezwzględne” niezależnie od podstawowej gęstości?
Tworzę bardzo prostą grę dla dzieci; tylko kilka ikonek wyświetlanych na ekranie i trochę tekstu dla menu (przede wszystkim menu opcji). Chcę wiedzieć: w jaki sposób mogę uniezależnić rozdzielczość moich ikonek / czcionek? (Owinąłem je na własne zajęcia, żeby było łatwiej).
Ponieważ jest to prosta gra dla dzieci, nie muszę się martwić o „obszar gry”; Chcę wykorzystać jak najwięcej miejsca na ekranie.
To, co robię teraz, co wydaje się bardzo niepoprawne, to po prostu tworzenie obrazów odpowiednich dla dużych rozdzielczości, a następnie skalowanie w dół (lub rzadko w górę), aby dopasować do rozmiaru ekranu. Wydaje się, że działa to dobrze (w wersji na komputery), nawet z liniowym mapowaniem moich tekstur, ale mniejsze rozdzielczości wyglądają brzydko.
Wydaje się to również leżeć w obliczu „niezależnych od urządzenia pikseli” Androida. A może coś mi brakuje, a libGDX już się tym jakoś zajmuje?
Jak najlepiej to rozwiązać? Znalazłem ten link; czy to dobry sposób na rozwiązanie problemu ?: http://www.dandeliongamestudio.com/2011/09/12/android-fragmentation-density-independent-pixel-dip/
Wspomina o sterowaniu obrazami, ale nie wspomina o tym, jak określać rozmiary czcionek / obrazów niezależnie od ich gęstości.
Odpowiedzi:
Ponieważ w libgdx można odczytać gęstość urządzenia i renderować czcionki podczas działania , używam tego rozwiązania, aby uzyskać rozmiar czcionki niezależny od gęstości:
źródło
Aby to osiągnąć w libgdx, możesz użyć „aparatu ortograficznego”, w którym ustawiasz rozmiar, którego chcesz użyć, aw każdej rozdzielczości możesz zobaczyć wszystkie swoje obrazy skalowane do tego rozmiaru (używam 800X480, ponieważ jest to większy ekran w Androidzie ) i działa dobrze :)
źródło
Uważam, że „niezależne od urządzenia piksele” Androida to tylko miarka do klasyfikacji urządzeń i nie są w rzeczywistości dostępne jako piksele do renderowania. Więc nie przegapisz żadnej magicznej infrastruktury do rozwiązywania DPI. O ile rozumiem tutaj stan techniki, odkryłeś wszystkie opcje. Istnieją dwa podstawowe podejścia do obsługi różnych urządzeń:
Oczywiście możesz wykonać kilka kombinacji (wybranie z grubsza dokładnego obrazu, a następnie skalowanie go) lub zastosować inne podejście do różnych elementów interfejsu użytkownika (np. Wcześniej istniejące obrazy dla czcionek / tekstu i dynamiczne skalowanie dla gry duszki).
To, co stara się zrobić w konkretnej grze, może naprawdę zmienić to, które podejście ma większy sens. Na przykład, jeśli masz menu ekranowe, upewnij się, że przyciski mają rozsądną wielokrotność wielkości palca (więc przycisk jest zawsze łatwy do naciśnięcia, ale nie jest większy niż to konieczne w duże urządzenia, takie jak tablety). Alternatywnie, jeśli próbujesz zbudować grę logiczną, w której chcesz mieć pewność, że cała łamigłówka jest widoczna na raz, musisz przeskalować elementy, aby pasowały do ekranu (na przykład za pomocą kółko i krzyżyka) być może chciałbyś, aby każdy element wykorzystywał około 1/3 ekranu).
Sądzę, że w przypadku czcionek o bardzo drobnych szczegółach będziesz chciał mieć wiele wstępnie renderowanych obrazów z tekstem, a następnie wybierz najlepiej dopasowane. Przyciski mogą więc zmieniać swój względny kształt / rozmiar z jednego urządzenia na drugie, ale ogólnie zawsze będą ładnie wyglądać.
Sprawdź gry Mario Zerchner's Beginning na Androida, aby uzyskać omówienie problemów i rozwiązań. Zauważ, że Mario jest autorem libGDX, więc podejście książki odzwierciedla libGDX jeden (zauważ, że nie są one jeden do jednego, książka obejmuje pisanie biblioteki podobnej do libGDX, ale nie samej libGDX).
źródło
Jednym ze sposobów jest zdefiniowanie minimalnego współczynnika proporcji i maksymalnego współczynnika proporcji dla gry. Będą to współczynniki, które chcesz wesprzeć. Następnie musisz użyć rzutni, która jest teraz dostępna w libGdx. Rzutnia skaluje Twój świat zgodnie z podanymi ustawieniami.
Istnieje kilka rodzajów rzutni i musisz wybrać ten, który jest najbardziej odpowiedni dla twojej gry.
Możesz na przykład użyć ExtendViewport i naprawić albo wysokość, albo szerokość i obliczyć drugą. Następnie upewnij się, że cała grafika jest widoczna w minimalnym formacie. Rozszerz rzutnię przeskaluje twoją grafikę do właściwego współczynnika proporcji bez zniekształcania grafiki. Jednak ExtendViewport działa poprzez dodanie dodatkowej przestrzeni do twojego świata, więc powinieneś także zapewnić grafikę dla tła, która na przykład obejmuje cały zakres pokrytych współczynników proporcji, gdy świat jest mniejszy niż twój maksymalny współczynnik proporcji, dodatkowa część grafiki nie będzie wykazać.
źródło