Witam. Postanowiłem napisać prostą grę 2D w c++ i SFML w celach edukacyjnych. Miała to być prosta platformówka z możliwością wczytywania poziomów z plików. Świat w grze miał być podzielony na kratki, bo to chyba najprostszy sposób, by taki poziom zapisać do pliku. Udało mi się napisać wyświetlanie pojedynczych klocków, których pozycja była pobierana z pliku, oraz postać, która mogła skakać po tych klockach. Tworzenie map poprzez ręczne zapisywanie pozycji wszystkich klocków było bardzo uciążliwe, więc napisałem nawet edytor poziomów w oddzielnym projekcie. Oczywiście, w przypadku większych poziomów, obliczanie wszystkich klocków, które nawet nie znajdowały się w polu widzenia gracza było bez sensu, więc oczywistym rozwiązaniem było podzielenie mapy na sektory i obliczanie tylko tych potrzebnych.
Po tym długim wstępie, przechodzę do mojego problemu. Podzielenie mapy na sektory wcale nie poprawia wydajności, ponieważ zaledwie 200 klocków znajdujących się w polu widzenia gracza (kratka ma bok długości 20px, a sektor 100 kratek) wyraźnie spowalnia program. Domyślam się, że powinienem łączyć klocki ze sobą i symulować je jako większe obiekty, ale dalej zastanawiam się, jak tak mała liczba elementów może sprawiać problem dla komputera. Nie chce mi się wierzyć, że obliczenie moich 200 klocków (obliczenie tylko pozycji na ekranie) wymaga więcej mocy obliczeniowej, niż wygenerowanie przestrzeni trójwymiarowej w jakiejś grze 3D, która posiada tysiące elementów.
Optymalne połączenie klocków w większe elementy jest ciężkim zadaniem i nie wiem jak się za to zabrać. Jest to łatwe jeśli mapa jest "kwadratowa" i bez problemu można ją podzielić na prostokąty. Niestety, gdy jest ona bardziej nieregularna, nie potrafię wymyślić algorytmu, który podzieli mapę na jak największe prostokąty bez popełnienia błędu. Myślałem o tym jeszcze przed rozpoczęciem całego projektu, ale miałem nadzieję, że nie będzie problemu z obliczeniem kilkuset elementów w pobliżu gracza. A może powinienem zupełnie zmienić sposób myślenia? Jak zostało to rozwiązane w innych grach?