Ogólnym zaleceniem w programowaniu grafiki 2D jest stosowanie bitmap dopasowanych do rozdzielczości ekranu/wielkości okna. Co, jak się okazuje, nie zawsze jest proste i bezproblemowe. Zakładając, że nasza gra ma za zadanie wyświetlać pełnoekranowe bitmapy, które docelowo wyglądać mają jak najładniej, a do tego szybko się ładować, wypadałoby mieć przejrzyste, ładne rozwiązanie.
Jak wiadomo, im mniejsza bitmapa, tym szybciej się wczyta. Dotyczy to zwłaszcza plików kompresowanych (jpg/png) - operacje dyskowe wciąż są koszmarnie wolne. Rozwiązaniem więc jest wczytywanie najmniejszego możliwego pliku. Weźmy na przykład 320x240 jpg - standardowe proporcje pasujące do większości rozdziałek, do tego bardzo małe, ładują się naprawdę szybko. Problem w tym, że zeskalowane do 1920x1200 będzie wyglądać... powiedzmy, że ładne to nie będzie.
Może więc pójść w drugą stronę i wybrać bitmapy w rozmiarze maksymalnym? 1920x1200 skalowane w dół wciąż powinno wyglądać nieźle, a do tego rozwiązuje nam problem różnych rozdzielczości. Cóż... nie do końca. Po pierwsze: różne aspect ratio rozdzielczości spowodują rozciąganie w jedną lub drugą tekstury; po drugie: skalowanie w dół nie zawsze wygląda ładnie. Niektóre krawędzie przy mocnym downscalingu wyglądają mocno nienaturalnie.
Stąd proponuję rozwiązanie, które (wg. tego, co sprawdziłem) okazuje się być idealne: generujemy podstawową bitmapę np. w rozdzielczości 1920x1200, do tego kilka innych w popularnych rozdzielczościach (800x600, 1280x800, 1280x1024 itd.). Wczytując, sprawdzamy najpierw, czy istnieje bitmapa dla obecnej rozdzielczości ekranu. Jeśli tak - wczytujemy wersję dedykowaną. Jeśli nie - wczytujemy wersję ogólną, opierając się na skalowaniu.
Zostaje jeszcze kwestia nawewnictwa. Są Właściwie dwie szkoły: w pierwszej ścieżka jest na zasadzie "res\800x600\menu\background.png" / "res\default\menu\background.png", w drugiej na zasadzie "res\menu\background_800x600.png" / "res\menu\background.png". Ze swojej strony polecam drugie rozwiązanie - łatwiej jest uzależnić tylko niektóre z bitmap od rozdzielczości, do tego wewnątrz danego zbioru logicznego widoczne są wszystkie pliki. Rozwiązanie pierwsze ma przewagę właściwie tylko w jednym przypadku: gdy zakładamy możliwość dodawania własnych paczek z rozdzielczościami/doinstalowywania wspomnianych bez ingerencji w zawartość już istniejących folderów.
Brak komentarzy:
Prześlij komentarz