BoberRS Temat założony przez niniejszego użytkownika |
Allegro 4.x - efektywne wczytywanie dużych bitmap » 2014-08-01 15:57:08 Od jakiegoś czasu zajmuję się projektowaniem prostej platformówki. Chciałbym powiększać swoje poziomy i tworzyć coraz bardziej złożone mapy, pojawia się jednak problem przy ich wczytywaniu. Średnia mapa, jaką obecnie tworzę, ma 15.000 x 10.000 px i zapisana w postaci png zajmuje mniej niż 1 MB. Jednak po wczytaniu jej w grze, okazuje się, że prawie cała dostępna pamięć RAM (około 3 GB) jest zajęta. Podejrzewam, że Allegro przechowuje wczytane mapy w formacie odpowiadającym bmp, co uzasadniałoby obciążenie pamięci.
Tu pojawia się problem: jak wczytywać większe bitmapy, powiedzmy wielkości 50.000 x 10.000 px?
Raczej nie ma szans, żeby takiego kolosa wczytać w całości. Sensowne wydaje się podzielenie mapy na mniejsze kafelki i wczytywanie ich na bieżąco podczas rozgrywki. Jednak nawet wczytanie i wyświetlenie paska o wysokości ekranu (1280 px) i szerokości 100 px wywołuje utratę płynności nie do zaakceptowania podczas rozgrywki. Odwołanie się do pamięci z dysku chyba musi trwać długo - nawet wczytywanie kafelków wielkości 10 x 10 px powoduje, że gra zaczyna przycinać.
Skoro tak, do głowy przychodzą mi trzy dość drastyczne rozwiązania, jednak wolę spytać o radę zanim zastosuję któreś z nich:
1. Można by tworzyć mapy typu Mario, gdzie liczba kafli jest ograniczona i występują one powtarzalnie. Wtedy dałoby się wczytać wszystkie kafle przed rozpoczęciem rozgrywki. Wydaje mi się jednak, że tworzenie mapy w ten sposób byłoby nie tylko dużo trudniejsze i bardziej czasochłonne, ale również ograniczałoby wolność artystyczną...
2. Niewykluczone, że wina leży po stronie biblioteki Allegro 4.x, która może jest przestarzała i zbyt powolna. Czy inne biblioteki przechowują w pamięci podręcznej wczytaną grafikę w postaci skompresowanej? A może wczytują obrazy szybciej? Jeśli tak, to za którą bibliotekę dobrze się zabrać?
3. A może moje wymagania są zbyt wygórowane i rząd typu 10.000 x 10.000 px jest absurdalnie duży jak na prostą platformówkę? Może powinienem obniżyć jakość grafiki (która moim zdaniem i tak nie jest powalająca)?
Dzięki za przeczytanie postu. |
|
pekfos |
» 2014-08-01 16:46:13 Tak się map nie robi. Poczytaj o tzw mapach kafelkowych. |
|
BoberRS Temat założony przez niniejszego użytkownika |
» 2014-08-01 16:56:00 Domyślam się, że rozwiązaniem jest podzielenie całej mapy na mniejsze fragmenty, które nazywa się kafelkami. Próbowałem się dowiedzieć coś na ten temat, jednak z tego co zrozumiałem, jest to równoważne opisanemu w poprzednim poście punktowi pierwszemu - mamy kilka rodzajów kafli, a umieszczenie ich obok siebie w odpowiedniej konfiguracji tworzy całą mapę. Jednak wydaje mi się, że taka mapa jest bardzo powtarzalna i nie pozwala tworzyć urozmaiconych, ciekawych lokacji. |
|
pekfos |
» 2014-08-01 16:59:16 Kwestia ilości różnych kafli. |
|
BoberRS Temat założony przez niniejszego użytkownika |
» 2014-08-01 17:07:53 W takim razie tworzenie każdej platformówki skazane jest na ograniczenia narzucane przez powtarzalność kafli? Zdaje mi się, że wtedy każda mapa wyglądałaby na... dość kanciatą i przewidywalną. W końcu optymalność tej metody polega właśnie na tym, że kafelki się powtarzają na całej rozciągłości mapy, czyli plansza wygląda dość monotonnie, ewentualnie z drobnymi urozmaiceniami (które też przecież muszą się powtarzać). Jeżeli tak tworzy się wszystkie współczesne platformówki, to oczywiście nie mam tu nic do gadania, jednak mam pewne wątpliwości, czy nie można zrobić tego inaczej. |
|
pekfos |
» 2014-08-01 17:22:27 Kwestia ilości różnych kafli. Jak będziesz mieć 100 podobnych i pasujących do siebie tekstur trawy i będziesz je losowo wykorzystywać, to nikt nie zauważy jakiegoś powtarzającego się wzorca. A 100 takich tekstur będzie tysiące razy optymalniejsze pamięciowo niż jedna wielka tekstura w roli całej mapy. |
|
BoberRS Temat założony przez niniejszego użytkownika |
» 2014-08-01 17:47:03 Oczywiście idea metody brzmi bardzo sensownie i mam świadomość, że to rozwiązałoby problem obciążenia pamięci. Mam jednak sporo obaw odnośnie praktycznego zastosowania tej metody w grze i wpływu metody na ogólną jakość grafiki i wizualny odbiór gry. Poza tym gdyby nawet ustalić wielkość kafla 100 x 100 px, to zapisanie wyglądu mapy wielkości 50.000 x 10.000 px sprowadziłoby się do ręcznego wklikania 50.000 liczb oznaczających numer kafelka... chyba że źle zrozumiałem istotę metody. Zwyczajnie z praktycznego punktu widzenia wydaje mi się to niewykonalne lub wykonalne w bardzo dużym przedziale czasowym. |
|
pekfos |
» 2014-08-01 18:00:57 O wiele łatwiejsze i szybsze niż rysowanie mapy jako jednego obrazu. Jak sobie napiszesz edytor map, to nie będziesz musiał 'wklikać' tych 50k liczb. Ogólna jakość grafiki zależy od grafiki, a odbiór wizualny gry - eh - Kwestia ilości różnych kafli.. |
|
« 1 » 2 |