PISZEMY GRĘW dzisiejszym odcinku przedstawię jeden ze sposobów animacji obiektów na ekranie. Niektórych Czytelników napewno nie raz zadziwiła duża ilość ruchomych obiektów na ekranie gry. Wbrew pozorom wcale nie jest to trudne do uzyskania, a dzięki specjalnym technikom program animacyjny nie jest skomplikowany, nie potrzebuje dużej ilości pamięci, a mimo to jest skuteczny i bardzo uniwersalny. Technikę, którą opiszę, nazwałem "animacją znakową przez przeszukiwanie ekranu". Może komuś nazwa już zasugerowała, na czym to polega, lecz mimo, iż wierzę w domyślność i inteligencję Czytelników, to jednak postaram się dokładnie wyjaśnić, na czym rzecz polega. Jak nazwa wskazuje, program animacyjny przeszukuje ekran (który wyświetlany jest w trybie tekstowym) od lewego, górnego do prawego, dolnego rogu ekranu i w wypadku odnalezienia obiektu do animacji wywołuje procedurę obsługi tegoż obiektu. Program korzysta z dwóch tablic. W pierwszej wpisujemy kody znaków do animacji, natomiast w drugiej, w takiej samej kolejności, adresy procedur obsługi. Proszę zauważyć w naszym przykładzie, że procedury ANI_NEXT i ANI_SPD1 powtarzają się wielokrotnie. Dlaczego? Po prostu do animacji helikopterów i eksplozji użyłem kilku faz animacji (obracające się śmigła i efekt wybuchu), a po co do każdej fazy pisać oddzielną procedurę? Wystarczy, że będzie jedna ,która nie zrobi nic poza wyświetleniem następnej fazy animacji (ANI_NEXT w każdym, ANI_SPD1 w co drugim cyklu animacji). Animacja helikoptera wykonana jest na sześciu fazach, więc po sześciu cyklach animacji powinna być wyświetlona pierwsza faza. Dlatego po ciągu pięciu ANI_NEXT w tablicy skoków wpisany jest adres procedury, która wyświetla pierwszą fazę helikoptera. Procedura ANI_EXPL działa podobnie, lecz wyświetla ona spację, w celu skasowania ostatniej fazy wybuchu. Najbardziej skomplikowana jest procedura obsługi pocisków, gdyż musi ona poza przesuwaniem pocisku w prawo sprawdzać zderzenia z innymi obiektami. Obsługą pocisków zajmuje się procedura ANI_MISS i proszę się przyjrzeć, w jaki sposób sprawdzam, czy pocisk osiągnął prawą krawędź ekranu. Po prostu stworzyłem tablicę MAXY, która zawiera krańcowe pozycje. Wystarczy teraz porównać pozycję pocisku, która jest umieszczona w rejestrze Y i w wypadku, gdy będzie ona równa którejś z określonych pozycji, należy pocisk skasować, a właściwie nie wyświetlać na nowej pozycji, gdyż kasowany jest zaraz na początku procedury. Taki rodzaj animacji, który dziś opisałem, zastosowałem też w grze "The Jet Action", lecz podprogram animacyjny jest tam troszeczkę rozbudowany ze względu na to, że obiekty poruszają się praktycznie we wszystkich kierunkach. W takim przypadku występują pewne problemy przy ruchu w prawo lub w dół (a zwłaszcza w dół). Wyjaśnieniem tego zajmę się w bliższej lub dalszej przyszłości, a na razie może Czytelnicy zastanowią się, co się stanie, gdy animowany obiekt przesunie się zgodnie z kierunkiem przeszukiwania ekranu i jak poradziłem z tym sobie w naszym przykładzie, przy animacji pocisku. Czekam na listy! P.S. Piszcie, czego chcielibyście się dowiedzieć na temat pisania gier, na czym Was "przystawia". Postaram się pomóc. Łączę pozdrowienia dla wszystkich piszących i grających. scwidth equ 36 bonus equ $04 ammo equ $06 heli equ $08 explo equ $14 missile equ $20 rej_y equ $b7 * obsluga strzalu fire equ * * sprawdzenie, czy * mozna strzelac lda strig0 bne no_fire lda lstr beq no_fire lda ammo_cou beq no_fire * obliczenie pozycji * startowej pocisku lda Dariusz Żołna
|