Professional Documents
Culture Documents
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG
TWJ KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK
CZYTELNIA
FRAGMENTY KSIEK ONLINE
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treci
Wprowadzenie ........................................................................................................................................5
Rozdzia 1.
Rozdzia 7.
Fizyka w animacjach.........................................................................................................................115
Bezwadno obiektu w przestrzeni................................................................................ 115
Grawitacja oraz zderzenie ............................................................................................. 119
Podsumowanie............................................................................................................. 128
3.
Kontrola oraz
animacja postaci
Rozdzia
38
Create New Symbol stwrzmy symbol typu Movie Clip o nazwie Rakieta.
Symbol Rakieta bdzie stanowi obiekt, ktry chcemy kontrolowa w tej animacji
3. Upewniwszy si, e Flash jest w trybie edycji symbolu Rakieta, z menu File
a
b
Rysunek 3.2.
Zmiana pooenia
centralnego punktu
bitmapy za pomoc
panelu Info
a) Przed zmian pooenia
b) Po zmianie pooenia
39
prosty skrypt:
Dziki temu bdziemy mieli pewno, e animacja rakiety nie zostanie odtworzona.
6. Symbol Rakieta jest ju gotowy, moemy wic powrci do trybu edycji animacji
40
Rysunek 3.4.
Odnonik
do symbolu Rakieta
w obszarze roboczym
nazw Rakieta.
8. Obiekt, ktrym bdziemy sterowa, jest ju gotowy. Przystpujemy wic do tworzenia
odpowiednich klawiszy:
$%
&
'()
*()
! )$%
Obiekt przypiszemy jako obiekt nasuchu do klawiatury, czyli obiektu .
*+) ) ,-+.)
/
()
*()
0 *1) !2
3
2*0
1) *0#
3
!"#"
4(
2*0
1) *0567
!"567"
4*
+ *1)
41
Kod metody , jak atwo si domyli, zostanie wykonany, gdy wciniemy
dowolny klawisz podczas odtwarzania animacji SWF. Jeli wciniemy klawisz
strzaki w lewo, zmiennej
zostanie przypisana warto , jeli
natomiast wciniemy klawisz strzaki w prawo, zmiennej
zostanie
przypisana warto
. Dalej piszemy:
*+) ) ,-+.)
)(
()
*()
0 * !2
3
2 !!"#"
3
2*0-8+!!9:
!"#"
4(
2 !!"567"
2*0-8+!!9;
!"#"
4*
+ *
Metoda
jest wywoywana, gdy zwolnimy wcinity wczeniej klawisz.
Nie moemy jednak po prostu przypisa zmiennej
wartoci
(ktra oznacza, e rakieta si nie porusza), poniewa metoda byaby wywoywana
nawet wtedy, kiedy zwolnilibymy inny klawisz, np. spacj. Najpierw naley sprawdzi,
ktry klawisz zosta zwolniony oraz jaka jest aktualna warto zmiennej
.
Jeli warto zmiennej
to , a kod ASCII zwolnionego klawisza
(klawisz strzaki w lewo), oznacza to, e zwolnilimy wcinity wczeniej klawisz
strzaki w lewo. Podobnie ma si sprawa z klawiszem strzaki w prawo.
Musimy jeszcze przypisa obiekt do klawiatury komputerowej jako
obiekt nasuchu:
%
&
'+()
*0++
*()
11. Aby kod by kompletny, musimy jeszcze stworzy funkcj, ktra przeksztaci
warto zmiennej
w konkretne dziaanie, czyli ruch rakiety:
#
<
=
2
+3
>/)
(
+)
+
-%
0- +
42
Musimy jeszcze ustali tak sam prdko odtwarzania animacji Flasha, aby bya
pynna. Moemy zrobi to poprzez kliknicie w obszarze roboczym, a nastpnie
ustawienie w panelu Properties wartoci Frame Rate na 20.
Moemy rwnie otworzy okno Document Properties i tam dokona stosownej zmiany.
Projekt jest ju gotowy i moemy go opublikowa. Przykadowe wykonanie tego wiczenia
znajdziemy w katalogu Rozdzial03/Gotowe.
W podobny sposb komputer moe kontrolowa przeciwnikw w grze. Jednak o tym opowiemy w rozdziale 6. Inteligentni przeciwnicy.
W tym rozdziale wykonamy animacj postaci bawana, ktry jest czci gry Snow
Wars. Gr moemy znale w katalogu Gry. Proponujemy zagra w ni, aby zobaczy,
jak wyglda animacja bawana.
43
Rozdzial03/Cwiczenia.
Po otwarciu projektu zobaczymy na rodku obszaru roboczego posta,
ktr bdziemy animowa (patrz rysunek 3.5).
Rysunek 3.5.
Posta bawana,
ktr bdziemy
animowa
Bawan bdzie posiada kilka faz ruchu. Faza typu STAND oznacza, e bawan stoi
w miejscu. Bdzie temu towarzyszya animacja podrygujcego bawana powtarzana
bez przerwy, jeli uytkownik nie nacinie adnego klawisza sterujcego.
Druga faza typu WALK oznacza, e bawan porusza si w prawo lub w lewo (poniewa
posta jest narysowana w rzucie pseudoizometrycznym, rzeczywicie bdzie si
porusza po skosie ekranu). Fazie tej towarzyszy animacja poruszajcego si bawana.
Jest ona odtwarzana bez przerwy, jeli gracz trzyma wcinite klawisze kierunkowe
(klawisz strzaki w lewo lub strzaki w prawo).
Trzecia faza ruchu nazywa si faz TAKE i oznacza, e bawan podnosi niek
z ziemi. Fazie tej towarzyszy animacja bawana schylajcego si po niek.
Animacja ta jest odgrywana tylko raz, gdy gracz nacinie spacj.
Zanim bawan bdzie mg po raz kolejny podnie niek, musi najpierw wyrzuci
trzyman, co jest czwart i ostatni faz ruchu bawana o nazwie THROW. Fazie tej
towarzyszy animacja, w ktrej bawan wyrzuca niek (wykonuje odpowiedni ruch,
animacj samej nieki nie bdziemy si zajmowa). Animacja ta jest wywietlana
tylko jeden raz, po naciniciu spacji.
Pomidzy fazami TAKE oraz THROW zachodzi nastpujcy zwizek: naciskamy spacj
bawan podnosi niek (faza TAKE), naciskamy spacj po raz drugi bawan
wyrzuca niek (faza THROW), znw naciskamy spacj bawan podnosi niek
(faza TAKE) itd. Jak wic wida, do spacji s przypisane na zmian dwie animacje.
2. Przejdmy do trybu edycji symbolu bawana poprzez wybranie z podrcznego menu
44
Rysunek 3.6.
Naley zaptli animacj
fazy STAND, aby podczas
braku aktywnoci gracza
bawan nie wykonywa
zbdnych ruchw
4. Powrmy do animacji gwnej, wybierajc z menu Edit polecenie Edit Document.
Zmienna
powinna by ju znana, poniewa korzystalimy z niej
w poprzednim projekcie. Bdzie ona przyjmowaa jedn z piciu wartoci: #
bawan nieruchomy, bawan porusza si w lewo,
bawan porusza
si w prawo, bawan podnosi niek, $% bawan wyrzuca niek.
Zmienna #$%& przyjmuje warto , jeli bawan ma niek (czyli podnis
j wczeniej), oraz , jeli nieki nie ma. Jest ona potrzebna do prawidowego
okrelenia wartoci zmiennej
po naciniciu przez gracza klawisza
spacji.
7. Naley teraz stworzy obiekt nasuchu, ktry przypiszemy do klawiatury
(reprezentowanej przez obiekt ) oraz zdefiniowa jego metody
oraz
:
45
)
%
&
'+(()
*()
! )$%
J+) ) ,-+-
)
/
+)( ()
*()
0 *1) !2
3
2*0
1) *0#
!"#"
(
2*0
1) *0567
!"567"
(
2*0
1) *08
2LI$>K
!"*"
( !"7$>"
4*
+ *1)
)
/
=)
/
()
*()
0 * !2
3
2 !!"#"
3
2*0-8+!!9:*()
?&)()
!"I1"
4
(
2 !!"567"
3
2*0-8+!!9;*()
?&))
!"I1"
4
(
2 !!"*"MM !!"7$>"
2*0-8+!!9N*()
?
!"I1"
4*
+ *
46
natomiast do ostatniej klatki animacji tej fazy (klatka 11.) (patrz rysunek 3.7)
dodajmy kod:
=(
)2
>*
- +(">*"
Rysunek 3.7.
Kada faza animacji zaczyna
si od ujcia z etykiet,
a koczy na nastpnym
ujciu kluczowym
Jak wida, zmienna ' przyjmuje teraz warto (, ktra bdzie okrelaa
trzeci oraz czwart faz ruchu bawana. Rozgraniczenie tych faz ruchu nastpi
w funkcji " i nie ma sensu robienie tego teraz.
Wyselekcjonujmy koczce faz ujcie kluczowe, ktre znajduje si w klatce
dwudziestej. Dodajmy do niego kod:
*
2*
K&) /
.=
!"I "
0I$>K!
47
!"I "
0I$>K!2(
Kod ten jest bardzo podobny do umieszczonego w ujciu koczcym faz ruchu
, z t rnic, e teraz warto zmiennej #$%& ustawiamy na ,
co oznacza, e bawan nie ma nieki.
12. Animacja symbolu bawana jest ju gotowa, przejdmy wic do edycji animacji
Jak wida, pierwsz czynnoci wykonywan przez kod jest sprawdzanie wartoci
zmiennej ' odnonika #$%)#. Jeli warto tej zmiennej wynosi (,
oznacza to, e w tym momencie bawan albo podnosi niek, albo j wyrzuca.
Funkcja nie zrobi wic nic, dopki animacje tych dwch faz ruchu nie zostan
zakoczone. Dalej piszemy:
)
'
3
"I1"?#I1
2I$>JI0
L!"I1"
I$>JI0- +("I1"
%
48
W fazie nie przesuwamy bawana, poniewa podnosi on niek, stojc w miejscu.
Wywietlamy jedynie animacj fazy i to pod warunkiem e bawan nie ma nieki
(zmienna #$%& wynosi ). Zabezpiecza to przed sytuacj, w ktrej bawan
mgby dwa razy podnie niek. Pamitajmy, e zmienna #$%& jest ustawiana
na , gdy zakoczy si animacja fazy .
W fazie $% podobnie jak w fazie nie przesuwamy bawana. Wywietlamy
animacj $% i to tylko wtedy, gdy bawan ma niek (czyli gdy zmienna #$%&
posiada warto ). Przedstawiony mechanizm zabezpiecza bawana przed prb
kilkukrotnego wyrzucenia nieki bez fazy . Zmienna #$%& jest ustawiana
na , gdy wywietlona zostanie ostatnia klatka animacji fazy $%.
Dziki kodowi kontrolujcemu animacj fazy oraz $% moemy wcisn
spacj i, przytrzymujc j, obserwowa jak bawan kolejno schyla si po niek,
wyrzuca j, ponownie bierze niek, wyrzuca j i tak bez przerwy, dopki nie
zwolnimy spacji.
49
W tym rozdziale poznamy prosty sposb sterowania postaci za pomoc kursora myszy.
Dowiemy si rwnie, jak tworzy animacj pociskw, ktre s nieodzownym elementem
gier-strzelanek.
wiczenie 3.3.
50
Rozdzial03/Cwiczenia.
Animacja zawiera trzy warstwy. Na warstwie Dziao znajduje si odnonik do symbolu
Dzialo o nazwie CANNON. Na warstwie Kursor znajdziemy odnonik do symbolu
Kursor o nazwie Cursor, ktry bdzie reprezentowa kursor myszy w tej animacji.
Warstwa Akcje, jak atwo si domyli, bdzie zawieraa kod ActionScript kontrolujcy
animacj (patrz rysunek 3.9).
Rysunek 3.9.
Zawarto pliku
Dzialo.fla
51
J0'
+
()
+
8 $01-
Pierwsz rzecz, jak zrobimy, bdzie stworzenie nowego wizerunku kursora myszy.
W grach komputerowych, w ktrych wykorzystywana jest mysz, rzadko kiedy mamy
do czynienia z typowym windowsowskim kursorem, czyli strzak. Z reguy programici
tworz wasny kursor (czasami wicej ni jeden), ktry jest bardziej odpowiedni
w danej sytuacji. Podobnie bdzie w naszym przypadku.
Dziki metodzie +" obiektu Mouse ukrywamy oryginalny kursor myszy, gdy znajduje
si wewntrz obszaru roboczego animacji. Natomiast dziki metodzie ,
odnonika (
$ przypisujemy go do niewidocznego ju kursora. Warto
bdca argumentem wywoania metody , powoduje, e wsprzdne
pooenia kursora oraz wsprzdne pooenia odnonika (
$ s identyczne.
4. Teraz musimy ustali wsprzdne rodka obszaru roboczego, poniewa wszystkie
52
Zgodnie z rysunkiem 3.11 do obliczenia kta musimy zna wartoci pooenia kursora
myszy wzgldem rodka obszaru roboczego, czyli warto -$ oraz $, a nastpnie
dugo przeciwprostoktnej trjkta prostoktnego (, ktra jest rzeczywist
odlegoci (w linii prostej) pomidzy punktami /(-01(2 oraz (-$01$2.
Gdy znamy te wartoci, obliczamy sinus oraz kosinus kta alfa, po czym korzystajc
z metody 3 (arc cosine) obiektu Math, obliczamy warto kta alfa w radianach
z zakresu od 0 do (czyli 180 stopni). Pomnoenie otrzymanej wartoci przez 180/
zamieni j z radianw na stopnie, a my potrzebujemy wartoci kta alfa w stopniach.
Dziki metodzie 3 obiektu Math dowiemy si jedynie, e kt alfa to warto
z przedziau od 0 do 180 bd te 0 do 180. Aby dokadnie okreli przedzia,
posugujemy si obliczon wczeniej wartoci sinusa kta alfa. Jeli sinus jest dodatni,
to kt alfa pochodzi z przedziau 0 do 180. Jeli sinus jest ujemny, to alfa pochodzi
z przedziau 180 do 0. Wszystko jasne. Znamy warto kta alfa, o jaki powinno
obrci si dziao.
53
rysunek dziaa, ktry obracalibymy dookoa, to sam kod animacji byby trywialny
i wygldaby nastpujco:
8II$I0
!7#5I
Niestety, nie jest to takie proste, poniewa naszym zadaniem nie bdzie obracanie
odnonika, ale zadecydowanie, ktre ujcie animacji dziaa wywietli. Musimy przy
tym pamita, e kolejne ujcia animacji dziaa pokazuj obiekt obrcony o 5 stopni,
a zatem dziao bdzie skierowane na kursor myszy z dokadnoci do 5 stopni.
Piszemy wic:
+
275IFD
3
X)
VN
2
!V;
BCC
EE
2
UCF7#5I
3
8II$I0- +
%
4
54
Gotowe. Moemy teraz opublikowa animacj, aby przekona si, czy dziaa poprawnie.
Przesuwajc kursor myszy po ekranie, bdziemy mogli zobaczy, e dziao rzeczywicie
obraca si za nim. Jeli bdziemy kursor przesuwa bardzo powoli, zobaczymy rwnie,
e dziao nie obraca si dokadnie, lecz ze skokiem 5-stopniowym.
W pliku Dzialo_FazaI.fla znajdujcym si w katalogu Rozdzial03/Gotowe znajdziemy
animacj rdow Flasha MX, ktra powinna powsta po wykonaniu powyszego wiczenia.
wiczenie 3.4.
55
Zmienna $$ )- nie okrela tego, ile razy dziao moe wystrzeli, ale ile pociskw
jednoczenie moe znajdowa si na ekranie. Musimy zdawa sobie spraw z tego,
e pociski bdziemy tworzy poleceniem 3+)!. Okrelamy w nim midzy
innymi warstw, na ktrej znajdzie si stworzony odnonik. Numer tej warstwy
nie moe kolidowa z warstwami innych obiektw stworzonych za pomoc
ActionScript.
Teoretycznie moglibymy kady nowo utworzonym pocisk umieszcza na nowej
warstwie, ale jeli projekt ma by gr, ktra zawiera bdzie oprcz dziaa i pociskw
take inne elementy graficzne, to szybko mogoby doj do konfliktu, gdyby pocisk
usun obiekt stworzony wczeniej. Z drugiej strony, prdko, z jak lec pociski,
wyraona wspczynnikiem $$ , powoduje, e na ekranie bdzie znajdowa
si jednoczenie z gry okrelona liczba pociskw, wic moemy spokojnie j
ograniczy. Gdy jaki pocisk zniknie z ekranu i zostanie usunity, jego warstwa jest
znw wolna i mona j wykorzysta dla nowych pociskw.
Aktualn warstw, na ktrej powstanie nowy pocisk, okrela zmienna $$ (
.
2. Teraz umiemy kursor tekstowy poniej kodu metody ) )! obiektu ) .,
ale przed kodem: ) 4"" /) .25 i zacznijmy pisa:
*++))&) ,-+)
/
()
J0 J1) !2
3
Powyszy wiersz kodu tworzy nowy odnonik na bazie symbolu Movie Clip, ktrego
identyfikator eksportu zosta ustalony na Bullet (o tym identyfikatorze opowiemy
dokadniej za chwil). Nazw odnonika, ktry zostanie stworzony, bdzie ShootNumerWarstwy, czyli np. Shoot0, Shoot1, Shoot2 itd., a warstw, na ktrej znajdzie
si kula, okrelamy prostym rwnaniem 678$$ (
. Warto staa w tym
rwnaniu zapewnia, e nie bdzie problemw, jeli na warstwach Flasha MX
w procesie edycji animacji umiecimy wicej obiektw ni w naszym projekcie.
Nowy odnonik musimy odpowiednio uoy w obszarze roboczym:
(
&.
)-
H("'"E7$$8 0@!8RE78$UOC
H("'"E7$$8 0!8E75IUOC
56
Jak wida, kod metody ' stworzonego wczeniej odnonika przesuwa
go w odpowiednim kierunku, po czym, jeli pocisk opuci obszar dozwolony,
usuwa go z animacji.
4. Pozostao jeszcze dodanie kodu kontrolujcego warto zmiennej $$ (
,
okrelajcej warstw, na ktrej powstanie nowy pocisk. Ten kod wyglda nastpujco:
)
=
+ 2
<
-
7$$8 EE
)+
,
)( /( (
%
Q)
Z/(
,
+ 2
<
+
27$$8 F7$$JR7$$8 !D
4*
+ J1)
57
Rysunek 3.12.
Jeli w kodzie ActionScript
chcemy uywa metody
attachMovie, musimy
okreli identyfikator
symbolu, ktrego
operacja ma dotyczy
Podsumowanie
Jak moglimy si przekona w tym rozdziale, sterowanie postaciami moe by zadaniem
bardzo prostym, jak w przypadku rakiety, lub zoonym, jak w przypadku bawana, oraz
cakiem skomplikowanym jak w przypadku dziaa (oczywicie dla niektrych osb kolejno bawan, dziao niekoniecznie musi by prawdziwa).
Projekty, ktre omwilimy w tym rozdziale, nie wyczerpuj bynajmniej wszystkich moliwoci, z jakimi moemy mie do czynienia. Dobrze oddaj jednak natur problemw,
z ktrymi przyjdzie si nam zmierzy podczas tworzenia wasnych projektw.
Zapraszamy do nastpnego rozdziau Tworzenie plansz w grach, w ktrym poznamy
sposoby budowy plansz gier, po ktrych bd porusza si tworzone przez nas postacie.