Witam w drugiej część. Poniżej zrzut z działającego kodu tej części.
W naszym modelu świata 2D pojawiły sie punkty werbunkowe w postaci sztandarów tworzonych jednostek. Teraz my musimy zmusić naszego przyszłego żołnierza do zaciągu. Co jak co nawet w świecie 2D armia nie cieszy się popularnością…
Jak to zrobić?
Nie będzie to trudne. Przyjmijmy, że graficznym sygnałem wstąpienia do armii będzie:
- mundur muszkietera
- uzbrojenie w szpadę
Tu chcę podkreślić, że w rzeczywistej grze oprócz zmian graficznych dobrze by było zwiększyć na przykład: stopień agresji, punktów życia, siły ataku itp. Czyli w klasie duszka nale przewidzieć odpowiednie pola które te właściwości będą przechowywać. W omawianym modelu zajmiemy się tylko częścią dotyczącą grafiki. Za rodzaj obrazu graficznego odpowiadają wartości liczbowe zapisane w tych polach klasy tworzonego żołnierza:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
fIdObrazKorpus, //indeks obrazu z listy OmegaImageList fIdObrazGlowa, fIdObrazBron, fIdObrazTarcza, fIdKlatkaKorpus, //indesk wycinanej klatki fIdKlatkaGlowa, fIdKlatkaBron, fIdKlatkaTarcza :integer; |
Chcąc ukryć broń wystarczy postąpić jak poniżej
1 |
fIdObrazBron:=-1; |
W przypadku gdy chcemy zmienić rodzaj broni Powiedzmy z maczugi na szpadę to do zmiennej fIdKlatkaBron należy podać indeks pierwszej klatki z nową bronią
1 |
IdKlatkaBron :=12; |
Czyli jest to pierwsza klatka z lewej strony wiersza drugiego zasobów grafiki z bronią.
Gdzie i kiedy to zrobić? : )
W omawianym przykładzie wybrałem dwie sytuacje zmiany broni. Pierwsza sytuacja występuje podczas kolizji jednego duszka z drugim. W wyniku takiego spotkania jeden z duszków traci tarczę i broń na rzecz drugiego. Technicznie załatwiamy to tak:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
//Przykład akcj:Zabieranie broni //Zabierz bron napotkanemu zolnierzowi TZolnierz(Sprite).IdObrazBron:=-1; TZolnierz(Sprite).IdObrazTarcza:=-1; IdObrazTarcza :=3; IdKlatkaBron :=TZolnierz(Sprite).IdKlatkaBron; idKlatkaTarcza:=TZolnierz(Sprite).IdKlatkaTarcza; |
Druga sytuacja to werbunek. Do zaciagu dochodzi wtedy gdy duszek będzie z kolizją obrazu sztandaru. W wyniku takiej kolizji zmienia się mundur (korpus), broń i zabierana jest tarcza.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
//kolizja ze sztandarem- tworzenie muszkietera if (Sprite is TSztandar)then begin if (tSztandar(Sprite).fKolizja)or(fKolizja) then exit; fKolizja:=true; tSztandar(Sprite).fKolizja:=true; IdObrazBron :=2;//ustaw indeksy zasobów graficznych broni IdObrazTarcza:=3;//tarcz //muszkieter jest bez tarczy więc mu ją zabierz IdObrazTarcza:=-1; //zmien klatkę korpusu IdKlatkaKorpus:=252;//klatka munduru muszkietera - ten z zółtym krzyżem //zmien kaltkę broni na szpadę IdKlatkaBron :=12; end; |
Jak widać proces zmian jest bardzo prosty. Polega tylko na zmianie odpowiednich wartości liczbowych. Jedynie od scenariusza gry zależy kiedy do takich zmian dochodzi. Ja wybrałem momenty kolizji z innymi duszkami lub z obrazem sztandaru. Kolizje i ruch uniwersalnego duszka oparty jest na modelu BOROSTWORA z Wędrówek w świecie 2D. Stąd też nie będę zasad wykrywania kolizji nie będę tu omawiać.
Na zakończenie chciałbym zwrócić uwagę na:
- klasę tSztandar, która jest dzieckiem klasy TSimpleAnimSprite. Analizując moment tworzenia sztandaru proszę zwrócić uwagę jakie parametry wymagane są do tworzenia płynnej i ciągłej animacji (tu falowanie flagi).
- tworzenie duszków naszej przyszłej armii odbywa się na podstawie odczytu pliku tekstowego postacie001.txt, który został utworzony narzędziem omawianym w pierwszej części tego cyklu. Procedura która tworzy duszki to TworzZolnierzy(’postacie001.txt’); zapisana jest ona w pliku Unit1.pas
I to by było na tyle.
Pozdrawiam oksal
25.06.2006 Zbylitowska Góra
Autor: oksal