Dev.log(5) – budujemy mapę!

Tworzenie mapy to niemały problem. Nasza mapa będzie ewoluowała razem z całym projektem. Wiele będzie trzeba w niej modyfikować, niektóre elementy zostaną zmienione, inne usunięte, jeszcze inne dodane. Każdy element będzie miał swoje cechy, które będą wpływały na jego zachowanie po umiejscowieniu na mapie.

Bloczek

Każdy element składał się będzie z czterech elementów. Pozycja to podstawa naszej mapy, następnie znajdziemy ID bloku, który znajduje się w tle, za graczem (int background). Potem mamy blok na poziomie gracza, z nim będzie sprawdzana kolizja (int userLevel). Ostatnim elementem jest int foreground, który będzie blokiem znajdującym się przed graczem – zazwyczaj jakieś elementy dekoracyjne.

class MapElement {
private:
    Vector2i position;
    int background;
    int userLevel;
    int foreground;

public:
    const Vector2i &getPosition() const;
    void setPosition(const Vector2i &position);
    int getBackground() const;
    void setBackground(int background);
    int getUserLevel() const;
    void setUserLevel(int userLevel);
    int getForeground() const;
    void setForeground(int foreground);
};

Nie możemy jednak zapomnieć o ważnym elemencie naszej gry. Niektóre z urządzeń będą łączone przewodami lub kanałami. Te rzeczy zbudujemy sobie potem i nie będą one elementem mapy.

Mapa

Teraz musimy określić jak będzie działała nasza mapa.

Zrób sobie tablicę i po problemie.

Said someone…

No nie całkiem. Potrzebujemy bardziej rozbudowanych konstrukcji. W tym przypadku nie mam pomysłu na to. Tablica to nie jest dobry pomysł, będziemy wykorzystywali budowę całej mapy za pomocą pewnego rodzaju drzewa (nazwa ze względu na obrazek poniżej).

Mapa, będzie przechowywała obszary. Obszary będą zawierały po 1024 elementy (32 x 32). Element to pojedynczy kafelek/bloczek, który zawiera jeden ID elementu. Daje nam to możliwość wczytywania tylko tych obszarów, które tego wymagają i nie będzie potrzebne ładowanie całej mapy. Zaoszczędzimy na tym pamięć i zoptymalizujemy grę jak się tylko będzie dało. Wczytywane obszary to będą tylko niebieskie. Zielone to aktualnie wyświetlany content na ekranie. Czerwony to obszar pominięty.

 

Tak oto otrzymujemy budowę mapy jak np. w grze Minecraft. Zobaczymy jak sprawdzi się to w praktyce już wkrótce.

Podsumowanie

Mamy piękną grę, lecz jeszcze bardzo dużo przed nami. Czas wziąć się do pracy.

Wiesz co robić! Wpadaj na moje media społecznościowe i do zobaczenia już wkrótce!

#shareShare on FacebookShare on Google+Tweet about this on TwitterShare on TumblrPin on PinterestShare on LinkedInShare on VKShare on RedditEmail this to someone