Tworzenie gry w C# z użyciem silnika Ogre - cz.5
28.03.2011 - Mateusz Osowski
Tematem tego artykułu jest ekwipunek i uzbrojenie. Zaimplementujemy prosty interfejs przeglądania ekwipunku i pozwolimy graczowi wybrać broń bohatera.
[Część 7]
Zanim zabierzemy się do tworzenia graficznego interfejsu, musimy się zastanowić jak chcemy reprezentować przedmioty. Klasa odpowiedzialna za to powinna nieść ze sobą informacje o siatce i właściwościach fizycznych przedmiotu w świecie gry, a także o rysunku w oknie ekwipunku. Dobrym nawykiem jest unikanie tworzenia niepotrzebnych bytów, więc najlepiej byłoby rozbudować którąś z istniejących klas. Doskonale nada się do tego celu
Ekwipunek będziemy przechowywać w formie listy – tak więc dopisujemy ową kolekcję do klasy postaci:
Pamiętajmy także, że listę trzeba gdzieś zainicjować, najlepiej w konstruktorze. Dotychczasowy kod podnoszenia przedmiotów dokonuje jedynie usunięcia przedmiotu. Musimy więc dodać linijkę „zbierającą” przedmiot, dodając go do listy:
Posiadając działający ekwipunek możemy zająć się tworzeniem interfejsu graficznego. Pomysł jest prosty: Po lewej stronie ekranu wyświetlimy listę posiadanych przedmiotów. Zaznaczony przedmiot będzie podświetlony na biało, ubrany – na niebiesko. Dodatkowo na środku będziemy pokazywać duży obrazek i opis zaznaczonego przedmiotu. Zaczynamy od utworzenia klasy HUDInventory . Chcemy, aby lista przedmiotów była przewijana. Osiągniemy to wypełniając kwadraciki przedmiotami o indeksach przesuniętych o wartość przewinięcia. Chcemy, aby kwadracikom łatwo dało się przypisać rysunki i podświetlenia. W tym celu tworzymy wewnętrzną klasę InventorySlot :
Pole statyczne Width wypełnimy dopiero, gdy będzieli znali proporcje ekranu. BgQuad będzie kwadracikiem tła widocznym zawsze. Picture , jak sama nazwa wskazuje, będzie obrazkiem, a BlueQuad niebieskim podświetleniem widocznym gdy przedmiot jest w użyciu.
Inicjujemy kwadraciki i ukrywamy je. Każdy z kwadracików wyląduje na osobnej warstwie ogrowego Overlay .
Przydatna będzie możliwość ustawienia widoczności wszystkich elementów:
Kluczową funkcjonalnością jest ustawienie obrazka i podświetlenia na podstawie informacji o przedmiocie:
W klasie głównej musimy utworzyć pola i ustalić stałe:
Stała SlotsCount określać będzie ilość prostokącików widocznych na ekranie, a SlotsSpacing odstępy między nimi, a także między krawędziami ekranu. SelectQuad rysować będzie prostokąt wyboru.
Wszystkie kwadraciki trzymać będziemy w zwyczajnej liście Slots .
Prywatne pola _SelectIndex i _ViewIndex będą odpowiedzialne za odpowiednio: indeks wybranego zaznaczonego przedmiotu w ekwipunku (-1 w przypadku braku zaznaczenia lub braku przedmiotów) i indeks elementu, od którego wyświetlane będą przedmioty na liście. Dostęp do nich określimy przez właściwości. Kolejne trzy pola związane będą z kolejno ramką opisu, powiększonym obrazkiem zaznaczonego przedmiotu i jego opisem.
Zakładamy, że obiekt HUDInventory będzie tworzony po inicjalizacji kamery, więc możemy obliczyć szerokość
kwadracika. Następnie tworzymy określoną ilość kwadracików pozycjonując je odpowiednio wzdłuż pionu ekranu.
Tworzymy ramkę opisu o sztywno ustalonych wymiarach i umiejscowieniu. Rozmiar czcionki użytej w opisie jest mniejszy niż w przypadku dialogów. Na koniec ukrywamy wszystko ustawiając właściwość IsVisible , którą zaraz napiszemy.
Ponieważ przy wypełnianiu i aktualizowaniu listy przedmiotów często będziemy odnosić się do postaci podpiętej do kontrolera postaci, tworzymy sobie odpowiedni akcesor skracający dostęp.
Metoda UpdateView() zgodnie z planem wypełnia kolejne kwadraciki odpowiadającymi przedmiotami. Pozostałe kwadraciki, których nie będzie się dało już pokryć ekwipunkiem zostaną wyczyszczone.
(3 ocen) |
Copyright © 2008-2010 Wrocławski Portal Informatyczny
design: rafalpolito.com