Gra 2D, część 7: Diabeł tkwi w szczegółach
05.02.2010 - Marcin Milewski, Łukasz Milewski
Poziom zaliczony! Czas na następnyW naszej grze brakuje jeszcze jednego ważnego elementu - przechodzenia do następnego poziomu. Ta istotna funkcjonalność w połączeniu z nowymi poziomami pozwoli zapewnić sporo dobrej zabawy. A więc, zaczynamy! Do reprezentacji bohatera dodajemy metody, które pozwolą sprawdzić, czy gracz zakończył aktualny poziom i wykonać w tym momencie pewne akcje. Odpowiednie pole (należy pamiętać o jego inicjalizacji w konstruktorze wartością false) oraz funkcje dodajemy do pliku Player.h:
Implementacja metody LevelCompleted w chwili obecnej jest dosyć prosta, jednak w przyszłości będziemy chcieli umieścić w niej dodatkowe akcje, dlatego definiujemy ją w pliku Player.cpp:
W naszej teksturze umieścimy specjalne pole, które będzie pozwalało na zakończenie aktualnego poziomu. Dodajemy je obok pola oznaczonego jako platforma_mid, więc konstruktor klasy SpriteConfig należy wzbogacić o wpis:
Dodajemy nowe pole do mapy, więc należy także nadać mu numer, który będzie go identyfikował w pliku z poziomem. Robimy to w pliku Types.h. Oto odpowiedni kawałek kodu po modyfikacji:
Aby powiązać nazwę z odpowiednim numerem, dodajemy stosowny wpis podczas ładowania gry - metoda Game::Init:
W celu sprawdzenia, czy poziom został przez gracza zakończony, wywołujemy na nim metodę HasCompletedCurrentLevel. Następnie możemy wykonać pewne akcje - będzie się to odbywać w metodzie Game::Update: Pokaż/ukryj kod
Pozostaje nam tylko sprawdzić czy gracz wskoczył w odpowiedni kafel na mapie. Kolizje bohatera z poziomem są sprawdzane w metodzie Player::CheckCollisionsWithLevel. Na jej początku dodajemy odpowiedni warunek:
Zapamiętujmemy rozdzielczość oknaZauważmy, że tworząc możliwość wpisania własnego wyniku (klasa ScoreSubmit) wykorzystaliśmy założenie, że rozdzielczość okna to 600x400.
Oczywiście wykorzysytwanie w kodzie takich założeń nie jest dobrym pomysłem. Gdyby nowy programista dołączył do projektu i chciał dodać możliwość zmiany rozdzielczości w menu głównym, to zapewne przeoczyłby te dwie linijki w ScoreSubmit. Ten problem można rozwiązać na wiele sposobów. Najprościej jest zapamiętać szerokość i wysokość obrazu. Dlatego tworzymy nowy plik Window.h, w którym będze taka klasa: Pokaż/ukryj kod
Do klasy Engine dodajemy pole m_window typu WindowPtr oraz metodę Window, która zwraca zapamiętane okno. W metodzie Load dopisujemy
Teraz zmieniamy metodę App::Resize (plik App.cpp) tak, aby zamiast
Czyli zapamietujemmy szerokość i wysokość okna w klasie Enigne w polu m_window, zamiast bezpośrednio w klasie App. Dzięki temu możemy odwołać się do rozdzielczości okna w dowolnym miejscu programu. (2 ocen) |
Copyright © 2008-2010 Wrocławski Portal Informatyczny
design: rafalpolito.com