Gra 2D, część 3: Wyświetlanie przewijanej mapy
18.01.2010 - Łukasz Milewski
![]() ![]() Poprzedni artykuł - poruszanie postacią Następny artykuł - Hall of Fame Plan działaniaWitaj! Tym razem zajmiemy się mapą gry. Na początku wczytamy z pliku opis poziomu. W drugim kroku stworzymy jego reprezentację graficzną. Następnie nauczymy gracza poruszać się po mapie i jednocześnie zaprogramujemy kamerę tak, aby był on na środku ekranu. Na koniec dodamy kilka funkcji. Gracz nie będzie mógł cofnąć się do miejsca, które stracił z widoku. Dodatkowo, gdy gracz zbliży się do lewej lub prawej krawędzi, mapa przestanie się przesuwać i jego postać nie będzie musiała być już w środku ekranu. Jak będziemy wyświetlali mapę?Czym jest mapa (siatka) kaflowa? Wyobraźmy sobie, że dzielimy ekran na prostokąty, jak tabliczkę czekolady. Każdy z tych prostokątów to jedno pole. Każde pole może mieć określony typ, co oznacza, że może być np. puste lub zajęte. My wprowadzimy następne rodzaje: pole zajęte, lewa krawędź platformy, środek platformy, prawa krawędź platformy i pole puste. W ten sposób będziemy rysowali mapę.
ZaczynamyNa początek pobieramy kod źródłowy, który jest wynikiem ukończenia poprzedniej lekcji (znajdziesz go tutaj). Do katalogu data wrzucamy plik poziomu pobrany z 1.lvl. Powinniśmy również obok pliku poziomu umieścić nową teksturę z kaflami - tex.bmp. Reprezentacja poziomu w grzePlik poziomu jest bardzo prostym plikiem tekstowym. W pierwszej linii zapisujemy szerokość (W) i wysokość (H). W naszym przypadku mamy mapę o wymiarach 50x20. Kolejne H (20) linii zawiera po W (50) liczb ze zbioru {0, 1, 2, 3}. Przyjmijmy, że:
Chcemy móc wczytać poziom, następnie pobierać jego wysokość lub szerokość, a także sprawdzać typ pola w określonych miejscach. Dlatego deklaracja odpowiedniej klasy może wyglądać np. tak (plik Level.h): Pokaż/ukryj kod
Jednocześnie w pliku Types.h definiujemy nowy typ wyliczeniowy FieldType, który określa, jakim typem jest dane pole (puste, lewa/prawa krawędź, środek).
Przyjrzymy się teraz przykładowej implementacji takiej klasy (plik Level.cpp):
Ładowanie poziomu z pliku jest proste. Wystarczy otworzyć odpowiedni plik (jego nazwę dostajemy w parametrze). Następnie wczytujemy szerokość i wysokość do pól m_width oraz m_height.
Tworzymy tablicę dwuwymiarową, która będzie odpowiadała naszej mapie. W tym celu ustalamy wymiary wektora na wymiary wczytywanego poziomu.
Ostatecznie wczytujemy m_width * m_height (W*H) liczb. Każda z nich określa typ pola w miejscu o danych współrzędnych.
Zdefiniujmy metodę Field. Ważne: gdy odwołujemy się do pola o zbyt dużych współrzędnych, leżącego poza mapą, zwracamy brak pola (FT::None).
(4 ocen) |
Copyright © 2008-2010 Wrocławski Portal Informatyczny
design: rafalpolito.com