MonoGame – Tworzymy grę Snake od podstaw! | Część 2

Korzystając z (późnego)piątkowego popołudnia postanowiłem dodać ten wpis przed czasem. Co prawda jestem trochę śpiący, ale mam nadzieję że nie wpłynie to na jakość dalszej części tego wpisu :P. Tak, więc bez zbędnego przedłużania – zaczynajmy!

Co dzisiaj zrobimy?

W tym wpisie zajmiemy się stworzeniem szkieletu kodu naszej gry.

Tworzymy nowy projekt

Pierwszą rzeczą jaką należy zrobić, to oczywiście utworzenie pustego projektu MonoGame – dokładniej Cross Platform Desktop Project. W poprzednim wpisie tłumaczyłem mniej, więcej co jest od czego, w nowo wygenerowanym kodzie. Dalsze części tej serii będą zakładały, że znasz chociaż troszkę MonoGame i oczywiście C#. Wiem, że to oczywiste, ale dla jasności musiałem o tym przypomnieć 😉 No dobrze, skoro mamy już pusty projekt przejdźmy dalej.

Przygotowujemy potrzebne tekstury

Do działania naszej gry będziemy potrzebowali kilku tekstur. Na początek stwórzmy sobie tylko przyciski, które później się nam przydadzą. W sumie fajnie byłoby mieć też logo naszej gry, więc je też przygotujemy. Jeżeli jesteś twórczy i lubisz się w takie rzeczy bawić zrób to sam jeżeli nie masz teraz na to, ani siły, ani chęci to możesz skorzystać z moich paintowych „dzieł”:

PlayButton Logo ExitButton

Dobrze, tekstury już mamy teraz wystarczy je dodać do projektu. W tym celu należy kliknąć dwa razy na ten element:

MG1

Po tej czynności powinno nas powitać takie okno:

MG2

Po wybraniu Add->Existing Item możemy dodać do projektu nasze pliki.   Tak, wiem wcześniej już to opisywałem, ale nie chcę nikogo męczyć odsyłaniem do jednego z poprzednich wpisów 😉

Dzielimy projekt na sceny

Na pewno dobrze byłoby mieć w kodzie jakiś porządek. W tym celu podzielimy go na klasy. Każda klasa będzie odpowiadała za wyświetlanie innej sceny gry. My będziemy mieli właściwie tylko trzy sceny… Tj. MENU, scenę z naszą grą, oraz… komunikat, że przegraliśmy. No dobrze, skoro wiemy co mamy zrobić, zabierzmy się za to!

Na samym początku zmieńmy może nazwę naszej klasy głównej gry, która została nazwana domyślnie Game1, na MainGame. Będzie to klasa, w której będziemy decydować jaka scena akurat będzie wyświetlana.

Następnie stwórzmy sobie nową pustą klasę o nazwie MenuState, będziemy jej używać do sprawdzania jaka scena jest aktualnie wyświetlana i przełączania tychże scen. Jej kod ma prezentować się następująco:

Okej, mamy już klasę dzięki której będziemy kontrolować kiedy jaka scena ma być wyświetlana. Teraz stwórzmy klasy, które będą wyświetlać nasze sceny. Nazwijmy je:

– MenuScene.cs

– GameScene.cs

– GameOverScene.cs

Wszystko gotowe? Przejdźmy dalej.

Konfigurujemy nasze klasy ze scenami

Każda z klas musi posiadać trzy metody tj. Update(), Draw(), oraz LoadConent – ta metoda będzie wywoływana zaraz po stworzeniu obiektu klasy. Wymagany też jest konstruktor. Nasza klasa MenuScene, będzie wyglądać tak:

Nasza klasa musi implementować klasę DrawableGameComponent, oraz jej konstruktor musi przyjmować jako argument, obiekt naszej klasy startowej – jeżeli tego nie zrobimy, to próba wywołania metod Draw i Update wywoła wyjątek… Co do metody Draw, ona w argumentach przyjmuje też element bardzo ważny tj. obiekt typu spriteBatch, który pozwala nam rysować. Dziedziczy go ona po klasie startowej naszej gry. Analogicznie kod musi wyglądać w pozostałych klasach, które będą odpowiadały za wyświetlanie innych scen.

Konfigurujemy klasę MainGame

Jest to klasa, która będzie zawsze wywoływana podczas startu naszej gry. Właśnie tutaj będziemy operować na naszej klasie MenuState, oraz zarządzać tym co ma być aktualnie wyświetlane. Przejdźmy więc do niej.

Na samym początku zadeklarujmy zmienne typu naszych klas w klasie MainGame. Następnie w metodzie Initialize(), stwórzmy ich nowe obiekty. Powinno to wyglądać tak:

Skoro już tutaj jesteśmy to dorzućmy jeszcze kod, pokazujący kursor i odblokujmy możliwość rozszerzania naszego okna, oraz wskażmy co ma być wyświetlane zaraz po starcie gry – przy użyciu klasy MenuState:

Tutaj to byłoby chyba na tyle… Lecimy dalej. Teraz czas na tutejsze metody Update() i Draw(). Umieszczamy w nich kod, decydujący o tym, jaka scena w danym momencie będzie wyświetlana. Oczywiście niezbędna jest nam tutaj wcześniej utworzona klasa MenuState:

Co to właściwie robi? Główny zamysł jest taki, że główna pętla gry, która właśnie przez ten kod przechodzi, będzie wykonywała tylko dwie metody z klas potomnych(Draw i Update), które to reprezentują nasze sceny – to co się wykona zależy od stanu właściwości w klasie MenuState.

Tworzymy scenę z naszym MENU….

Teraz możemy już przejść powoli do tworzenia naszych scen. Pierwsze za co się weźmiemy to MENU. Przejdźmy, więc do klasy MenuScene. Dodajmy w niej zmienne typu Texture2D, oraz wczytajmy do nich nasze obrazki:

Ostatnim krokiem na dzisiaj, będzie sprawdzenie czy wszystko zostało zrobione dobrze. W tym celu dodajmy tymczasowy kod w metodzie Draw tej klasy:

Jeżeli zostanie na ekranie wyświetlone nasze logo, znaczy to,  że do tego momentu wszystko zostało zrobione dobrze. W takim wypadku można usunąć to co tutaj dopisaliśmy. Opis dalszych prac zostanie przedstawiony w kolejnej części.

Zachęcam do polubienia funpage bloga na facebooku – jeżeli jeszcze tego nie zrobiłeś/aś. To pozwoli Ci być zawsze na bieżąco z wpisami, a mi da świadomość, że jednak ktoś to faktycznie czyta 😉

Jeżeli popełniłem jakiś błąd, z góry przepraszam. No i na koniec mam jeszcze jedno pytanie do Was… Czy dzielić całość serii na takie części, czy mają być one dłuższe/krótsze?

900 total views, 1 views today