Wyżej mamy efekt działania kodu części drugiej. Aby go uzyskać należy odpowiednio wykorzystać informację zapisaną w

Wartości zapisane w tym polu odpowiednio przesuwają współrzędne rogów kafli w kierunku osi Y. Co w rezultacie prowadzi do uzyskania efektu pofałdowania terenu. Oczywiście zgodnie z tymi wartościami należy zdeformować kafle świata 2D.

Jak to zrobić?

Do deformacji kafli idealnie nadaje się procedura Draw4Col, która jest dostępna w zestawie możliwości rysowania grafiki na przykład komponentu

Poniższy rysunek zawiera opis parametrów podawanych do tej procedury

Czy o deformacji bitmapy będzie decydować układ wartości zapisanych w : X1,Y1,Col1,….,X4,Y4,Col4. Oznaczenia X,T dotyczą współrzędnych kolejnych rogów kafla zliczanych zgodnie z ruchem wskazówek zegara. Parametry Col1..Col4 decydują o kolorze rysowanego narożnika. Ich modyfikacja może dać ciekawe efekty.

Ponieważ te parametry są typu

Przykładowo dobierając odpowiednio wartości kanału Alpha możemy uzyskać płynne przejścia pomiędzy sąsiednimi kaflami lub różne efekty przezroczystości. My jedynie wykorzystamy składowe REDGREENBLUE do uzyskania efektu cieniowania zdeformowanego kafla.

KAFEL…

W naszym modelu warstwa świata 2D będzie zbudowana na poniższej klasie

jak widać będą to wskaźniki. Oczywiście na potrzeby tego artykułu nie robię dużego świata. Ale można tak zorganizować jego „wyświetlanie”, że FPS nie będzie zależny od rozmiaru świata i będzie utrzymany na poziomie 200 .

Zapis świata przy użyciu wskaźników wymaga zastosowania na przykład list. Proces tworzenia kolejnych kafli odbywa się na tych samych zasadach co proces tworzenia punktów opisanych w części pierwszej. Jedynie należy pamiętać o tym, że liczba kolumn i wierszy dla kafli jest o jeden mniejsza od liczby kolumn i wierszy dla punktów. Zobrazuję to poniższym rysunkiem

Łatwo policzyć, że dla czerwonych punktów kolumn jest 5, wierszy- 4. Dla zielonych kafli : kolumn jest 4 a wierszy: 3. O tym fakcie należy pamiętać.

W pierwszej części opisałem w jaki sposób zmieniać wartości pochyłości terenu teraz należy te zmiany zarejestrować w kaflach. My zrobimy to w zdarzeniu kliknięcia myszką wywołując procedurę UaktualnijWspolrzedneKafli; która to wywoła procedurę UaktualniWspolrzedne(Const AA,Ab,Ac,Ad:TWspolrzedna) kolejnych kafli.

Zarejestrowane zmiany w polach fAfBfCfD kafli będą wpływać na sposób jego rysowania. Czyli my musimy odpowiednio opracować procedurę rysowania kafla.

RYSOWANIE KAFLI

Ta procedura zastąpiła standardową procedurę DRAW poprzez użycie dyrektyw override. Zobacz do ciała klasy kafla.

Jako, że PKafel jest potomkiem klasy TSimpleAnimSprite, to odpada nam rysowanie kolejnych kafli przy użyciu pętli. Zrobi to za nas procedura OmegaSprite1.Draw;

W zasadzie mamy wszystko co jest nam potrzebne do „rzeźbienia” terenu. Wystarczy tylko kliknąć lewym klawiszem myszki to powstanie nam górka, prawym – dolinka. I to by było na tyle. Teraz zostaje odpowiednio opracować metodę chodzenia duszka po takim świecie. Można na podstawie 3 punktów znaleźć płaszczyznę i z zrzutowania bieżącego położenia duszka odczytać współczynnik wzniosu (współrzędna Z).JA ten wspołczynnik wzniosu wyznaczę inaczej dużo prościej. Wartość ta stanie się parametrem odpowiednio zmieniającym wartość (na przykład: …Y+dHz) duszka ale tylko w procedurze DRAW duszka. Bowiem nie możemy zmieniać dowolnie X i Y duszka, gdyż nie odczytamy prawidłowo jego położenia w świecie gry.

I tym optymistycznym akcentem kończę częśc drugą. W czść trzeciej opracujemy metodę chodzenia po górach i dolinach tego świata.

PS
Tak sie złożyło, że artykuł części trzeciej znajduje się przed artykułem części pierwszej

Pozdrawiam oksal Zbylitowska Góra 31.07.2006

Autor: oksal

Załączniki