Gra 2D, część 3: Wyświetlanie przewijanej mapy
18.01.2010 - Łukasz Milewski
![]() ![]() Selektywne przewijanie mapy
Zapewne widzisz już, że przy podchodzeniu do krawędzi gra wygląda nienaturalnie (szczególnie przy cofaniu się poza m_max_x_pos). Spróbujmy to poprawić. Na początek powinniśmy zdefiniować, kiedy mapa powinna się przewijać, a kiedy nie. W klasie Player (plik Player.h) definiujemy taką metodę: Pokaż/ukryj kod
Mapa porusza się, gdy gracz nie próbuje się cofnąć (m_x >= m_max_x_pos) oraz gdy jesteśmy oddaleni od końca poziomu o więcej niż połowę ekranu (m_x < (m_level_width - 1) - half_screen_tiles_count). Pamiętajmy o dodaniu nagłówka #include "Engine.h", skoro teraz używamy Engine w klasie Player. Sam warunek to nie wszystko. Trzeba go jeszcze gdzieś wykorzystać :-) Najprostszy sposób to drobna modyfikacja metody App::Draw (plik App.cpp). Zrobimy to tak, że w klasie App zapamiętasz pole, które będzie oznaczało ostatnią pozycję, przy której mapa powinna się przesunąć. Tę wartość będziemy uaktualniali w metodzie App::Draw. Użyjemy jej do rysowania mapy zamiast pozycji gracza. Modyfikujemy kod:
aby wyglądał tak:
Pole m_stored_player_pos_x typu double należy dodać do klasy App i ustawić na 1.0 w konstruktorze. Wracając do metody Draw, zamień teraz:
na:
Poprawiamy błędyMoglibyśmy w tym momencie skończyć, ale przez powyższą zmianę powstał drobny problem. Spróbujmy przejść postacią gracza do prawej krawędzi mapy i cofnąć się. Okazuje się, że możesz to zrobić tylko o połowę ekranu (tak, jak chcieliśmy). Niestety, widzimy cały ekran, więc wydaje się, że gracz utknął na środku. Musimy lekko poprawić metodę Player::Update. Zmiana powinna sprawdzać ten przypadek (gracz jest dalej niż długość poziomu - połowa długości ekranu) i wówczas nie modyfikować m_max_x_pos. Dopisz kawałek za linijkami:
aby całość wyglądała tak:
GratulacjeŚwietnie! Właśnie udało nam się zaimplementować nietrywialną obsługę scrollowanej mapy. Aby ugruntować tę wiedzę wykonajmy poniższe zadania. Kod końcowy - znajdziesz go tutajMasz pytanie, uwagę? Zauważyłeś błąd? Powiedz o tym na forum. Zadania
Poprzedni artykuł - poruszanie postacią Następny artykuł - Hall of Fame (3 ocen) |
Copyright © 2008-2010 Wrocławski Portal Informatyczny
design: rafalpolito.com