MonoGame – dzielimy grę na sceny

Ten wpis jest w zasadzie kontynuacją poprzedniego. W poprzednim wpisie opisałem jak stworzyć proste menu gry. Jednak nie przedstawiłem sposobu, jak przełączać się między menu, a grą czy innymi nazwijmy to „widokami”. Zrobię to, więc teraz 😉

Zanim zaczniemy…

Przed rozpoczęciem, chcę zaznaczyć, że ten sposób jest dosyć prymitywny, ale na żaden lepszy nie wpadłem. Jeżeli ktoś zna inny lepszy sposób na rozwiązanie tego problemu – zachęcam do zostawienia komentarza.

Wróćmy do naszego poprzedniego projektu

Skoro wszystko już jasne, możemy przejść do rzeczy. Przed przystąpieniem do tego zadania, konieczne będzie pobranie projektu, który zamieściłem w poprzednim wpisie – w końcu to jego kontynuacja. Jeżeli jeszcze go nie czytałeś to jak najbardziej do tego – raz jeszcze, zachęcam. Jeżeli już to zrobiłeś tu tutaj podrzucam link do pobrania pliku z projektem: download.

Tworzymy klasę z informacjami o stanie gry

Pierwszym krokiem, który pozwoli nam zarządzać tym, jaka scena gry będzie wyświetlana jest stworzenie nowej klasy, która będzie przechowywała o tym informację. Zróbmy to 😉

Mamy tutaj dwie statyczne właściwości, którymi będziemy manipulować w kodzie naszego programu. Oczywiście, jeżeli mamy więcej scen – musimy dodać też więcej właściwości. Zabawa polega na tym, że kiedy IsShowMainMenuScene = true to gra będzie wyświetlać menu, z kolei kiedy IsShowGameScene = true to analogicznie wyświetlana będzie już scena samej gry. Jeżeli obydwie właściwości przyjmą wartość true to… sceny nałożą się na siebie… Właśnie dlatego jest to niezbyt eleganckie, ponieważ im więcej scen tym bardziej musimy pilnować się, żeby tylko jedna z wartości była true. Chociaż… klasę z właściwościami można zmodyfikować tak, żeby po ustawieniu jednej właściwości na true, reszta była false:

Wymaga to trochę większych nakładów pracy, ale chyba warto – lepiej umieścić to tutaj, niż później ustawiać właściwości po kolei na false.

Przyznam się, że wpadłem na to dopiero pisząc ten tekst 😉

Używamy naszych właściwości

No cóż, teraz użyjmy naszej klasy z właściwościami. W tym celu przejdźmy do klasy głównej naszej gry. Dokładniej do metody ButtonsEvents(). Mamy tutaj kod obsługujący nasz przycisk „Play”. Sprawmy teraz, że po jego kliknięciu zostaniemy przeniesieni do innej sceny gry.

Właściwie to tylko ograniczmy się do przypisania właściwości wartości true. Reszta dzieje się w klasie GameState. Jednak musimy jeszcze zmodyfikować kod metody Draw i Update w pętli głównej gry:

Właśnie w taki sposób możemy izolować poszczególne części gry. Oczywiście nic nie stoi na przeszkodzie, żeby stworzyć dla każdej sceny osobną klasę z metodami Draw i Update. I tylko je wywoływać w kodzie pętli głównej, zamiast „opatulać” klamrami dużą ilość kodu. Jednak jak to zrobić przedstawię już w następnych wpisach, które będą opisywały proces tworzenia prostej gry typu Snake 😉 Mam nadzieję, że zrobię to jak najszybciej, bo szkoła już tuż, tuż, więc i czasu będzie mniej.

Aha, jeżeli po kliknięciu Play przycisk zniknie – znaczy to, że właśnie przełączyłeś się do innej sceny gry. W celu powrotu należy wcisnąć przycisk Esc. Jeżeli przycisk znowu się pojawi – wszystko zostało zrobione dobrze.

4 przemyślenia nt. „MonoGame – dzielimy grę na sceny

  1. Dobry wpis, przyjemnie napisany to czego mi brakuje to np. jakieś zrzuty ekranu z działania programu. No i wiem, że się czepiam ale może dobrym pomysłem byłoby wrzucanie kodów np. na Gita zamiast robić paczki ZIP do pobrania.

    Ale trzymaj tak dalej już nie mogę się doczekać kolejnego wpisu o MonoGame 🙂

    • Zapamiętam sobie 😉 W sumie Git to dobry pomysł, na hostingu mam tylko 150MB miejsca na pliki – nawet z tego powodu warto to wynieść gdzieś na zewnątrz 😉 Co do zdjęć, nie obiecuję ich dużej ilości(ze względu na ograniczenie miejsca dla strony), ale postaram się umieszczać ich więcej.

      Dzięki za dobre słowo!
      Pozdrawiam 😉

      • Hej, może po prostu wykorzystaj hosting zewnętrzny do obrazków? Np. imgur.
        Do trzymania stanu gry zawsze używałem switch’a z enumem.
        A static’ów przy tworzeniu gier raczej się wystrzegaj 🙂
        Czekam na kolejne wpisy, dobrze wrócić do „XNA”

        • Dzięki za radę 😉
          Co do obrazków, myślę nad kupnem hostingu. Trzeba tą stówkę przeznaczyć na rok – ale przynajmniej miejsce nie będzie mnie już ograniczać 😉 Do tego wrzuciłbym na stronę jakąś lekką reklamę to może chociaż część wydatku się zwróci.

          Pozdrawiam!

Możliwość komentowania jest wyłączona.