Professional Documents
Culture Documents
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG
Macromedia Flash
Super Samurai
Autor: praca zbiorowa
Tumaczenie: Marek Binkowski
ISBN: 83-7197-696-8
Tytu oryginau: Macromedia Flash Super Samurai
Format: B5, stron: 378
Zawiera CD-ROM
TWJ KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK
CZYTELNIA
FRAGMENTY KSIEK ONLINE
Gwnym zaoeniem tego podrcznika jest nauka poprzez zabaw (bo kreskwki to
przede wszystkim dua dawka zabawy). Dlatego wydanie tej ksiki w formie zwykego
podrcznika byoby powanym bdem. Podstawy Flasha mona przyswoi sobie
z rnych rde, wic nie bdziemy im tu powica zbytniej uwagi. W zwizku z tym
najlepiej by byo, aby podstawy mia ju opanowane, gdy nie bdziemy zajmowa si
opisem kadego narzdzia czy sposobu jego zastosowania. Czasami najlepiej jest
zapozna si z narzdziem poprzez uycie go w niestandardowy sposb.
W kadym rozdziale znajdziesz wiczenia, ktre umoliwi ci zastosowanie wyoonych
przez nas teorii w praktyce. Do wszystkich wicze doczono kompletne pliki
w formacie FLA zawierajce wszystkie potrzebne elementy. Na pycie CD znajduje si
ponad 75 autorskich plikw wykonanych we Flashu. Dodatkow atrakcj jest
(umieszczony rwnie na pycie CD) plik w formacie FLA z dwuminutow kreskwk
wideo z muzyk, Human Blues wykonan przez Webera.
Jeli twoim marzeniem jest programowanie gier w pitej wersji Flasha, lecz zniechca
ci zoono procesu tworzenia, ta ksika moe przyczyni si do twojego sukcesu.
Poprzez wykonywanie wicze i analizowanie przykadw zrozumiesz nawet najbardziej
skomplikowane zagadnienia. Jeli tylko przyswoisz sobie techniki zastosowane w grach
dostarczonych z t ksik na pewno bdziesz tworzy wasne gry we Flashu.
komunikacji z przegldark za pomoc Flasha i skryptw JavaScript.
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treci
Podzikowania ........................................................................................................................ 7
O Autorach............................................................................................................................ 11
Wstp .................................................................................................................................... 15
Podsumowanie ...................................................................................................................... 32
Spis treci
Rozdzia 2.
Flash i grafika trjwymiarowa
Michael Brandon Williams
Torben Nielsen
Coraz wiksza liczba projektantw pracujcych we Flashu interesuje si grafik trjwymiarow. Trjwymiarowe efekty umieszczone w filmach Flasha pozwalaj wzbogaci
system nawigacyjny, wywrze dobre wraenie na kliencie lub po prostu zabawi widza.
Rzeczywicie, w cigu kilku ostatnich lat grafika trjwymiarowa w filmach Flasha staa
si bardzo popularna. Trend ten zapocztkoway takie witryny jak www.yugop.com czy
www.mano1.com i od tego czasu zainteresowanie t dziedzin cigle ronie.
Jednak Flash jest programem do tworzenia grafiki dwuwymiarowej nie obsuguje
modeli trjwymiarowych. Jak zatem mona tworzy we Flashu animacje trjwymiarowe?
To atwe trzeba udawa.
Istniej dwie podstawowe metody tworzenia iluzji trjwymiarowego ksztatu i ruchu
za pomoc skryptw ActionScript, gdzie cay projekt jest generowany przez kod; lub
przy uyciu wyrenderowanych obiektw trjwymiarowych, przygotowanych w innych
programach, a nastpnie zaimportowanych do Flasha i sterowanych prostymi akcjami
ActionScript. W tym rozdziale omwimy oba podejcia.
Trzy wymiary
Rozpocznijmy od przypomnienia pewnych zagadnie, ktre mog by ci ju znane. Poka, jak punkty s reprezentowane w przestrzeni trjwymiarowej, jak rzutowa je na
paszczyzn dwuwymiarow i jak to podejcie dziaa we Flashu.
34
Aby okreli pooenie punktu w przestrzeni trjwymiarowej, definiujemy trzy prostopade osie wsprzdnych oraz rodek ukadu wsprzdnych (0, 0, 0) jako punkt przecicia tych osi. S to osie x, y i z. Kada para tych osi moe stanowi paszczyznowy
ukad wsprzdnych.
Rysunek 2.2 przedstawia trjwymiarowy ukad wsprzdnych.
Rysunek 2.2.
Trjwymiarowy ukad
wsprzdnych
35
Uporzdkowana trjka liczb rzeczywistych (a, b, c) mwi, bymy si przesunli si o a jednostek wzdu osi x, nastpnie o b jednostek wzdu osi y i wreszcie o c jednostek wzdu
osi z, i tam narysowali punkt.
36
Rysunek 2.4.
Ukad osi
wsprzdnych
w trjwymiarowym
ukadzie, jaki bdziemy
stosowa we Flashu
W rzeczywistoci zwrot osi y w ukadzie wsprzdnych Flasha jest odwrotny, jednak rnic t z atwoci
skorygujemy w prezentowanych przykadach przyp. tum.
37
Perspektywa
Perspektywa to wanie to, co pozwala nam odrni przestrze trjwymiarow od paszczyzny dwuwymiarowej. Jest to wszechobowizujce pozorne zakrzywienie wiata,
ktre rozmieszcza obiekty na scenie w zalenoci od ich odlegoci od obserwatora. Gdy
stoisz na rodku prostej drogi, patrzc w najdalszy jej punkt, widzisz jak jej krawdzie
stopniowo zbliaj si do siebie, w miar wzrostu odlegoci. Gdy spojrzysz odpowiednio
daleko, zobaczysz, e zbiegaj si one w jedn lini. Perspektywa wpywa te na sposb
postrzegania ruchu. Na przykad, gdy obiekt na pierwszym planie porusza si z okrelon
prdkoci, a na dalszym planie wida drugi obiekt poruszajcy si z tak sam prdkoci, pozorna (postrzegana) prdko ruchu obiektu na pierwszym planie jest wiksza.
Zamiana uporzdkowanych trjek liczb na uporzdkowane pary
Problem perspektywy mona uproci do paszczyzny. Pooenie punktu w przestrzeni
jest okrelane przez uporzdkowan trjk liczb (x, y, z). Naszym zamiarem jest wyeliminowanie gbi, czyli wsprzdnej z, poniewa ekran monitora nie posiada gbi, tylko szeroko i wysoko. W jaki sposb musimy zrzutowa na paszczyzn monitora
wszystkie obiekty w prezentowanej przestrzeni. Pooenie kadego z nich wyrazimy za
pomoc uporzdkowanej pary liczb, obliczajc ich wartoci z uwzgldnieniem pierwotnej pozycji na osi z. Najprostszym rozwizaniem jest zwyke odrzucenie informacji z,
lecz w tym przypadku zatracisz efekt perspektywy, czyli krawdzie drogi nie bd si
zbiegay, lecz pozostan rwnolege.
Problem ten rozwiemy z uyciem prostej geometrii. Zanim jednak omwimy rzutowanie trjwymiarowego punktu na dwuwymiarowy ekran monitora, przyjmijmy pewne
oznaczenia, ktrymi bdziemy si posugiwa.
Rysunek 2.6 przedstawia punkt w przestrzeni, posiadajcy oglne wsprzdne (x, y, z).
Po zrzutowaniu tego punktu na ekran monitora, jego obraz ma wsprzdne (x', y').
Oznaczamy je znakiem apostrofu2, by odrni wsprzdne x i y w reprezentowanej
przestrzeni od wsprzdnych x' i y' na paszczynie monitora. Poniewa na rysunku 2.6
mog przedstawi tylko przypadek dwuwymiarowy, musz zrezygnowa z jednego
z wymiarw rezygnuj zatem ze wsprzdnej x (rysunek ten przedstawia obserwatora, ekran monitora i reprezentowan przestrze obserwowan z boku). Wielko
oznaczona liter d jest odlegoci oka obserwatora od ekranu komputera. Warto ta
odegra kluczow rol w naszych obliczeniach dotyczcych wygldu rodowiska trjwymiarowego. Wsprzdna z punktu w przestrzeni jest wyznaczana wzgldem paszczyzny ekranu monitora, czyli paszczyzna ekranu ma wsprzdn z rwn zero (tam
znajduje si pocztek trjwymiarowego ukadu wsprzdnych oraz zerowe osie x i y).
Dodajmy te, e wsprzdna z obserwatora ma warto ujemn, poniewa o z jest
skierowana w gb monitora.
38
Rysunek 2.6.
Punkt trjwymiarowej
przestrzeni rzutujemy
na dwuwymiarowy
ekran monitora,
by wywietli go
we Flashu
39
Rysunek 2.9.
Rwnania rzutujce
punkt przestrzeni
na paszczyzn
monitora
Zastosujmy nasz nowo nabyt wiedz w skrypcie, ktry bdzie przelicza uporzdkowan trjk liczb na uporzdkowan par.
Uporzdkowana trjka liczb okrela pooenie punktu w symulowanej przestrzeni, zatem gdy mamy dany punkt, znamy wartoci tych liczb. Chwili zastanowienia wymaga
natomiast warto parametru d, czyli odlego oka obserwatora od ekranu monitora.
Wracajc do przykadu z drog, jeli dobierzemy zbyt ma warto parametru d, uzyskamy efekt rybiego oka i krawdzie drogi bd si zbiegay zbyt szybko. Jeli z kolei
warto ta bdzie zbyt dua, obserwator moe mie trudnoci z odrnieniem bliskich
i odlegych punktw, za krawdzie drogi bd zbiegay si zbyt wolno. Zwykle odpowiednie s wartoci z przedziau od 200 do 500, cho powiniene z nimi poeksperymentowa, aby lepiej zrozumie ich wpyw na rezultat.
Poniszy skrypt jest umieszczony w detektorze zdarzenia
klipu filmowego. (Klipem
filmowym moe by dowolny element, ktry chcesz powiela i umieszcza na obrazie).
Skrypt losuje trjk liczb z przedziau od 100 do 100, bdcych wsprzdnymi punktu
w przestrzeni, a nastpnie oblicza wsprzdne rzutu tego punktu na ekranie monitora.
!""#
$%&
' (
)*
+,""-""#
. (
)*
+,""-""#
(
)*
+,""-""#
$&.
..
&
/
0#
1
40
Gdy pozycja klipu na ekranie jest ju ustalona, musimy jeszcze zaj si jego skal.
Rozmiar klipu rzutowanego w perspektywie moesz dobra, obserwujc wartoci liczbowe wspczynnika perspektywy przy rnych wartociach wsprzdnej z. Gdy warto tej wsprzdnej jest dua (czyli punkt jest odlegy od ekranu), mianownik wzoru
na wspczynnik rwnie staje si bardzo duy. Dzielenie przez du liczb daje w wyniku ma liczb, zatem gdy wsprzdna z ronie, wspczynnik perspektywy maleje.
Z drugiej strony, gdy z maleje, wspczynnik perspektywy ronie.
Wanie takiego zachowania oczekujemy po skali obiektu w perspektywie. Gdy obiekt
oddala si od nas (zwiksza si warto z), jego pozorny rozmiar maleje. Gdy obiekt si
zblia, wydaje si nam, e jest wikszy. Jednak nie moemy wyrazi wymiarw obiektw
bezporednio za pomoc wspczynnika perspektywy wwczas wszystkie obiekty
41
miayby jednakowe rozmiary, poniewa wspczynnik ten nie bierze pod uwag ich
pierwotnych wymiarw. Dlatego mnoymy pierwotne wymiary klipu filmowego przez
wspczynnik perspektywy, otrzymujc wymiary obiektu rzutowanego. W poniszym
rwnaniu wielko
reprezentuje pierwotn wielko klipu filmowego, za
wielko to wielko klipu rzutowanego w perspektywie.
&
/
/ + &
/
#
42
Uruchom plik kilka razy, by zobaczy, e za kadym razem ukad punktw w przestrzeni jest inny (rysunek 2.11).
Rysunek 2.11.
Flash tworzy skupisko
punktw losowo
rozmieszczonych
w przestrzeni
43
Metoda swapDepths()
Wbudowana metoda
obiektu MovieClip umoliwia atw zmian poziomu
warstwy, na ktrym mieci si klip filmowy, w zalenoci od odlegoci z tego klipu.
Gdy w bezporedni sposb przypiszesz klipowi numer poziomu, rwny jego wsprzdnej z, uzyskasz bdny wynik klip filmowy z du wsprzdn z powinien znajdowa si gboko w tle. Wystarczy jednak, e uyjesz wsprzdnej z ze zmienionym
znakiem wwczas im dalej klip bdzie si znajdowa od ekranu, tym niszy bdzie
numer jego poziomu.
$4 %
)*
)#
Teraz moesz zmieni zwyky punkt (koo) w dowoln grafik, jak chciaby wywietla. Zobaczysz wwczas, e kolejne klony grafiki zasaniaj si w odpowiedniej kolejnoci, zgodnie z gbi perspektywy.
By moe nie podoba ci si rozwizanie polegajce na prostym negowaniu wsprzdnej
z i okrelaniu w ten sposb numeru poziomu dla klipu, poniewa tym sposobem
mona uzyska ujemne numery poziomw. Cho zajm si jeszcze tym problemem,
jednak moesz po prostu odj warto wsprzdnej z od duej liczby, by zachowa
odpowiedni kolejno poziomw i operowa tylko dodatnimi liczbami.
44
Uruchom ten plik kilka razy, aby zobaczy, e dalsze (mniejsze) obiekty zawsze s zasaniane przez blisze (wiksze). Teraz znacznie atwiej mona rozrni odlegoci poszczeglnych obiektw (rysunek 2.12).
Rysunek 2.12.
W tym przykadzie
sortujemy poziomy
klipw w zalenoci
od ich wsprzdnej z
Ten film jest niemal taki sam jak film random_3D_points.fla; zawiera on nieco inne
elementy graficzne oraz dwa dodatkowe wiersze kodu. Wiersze te mieszcz si na kocu skryptu klipu filmowego. Ich zadaniem jest przypisanie klipowi poziomu warstwy,
zgodnego z jego wsprzdn z.
$4 %
)*
)#
Przesunicia
Aby przesun punkt w przestrzeni (czyli wykona operacj zwan w matematyce
translacj), zmieniasz warto wsprzdnej x, y lub z. Na przykad moesz przesun
punkt (1, 3, 2) o cztery jednostki wzdu osi x do (5, 3, 2), nastpnie o trzy jednostki
wzdu osi y do (5, 6, 2) i wreszcie o 4 jednostki wzdu osi z do (6, 5, 2).
45
Losowy ruch
We Flashu przesunicia powinny by bardziej pynne. Aby uzyska pynny ruch, musimy w kolejnych klatkach stopniowo zmienia wsprzdne punktw. Oznacza to, e
zmianie ulegnie rwnie ukad naszego poprzedniego skryptu, ktry jedynie umieszcza
punkty w przestrzeni i rzutowa je na paszczyzn. W nastpnym pliku rozmiecimy
obiekty w przestrzeni w taki sam sposb jak poprzednio, lecz tym razem wprawimy je
w ruch w przypadkowych kierunkach.
Otwrz plik random_3D_points_trans1.swf zapisany na pycie CD-ROM.
W chwili uruchomienia tego pliku kady obiekt otrzymuje prdko pocztkow, z jak
porusza si nastpnie w przypadkowym kierunku. Za kadym razem gdy uruchomisz
plik, obiekty rozprosz si w innych kierunkach (rysunek 2.13).
Rysunek 2.13.
Losowo
rozmieszczone
obiekty poruszaj si
w przypadkowych
kierunkach
Tym razem nie bdziemy obsugiwa wszystkich czynnoci wewntrz detektora zdarzenia
; ustalimy jedynie pozycje, stae i losowe wartoci przyrostw zwizanych
z chwilowymi przesuniciami obiektw. Pniej moesz umoliwi zmian przyrostw
za pomoc przyciskw, zdarze klipw filmowych lub innych metod interaktywnych.
Na razie jednak pozostaem przy niewielkich przyrostach, by mg zaobserwowa stopniowe zmiany pooenia.
&3
$%.
$4.&)
%&..
.
$4.&)9
)
/' ,56#
46
Moesz mi wierzy lub nie, lecz wanie utworzye skrypt dla nastpnej demonstracji
Flasha! Gdy utworzysz kilka klonw obiektw z tym skryptem, zobaczysz skupisko
obiektw poruszajcych si w przypadkowych kierunkach przestrzeni.
Sterowany ruch
Elementy rozbiegajce si w przypadkowych kierunkach prawdopodobnie nie byy twoim
zamysem, gdy przystpowae do czytania tego rozdziau. Moesz jednak zaangaowa
47
Cay mechanizm modyfikujcy warto zmiennej moesz nawet umieci w pojedynczym wierszu. Bdzie on modyfikowa warto zmiennej, w kadej klatce dodajc do
niej wynik pewnego wyraenia. W wyraeniu tym znajduj si oba czynniki, czyli przyrost wprowadzany przez klawisz inkrementacji (zwikszania) oraz przyrost (z przeciwnym znakiem) wprowadzany przez klawisz dekrementacji (zmniejszania).
'0 ? .*? .*&/ .+&? .*? .* &/ .+&#
Gdy jest wcinity klawisz 3, warto zmiennej w kadej klatce zwiksza si o .
Gdy z kolei jest wcinity klawisz
, warto zmiennej zmniejsza si w kadej klatce o . Jeli uytkownik wcinie naraz oba klawisze, warto zmiennej pozostanie niezmieniona, poniewa program doda, a nastpnie odejmie od niej warto .
Zobaczmy, jak ta sztuczka dziaa w praktyce. Poniszy skrypt przesuwa klip filmowy na
obrazie, gdy uytkownik wcinie jeden (lub kilka) z klawiszy strzaek. Utwrz nowy film
Flasha, narysuj prost grafik i przekszta j w klip filmowy. Umie poniszy kod odpowiednio w detektorach zdarze
i
klipu filmowego.
%
..
. 4
1 %
& 8
$ %1.
&
& !#
2
Oczywicie za t nazw, podobnie jak za nazw &/ ., kryj si nazwy konkretnych klawiszy przyp. tum.
48
Plik ten demonstruje dziaanie omwionej przez nasz sztuczki z wykrywaniem wcinicia klawiszy. Zawiera on jedynie 13 wierszy kodu, zawartych wewntrz detektorw zdarze klipu filmowego. Skrypt jest identyczny z utworzonym przez nas.
Uywajc klawiszy Shift, Enter oraz klawiszy strzaek, moesz przemieszcza grup
obiektw w przestrzeni (rysunek 2.14).
Otwrz plik random_3D_points_trans2.fla zapisany na pycie CD-ROM.
49
Rysunek 2.14.
Steruj ruchem
obiektw za pomoc
klawiszy strzaek
oraz klawiszy Shift
i Enter
Bezporednio po utworzeniu klonu klipu filmowego inicjalizujemy stae, takie jak pooenie pocztku trjwymiarowego ukadu wsprzdnych, pierwotny rozmiar klipu filmowego czy zakadana odlego obserwatora od ekranu. Skrypt losuje rwnie wartoci dla trjki wsprzdnych oraz definiuje stay przyrost, o jaki zmieni si wsprzdna
klipu, gdy uytkownik wcinie odpowiedni klawisz. W poprzednim przykadzie losowalimy wartoci przyrostu oddzielnie dla kadej wsprzdnej; teraz ograniczamy si
do ustalenia pojedynczej wartoci.
Detektor zdarzenia
klipu filmowego zawiera kod, ktry zajmuje si rzutowaniem i ruchem punktw. W poprzednim przykadzie wylosowane przyrosty byy dodawane do wsprzdnych klipu w kadej klatce. W tym przykadzie modyfikowanie
wartoci wsprzdnych jest uzalenione od klawiszy wcinitych przez uytkownika.
Poniewa nie mamy ju do czynienia z ruchem na paszczynie dwuwymiarowej, musiaem zmieni funkcje poszczeglnych klawiszy. Klawisze strzaek w lewo i w prawo
50
Moe po wygldzie skryptu tego nie wida, jednak utworzylimy naprawd imponujcy plik!
Problem z mechanizmem rzutowania
Gdy dajesz uytkownikowi pen kontrol nad rodowiskiem trjwymiarowym, moe
si okaza, e mechanizm symulacji perspektywy posiada pewne sabe punkty. Jeden
z problemw moe si pojawi, gdy uytkownik sprbuje wej zbyt gboko w przestrze i jeden lub kilka obiektw w symulowanej przestrzeni znajdzie si za jego
gow. Wwczas obiekty te niespodziewanie wracaj na ekran, przy czym s odwrcone wzgldem wszystkich osi. Rozwizanie tego problemu polega na wyczeniu widzialnoci tych obiektw, ktre przesun si poza zakadane pooenie oka obserwatora.
Jak mona sprawdzi, czy obiekt znalaz si z tyu obserwatora? Wrmy do rysunku,
ktry pomg nam w wyprowadzeniu rwna perspektywy (rysunek 2.15).
Rysunek 2.15.
Obiekt znajduje si
z tyu obserwatora,
gdy jego wsprzdna
z jest mniejsza
od ujemnej wartoci
odlegoci d
51
Pocztek trjwymiarowego ukadu wsprzdnych mieci si bezporednio na paszczynie ekranu monitora. Wszystko, co mieci si po twojej stronie ekranu, posiada
ujemn warto wsprzdnej z; z kolei wszystko, co mieci si po drugiej jego stronie
(czyli wewntrz monitora), ma dodatni warto wsprzdnej z. Zakadan odlego
od twojego oka do monitora okrelilimy jako d (wpywa ona na obliczany wspczynnik perspektywy
). Innymi sowy, jeli chcielibymy okreli pooenie twojego oka w symulowanej przestrzeni trjwymiarowej, miaoby ono wsprzdne (0, 0, d). Jeli zatem wsprzdna z obiektu przyjmie warto mniejsz od d,
obiekt ten znajdzie si za tob (a dokadniej, za twoim okiem).
Korzystajc z tej informacji, moemy utworzy wyraenie warunkowe, ktre bdzie
sprawdza, czy obiekt znalaz si z tyu uytkownika; jeli tak, wyczymy widzialno
obiektu. Poniewa w sytuacji, gdy klip mieci si poza uytkownikiem, w ogle nie musi by on wywietlany na obrazie, moesz zaoszczdzi Flashowi oblicze, umieszczajc
wewntrz klauzuli cay fragment skryptu, zajmujcy si rzutowaniem klipu na ekran.
Poniszy skrypt bdzie bardziej wymowny ni moje sowa; zawarto detektora
rzutuje trjwymiarowe obiekty na paszczyzn ekranu.
9
>7. &4
.
'0 ? .*? .*E9D+&? .*? .*@ABCD+&#
.0 ? .*? .*KCA9D+&? .*? .*HD@+&#
0 ? .*? .*FGH+&? .*? .*IJ+&#
;8&.
4
7<
.3&
)*/ 7
#
2
3&
)*/
#
$&.
..
&
/
0#
&1
.
&
/' '+ &
/
#
&
/. .+ &
/
#
%1
)*/' /'0 &
/'#
)*/. /. &
/.#
%
4
)*/'&
)*/.&
/ + &
/
#
>
.
$43
)*
)#
2
2
52
Obrt
Obrt jest jednym z typowych efektw przeprowadzanych w przestrzeni trjwymiarowej.
Daje wraenie rzeczywistego przebywania w rodowisku trjwymiarowym, poniewa
pozwala si w niej obraca i oglda j ze wszystkich stron. Cho jest to najbardziej
skomplikowany aspekt omawiany do tej pory w tym rozdziale, jest zrozumiay nawet
dla matematycznego nowicjusza.
Wstp do obrotu
Zanim przystpimy do tworzenia kodu, przypomnijmy kilka podstawowych zagadnie,
gwnie z trygonometrii.
Dwie trygonometryczne funkcje, z ktrych bdziemy teraz intensywnie korzysta, to
sinus (symbol sin) oraz kosinus (symbol cos). Obie funkcje jako argument przyjmuj
warto kta. Aby zobrazowa wyniki zwracane przez te funkcje, narysujmy trjkt
prostoktny (rysunek 2.16).
Rysunek 2.16.
Wartoci funkcji sinus
i kosinus s obliczane
na podstawie dugoci
bokw trjkta
prostoktnego
Warto sinusa kta jest rwna dugoci y przyprostoktnej4 lecej naprzeciw kta ,
podzielonej przez dugo r przeciwprostoktnej5. Kosinus kta jest z kolei rwny
dugoci x przyprostoktnej lecej przy kcie , podzielonej przez dugo r przeciwprostoktnej. Definicje te dla utrwalenia zanotujemy na rysunku 2.17.
Rysunek 2.17.
Rwnania funkcji
sinus i kosinus
4
5
53
Rysunek 2.18.
Trjkt prostoktny
z wierzchokami
osadzonymi w ukadzie
wsprzdnych
Przeksztacajc rwnania sinusa i kosinusa, moemy utworzy rwnania na dugo bokw x i y (rysunek 2.19).
Rysunek 2.19.
Proste przeksztacenie
rwna sinusa
i kosinusa
daje rwnania
na dugoci bokw x i y
Powyszy zestaw rwna pozwala nam znale wsprzdne x i y punktu, gdy znamy
dugo boku r i warto kta . Jednak jakie znaczenie maj wielkoci r i ? Wyobra
sobie prosty patyk lecy na paskiej pododze, z jednym z wierzchokw umieszczonym w punkcie (0, 0) ukadu wsprzdnych, za drugim wierzchokiem w punkcie (0, r),
przy czym r jest dugoci patyka (rysunek 2.20).
Rysunek 2.20.
Patyk z jednym
z wierzchokw
w pocztku ukadu
wsprzdnych,
za drugim
wierzchokiem na osi x
Gdyby obrci patyk o kt wok rodka ukadu wsprzdnych, jeden z wierzchokw pozostaby w pocztku ukadu wsprzdnych, za drugi znalazby si gdzie na
paszczynie xy. Moemy dokadnie ustali, jakie jest pooenie drugiego wierzchoka.
Rwnania sinusa i kosinusa, przeksztacone do postaci przedstawionej na rysunku 2.19,
pozwalaj nam odnale wsprzdne x i y, jeli znamy wielkoci r i (rysunek 2.21).
Rysunek 2.21.
Za pomoc
wyprowadzonych
rwna moesz
znale wsprzdne
wierzchoka
obrconego patyka
54
Rysunek 2.22.
Tosamo sinusa
i kosinusa sumy ktw
Aby uatwi sobie ycie, przyjmijmy, e promie uku r ma dugo 1. W tym wyjtkowym przypadku miara radianowa kta upraszcza si do dugoci uku s. Dugo uku
w penym kcie (czyli po prostu obwd okrgu) wynosi 2r. Jeli promie okrgu r wynosi 1, wwczas jego obwd jest rwny 2. Std wynika, e kt 360 stopni jest rwny
ktowi 2 radianw. Jeli zatem mamy kt 360 stopni, moemy przeliczy go na radiany, mnoc go przez warto 2 i dzielc przez 360; jeli uprocimy to dziaanie, wystarczy przemnoenie kta przez i podzielenie przez 180. Korzystajc z tego wspczynnika moesz przelicza stopnie na radiany (mnoc stopnie przez wspczynnik)
lub radiany na stopnie (dzielc radiany przez wspczynnik). Rysunek 2.24 przedstawia
wzr na przeliczanie ktw w stopniach na radiany i z powrotem.
55
Rysunek 2.24.
Konwersja pomidzy
stopniami i radianami
Obiekt Math Flasha, ktry udostpnia wszystkie funkcje trygonometryczne, korzysta z radianowej miary ktw, dlatego przed skorzystaniem z dowolnej funkcji trygonometrycznej
musisz przeliczy stopnie na radiany. Jak si dalej przekonasz, najlepiej jest operowa
ktami obrotw w stopniach i przelicza je na radiany bezporednio przed uyciem
funkcji trygonometrycznych Flasha.
56
Rysunek 2.26.
Linia czca punkt
na paszczynie xy
z pocztkiem ukadu
wsprzdnych tworzy
kt z osi x
Teraz obr ten punkt o kt b wok pocztku ukadu wsprzdnych (lub wok osi
z prostopadej do paszczyzny xy). Obrcony punkt przyjmie wsprzdne (x', y', 0), zachowujc przy tym pierwotn odlego r od pocztku ukadu wsprzdnych (rysunek 2.27).
Rysunek 2.27.
Punkt obrcony
wok osi z
Zwr uwag, e teraz linia czca obrcony punkt z pocztkiem ukadu wsprzdnych tworzy z osi x kt o wartoci a+b, a nie tylko b. Kt b to kt, o jaki obrcilimy
pierwotn konfiguracj punktu. Zatem problem obrotu punktu wok osi z sprowadza
si do znalezienia nowych wsprzdnych (x', y', 0), przy czym znane s wartoci a, b, r
oraz pierwotne wsprzdne (x, y, 0).
57
By moe zaczynasz si ju domyla, dlaczego wczeniej wspomnielimy o tosamociach trygonometrycznych dla sumy ktw. Powysze rwnania nie s dla nas adn
nowoci. Musimy jedynie pamita, e obrcony punkt tworzy z osi x kt a+b. Cho
rwnania te mogyby by uyteczne podczas obracania punktu, jednak ich zastosowanie
byoby uciliwe. Musielibymy cay czas ledzi odlego punktu od pierwotnej pozycji oraz pierwotnego kta nachylenia. Jest to moliwe do zrealizowania, lecz nie jest
konieczne. Korzystajc z tosamoci trygonometrycznych dla sumy ktw, wyprowadzimy bardziej praktyczne wzory (rysunek 2.29).
Rysunek 2.29.
Korzystamy
z tosamoci
trygonometrycznych
dla sumy ktw,
podstawiajc je
do wzorw
Zwr uwag, e tosamoci dla sumy ktw nie zawieraj wielkoci r, zatem podczas
podstawiania tosamoci do wzorw wielko r musi pozosta poza nawiasami. Jednak
aby uproci nasze wyraenia, moemy przemnoy wyraz r przez wntrze nawiasw
(rysunek 2.30).
Rysunek 2.30.
Mnoymy wyraz r
przez zawarto
nawiasw
Jeli jeste spostrzegawczy, z pewnoci zauwaysz, e w ostatnim zestawie rwna wystpuj pewne wsplne elementy. Rwnania na x', y' i z' zawieraj czony, ktre s identyczne z rwnaniami na x, y i z. Mwimy oczywicie o czonach (r cos a) oraz (r sin a),
ktre s odpowiednio rwne wielkociom x i y. Korzystajc z tego faktu, moemy zastpi
te czony wielkociami x i y (rysunek 2.31).
Tym sposobem otrzymae rwnania opisujce obrt punktu wok osi z. Jeli znasz
pierwotne pooenie punktu (x, y, 0) i chcesz obrci go wok osi z o b stopni, po prostu uyj ostatnich dwch rwna. Zwr uwag, e pozbylimy si w nich wszelkich
kopotliwych wielkoci, takich jak r czy a.
58
Rysunek 2.31.
Upro rwnania,
zastpujc podobne
czony
Za kadym razem gdy klikniesz przycisk Obr, punkt obrci si wok pocztku ukadu wsprzdnych o kt podany w polu Kt obrotu (rysunek 2.32).
Rysunek 2.32.
Obrt punktu wok
osi z o kt podany
przez uytkownika
59
(
)*JA-L"#
.&%
$%.
$4.&)
/' ,56#
/. ,""#
&3
1
' -6"#
. "#
&3
.1
*/' /'0'#
*/. /..#
W nastpnych kilku wierszach skryptu odbywa si obliczanie nowego pooenia obracanego punktu. Nie moemy jednak zmienia bezporednio wsprzdnych x i y punktu
za pomoc wyprowadzonych wczeniej rwna. Gdybymy od razu zaktualizowali
wsprzdn x przed obliczeniem wartoci wsprzdnej y, tosamoci nie zadziaayby
poprawnie. Dlatego tworzymy dwie pomocnicze zmienne,
i
, i dopiero po zakoczeniu oblicze aktualizujemy zmienne i .
&1
& 8
1.
%3&
1
&
.
.&.&)
.3
$
/' '+&/
.+/
#
/. .+&/
0'+/
#
%1
'
/'#
.
/.#
60
czc wszystkie elementy, otrzymujemy skrypt przycisku, obracajcy punkt o wsprzdnych (x, y) o kt
wok rodka dwuwymiarowego ukadu wsprzdnych.
%;3
/
(
)*H
/
+
#
&/
(
)*&H
/
+
#
&1
& 8
1.
%3&
1
&
.
.&.&)
.3
$
/' '+&/
.+/
#
/. .+&/
0'+/
#
%1
'
/'#
.
/.#
.1
*/' /'0'#
*/. /..#
2
Przytrzymujc klawisze strzaek w lewo lub w prawo, moesz modyfikowa kt, o jaki
punkt obraca si w kadej klatce. Zanim zajrzysz do kodu, zastanw si, jak zrealizujesz
takie zadanie. W jaki sposb umoliwisz uytkownikowi modyfikowanie kta obrotu
i obracanie punktu o ten zmodyfikowany kt?
Otwrz plik z_axis_rotation2.fla, zapisany na pycie CD-ROM.
Plik ten dziaa podobnie jak poprzedni przykad pooenie punktu jest obliczane
w taki sam sposb. Plik nie zawiera jednak przycisku Obr, pola tekstowego ani dodatkowej warstwy dla skryptw w gwnej listwie czasowej; wszystkie akcje s zawarte
wewntrz detektorw zdarze klipu filmowego.
Detektor zdarzenia
deklaruje kilka niezbdnych wartoci sta
suc
do konwertowania stopni na radiany, pooenie pocztku trjwymiarowego ukadu
wsprzdnych, pocztkowe pooenie punktu oraz pocztkowy kt obrotu. Ponadto
61
62
Rysunek 2.33.
Punkt obracany
wok osi x
Na podstawie tego rysunku moemy sformuowa pierwszy zestaw rwna, podobnie jak
zrobilimy to poprzednio. Ponownie zwr uwag, e po obrceniu punktu o kt b, linia
czca go z pocztkiem ukadu wsprzdnych tworzy z osi z kt a+b (rysunek 2.34).
Rysunek 2.34.
Rwnania opisujce
pooenie punktu
w pierwotnej pozycji
oraz po obrocie
63
Rysunek 2.35.
Rwnania opisujce
obrt punktu
wok osi x
Rysunek 2.36.
Rwnania opisujce
obrt punktu
wok osi y
w trjwymiarowym
ukadzie wsprzdnych
Wyprowadzilimy rwnania opisujce obroty skadowe wok wszystkich trzech osi przestrzennego ukadu wsprzdnych. Zbierzmy rezultaty tych wyprowadze na rysunku 2.37.
Cho oznaczenia przy zmiennych x, y i z jeden, dwa lub trzy apostrofy s stosunkowo drobne, nie wolno ich lekceway. Powysze rwnania demonstruj zasad, ktra
ma ogromne znaczenie podczas obracania obiektw wzgldem trzech osi zawsze
przeksztacaj punkt bdcy wynikiem poprzedniego przeksztacenia. Oznacza to, e jeli
chcesz obrci punkt wok osi x i y, powiniene obrci pierwotny punkt wok osi x,
a nastpnie wynik tego obrotu obrci wok osi y.
Oto plan dziaania skryptu, ktry obraca wiele punktw wok wszystkich trzech osi
(x, y oraz z) ukadu wsprzdnych, odpowiednio o kty a, b i c:
64
Rysunek 2.37.
Rwnania opisujce
obroty skadowe
wok poszczeglnych
osi przestrzennego
ukadu wsprzdnych
Optymalizacja
Posiadamy wszystkie informacje potrzebne do utworzenia we Flashu kilku spektakularnych efektw. Jednak nie mniej wane jest, by Flash zdoa wykona wszystkie potrzebne obliczenia. Bardziej zaawansowane metody optymalizacji oblicze i redukcji
obcienia procesora nie maj zastosowania we Flashu z dwch powodw: Flash nie
obsuguje optymalizowanych oblicze, a w rodowisku nie ma wystarczajcej liczby
obiektw, by w peni korzysta z tych algorytmw. W tym podrozdziale omwimy jednak kilka technik optymalizacji, ktre s uyteczne we Flashu.
65
znajdowa si z tyu obserwatora, nie wykonywalimy dla niego oblicze, lecz wyczalimy jego widzialno. Moemy rozwin t ide i wycza obiekty, ktre nie s
widoczne w obszarze ekranu.
Obiekt znajduje si poza widzialnym obszarem, jeli jego wsprzdna x lub y na obrazie jest wiksza od szerokoci lub wysokoci obrazu, lub mniejsza od 0. Moemy to
sprawdzi za pomoc kilku wyrae warunkowych i w zalenoci od wyniku przypisa
waciwoci odpowiedniego klipu warto lub
.
.
/
) 66"#
/) )
!""#
2
9
;8&.
4
7
)*/'M
/
)NN
)*/'<"
4
3
3
43
)*/ 7
#
2
7
)*/.M
/) )
NN
)*/.<"
4
$33
43
)*/ 7
#
2
%% 4
)*/
#
2
2
66
$
.
%
.&.
;8&.
&4
. %
2
2
Niektrzy tworz tablice wartoci sinusw i kosinusw, dziki czemu w ogle nie musz korzysta z obiektu Math. Cho praktyka ta bya popularnie stosowana w przeszoci w jzykach C++ i innych jzykach programowania, jednak nie jest potrzebna
w przypadku dzisiejszych szybkich komputerw.
Film wywietla skadowe kty obrotu wok poszczeglnych osi i w kadej klatce obraca skupisko punktw o ustawione kty (rysunek 2.38).
Otwrz plik demo_one1.fla, zapisany na pycie CD-ROM.
Ukad
Dokument zawiera siedem gwnych elementw graficznych. Sze z nich to przyciski
sterujce czstkowymi ktami obrotu wok trzech osi. Ostatnia grafika to klip filmowy
67
Rysunek 2.38.
Za pomoc przyciskw
ustaw skadowe kty
obrotu wok
poszczeglnych osi
68
Inicjalizacja zmiennych
W pierwszej klatce gwnej listwy czasowej ( ) inicjalizujemy zmienne
,
i
, reprezentujce kty obrotu wok poszczeglnych osi. Wartoci tych zmiennych s modyfikowane przez uytkownika za
pomoc szeciu przyciskw umieszczonych na obrazie. Nastpnie s odczytywane
przez klip filmowy
. Poniewa bezporednio po uruchomieniu filmu punkty nie
powinny by obracane, zmiennym tym nadajemy pocztkowe wartoci 0.
Pozostae akcje powizaem bezporednio z klipem filmowym
. Odczytywanie
wsprzdnych punktu w poprzednich przykadach nie stanowio adnego problemu,
poniewa wszelkie informacje o punkcie mieciy si w nim samym. Tymi parametrami
punktw sterujemy z zewntrznego skryptu, zatem musimy ledzi pozycje wielu
punktw. Moglibymy utworzy wiele zmiennych o nazwach !, ", !, " i tak dalej
dla kadego punktu, lecz takie rozwizanie byoby mao wydajne. Zamiast tego tworzymy tablic obiektw. Kady element tablicy reprezentuje jeden punkt, za poszczeglne waciwoci punktw stanowi wartoci poszczeglnych wsprzdnych.
W zwizku z powyszym w detektorze zdarzenia
klipu filmowego
tworzymy tablic, a nastpnie w ptli umieszczamy obiekt w kadym elemencie tej tablicy.
Wreszcie losujemy pocztkowe wartoci wsprzdnych punktu. W tej samej ptli duplikujemy rwnie same punkty.
&
&
.&)
$
/
-6#
&
.&%
$
/
O
./
#
$
&3
.&).&%
7
% "#%</
#%00
&%
$7.&)
/
*
*&
( =
=0%8%#
$
$4.&)'8.
/
P%Q F% &
#
.%&3
$4
/
P%Q*' (
)*
+,""-""#
/
P%Q*. (
)*
+,""-""#
/
P%Q* (
)*
+,""-""#
2
69
1 &3
$%.
$4.&)
/' ,56#
/. ,""#
R""#
&3
.
7
/
)*/
)#
$&. %
.
(
)*JA-L"#
2
Skrypty przyciskw
Skrypty przyciskw s w tym przykadzie bardzo proste. Gdy uytkownik kliknie przycisk przedstawiajcy strzak w gr, jego skrypt zwikszy warto odpowiedniego kta
obrotu; gdy z kolei kliknie przycisk skierowany w d, jego skrypt zmniejszy warto
odpowiedniego kta obrotu. Moesz dowolnie dobra warto jednorazowej zmiany
wartoci kta; ja zdecydowaem si na zastosowanie operatorw inkrementacji ## i dekrementacji $$, ktre zmieniaj warto zmiennej o 1.
Oto skrypt wykonywany po klikniciu przycisku skierowanego w gr, odpowiadajcego osi x.
43
$'
/
/'00#
2
Gwny skrypt
Gwny skrypt filmu mieci si w detektorach zdarze klipu filmowego
. W skrypcie tym s wykonywane obroty i rzuty perspektywiczne punktw. Cho te 50 wierszy kodu nie zawiera adnych nowoci, jednak wie si z nim kilka puapek, na ktre trzeba
uwaa. Ponadto moesz zaobserwowa zastosowane w nim techniki optymalizacji.
Wiele osb popenia bd polegajcy na obracaniu obiektw wok wszystkich osi,
nawet gdy nie jest to potrzebne. W wielu przypadkach wystarcza obrt wok jednej
bd dwch osi. Obrt wok wikszej liczby osi, ni jest to konieczne, jedynie
zwiksza ilo oblicze wykonywanych przez skrypt.
70
Pierwszymi operacjami wykonywanymi w ptli s obroty. Pamitaj, e najpierw obracamy punkt wok osi x, nastpnie wynik tego obrotu obracamy wok osi y i wreszcie
wynik tego obrotu obracamy wok osi z. Wane jest, by zawsze przeksztaca wynik
poprzedniego przeksztacenia i nie modyfikowa tablicy przed zakoczeniem wszystkich przeksztace. W razie niepewnoci wr do rysunku 2.37 nie
jest atwo zapamita szeciu rwna!
$
$'
'-
/
P%Q*'#
.-
/
P%Q*.+&/
/
P%Q*+/
#
-
/
P%Q*+&/
0
/
P%Q*.+/
#
$
$.
', '-+&/-+/#
., .-#
, -+&/0'-+/#
$
$
'R ',+&/&.,+/&#
.R .,+&/&0',+/&#
R ,#
&%
&.$4.&)
/
P%Q*' 'R#
/
P%Q*. .R#
/
P%Q* R#
71
wykonujesz wszelkie przesunicia i obroty. Gdy ju dotrzesz do wspczynnika perspektywy i uporzdkowanej pary liczb, po prostu wpisujesz odpowiednie wartoci do waciwoci klipu filmowego.
. %&
/
P=
=0%Q*/' /'0 &
/'#
/
P=
=0%Q*/. /. &
/.#
.7%.
.
/
P=
=0%Q*/'&
/
P=
=0%Q*/.&
/ +
&
/
#
.7%
.
% $43
/
P=
=0%Q*
)R#
W tym pliku stosujemy te same rozwizania co poprzednio, jedynie nieznacznie modyfikujemy dziaanie skryptu z pliku demo_one1.fla. Przede wszystkim usuwamy przyciski i obsugujce je skrypty, jak rwnie skrypt w pierwszej klatce gwnej listwy czasowej ( ). Zmienne ktw obrotu bd teraz przechowywane w klipie filmowym
. W zwizku z tym wewntrz detektora zdarzenia
klipu musimy umieci takie dodatkowe akcje:
&3
3
.
$& $.&)
/
/' "#
/
/. "#
/
/ "#
72
To wszystkie dodatkowe wartoci, jakich uywamy w tym wariancie. Wewntrz detektora zdarzenia
klipu filmowego musimy doda akcje zwikszajce lub zmniejszajce wartoci ktw obrotu po wykryciu wcinicia odpowiedniego klawisza. Robimy
to przed obliczeniem sinusw i kosinusw ktw, by obliczone wartoci byy aktualne.
.7%
&3
$
1&&4
.&)
.
/
/'0 ? .*? .*IJ+
/&? .*? .*FGH+
/&#
/
/.0 ? .*? .*@ABCD+
/&? .*? .*E9D+
/&#
/
/0 ? .*? .*FHD@FE+
/&? .*
? .*HI(JO/"+
/&#
Za pomoc klawiszy strzaek moesz porusza si w trjwymiarowym wiecie (rysunek 2.39). Zastanw si, jak mgby uzyska taki efekt, zanim zajrzysz do pliku. Jakiego typu obrt realizujemy? Jakie zachodz przesunicia?
73
Rysunek 2.39.
Trjwymiarowy wiat
utworzony we Flashu
Zudzenie przestrzeni
Za pomoc dwch prostych przeksztace uzyskamy iluzj obiektw otaczajcych bohatera. Gdy wyprowadzalimy rwnania okrelajce pooenie trjwymiarowego punktu na
74
75
Nastpnie w ptli klonujemy drzewa. Dla kadego drzewa tworzymy w tablicy %
obiekt, w ktrym umiecimy jego wsprzdne i skal. Wielkoci te bd waciwociami obiektu w tablicy.
..%&)
&&
7
% "#%</% &
#%00
&%
/
*% &
*&
( =% &
=0%8%#
$
&.
8
%3&.3
3
$%4$4.&)
4
% &
/
P%Q F% &
#
.%&3
1
% &
/
P%Q*' (
)*
+-6""56"#
% &
/
P%Q*. "#
% &
/
P%Q* (
)*
+-6""56"#
.%&3
3
4
% &
/
P%Q*
/ (
)*
+6"06"#
2
Pozostae inicjalizowane wielkoci s staymi zwizanymi z tworzonym wiatem. Podobnie jak we wczeniejszych demonstracjach musimy okreli pooenie trjwymiarowego ukadu wsprzdnych, odlego obserwatora od ekranu oraz sta potrzebn
przy konwersji stopni na radiany.
1
$%.
$4.&)
/' ,56#
/. ,""#
6""#
$&. %
.
(
)*JA-L"#
76
Wreszcie, wewntrz obiektu Key definiujemy sta odpowiadajc kodowi klawisza 0 (zero) na klawiaturze numerycznej. Za chwil omwimy klawisze sterujce ruchem i obrotem bohatera.
"
.& %
? .*HI(JO/" ST#
2
Klawisze sterujce
Dobr odpowiednich klawiszy sterujcych umoliwi uytkownikowi wygodne poruszanie si w wiecie. Musimy umoliwi mu sterowanie obrotami wok osi y oraz przemieszczanie si wzdu osi z (w przd i w ty) oraz osi x (na boki). Dobr klawiszy sterujcych obrotem wok osi y oraz ruchem wzdu osi z jest oczywisty najbardziej
odpowiednie do tego celu s klawisze strzaek. Mniej oczywiste jest sterowanie ruchem
na boki; zdecydowaem si na wybranie klawiszy Ctrl i 0 na klawiaturze numerycznej.
Gwna cz skryptu
Pozostaa, gwna cz skryptu mieci si w detektorze zdarzenia
klipu
filmowego
. W tych 70 czy 80 wierszach kodu korzystamy z wszystkich omwionych do tej pory technik, cznie z optymalizacj.
Zanim przystpimy do przesuwania, obracania i rzutowania punktw, musimy zmodyfikowa aktualny kt obrotu oraz przesunicia, zgodnie z klawiszami wcinitymi przez
uytkownika. Stosujemy w tym celu technik, ktr poznalimy ju wczeniej.
77
9
.7% 4& '
1&..
&4&
/' ? .*? .*FHD@FE+
/&? .*
? .*HI(JO/"+
/&#
/ ? .*? .*FGH+
/&? .*? .*IJ+
/&#
.7%3
$.
1&..
&4&
/
/. ? .*? .*@ABCD+
/&? .*? .*E9D+
/&#
Gdy znamy ju aktualny kt obrotu, musimy obliczy jego sinus i kosinus na uytek
rwna obrotu. Pamitaj, e wartoci te wystarczy obliczy jeden raz przed skorzystaniem z rwna obrotu. Nie obliczaj sinusa i kosinusa kta obrotu wewntrz ptli ,
zajmujcej si obracaniem i rzutowaniem poszczeglnych punktw.
3
/. (
)*
/
/.+
#
&/. (
)*&
/
/.+
#
W poprzednich przykadach w tym miejscu przystpowalimy ju do rzutowania punktu. Symulujc trjwymiarowy wiat, musimy jednak pamita, by dokadnie otoczy
nim bohatera. Std wynikaj dwa dodatkowe przeksztaceniach, o ktrych wspomnielimy wczeniej. S to przesunicia, ktre dotycz jedynie zmiennych i . Pooenie
78
Tym sposobem uzyskujemy ostateczne wsprzdne punktw po przeksztaceniach. Teraz pozostaje nam zrzutowanie ich na paszczyzn ekranu.
Podczas rzutowania staramy si wykona jak najmniej operacji. Z jednej z takich oszczdnoci korzystalimy ju wczeniej sprawdzalimy, czy obiekt znajduje si z tyu obserwatora. Jeli aktualna wsprzdna z rzutowanego punktu jest mniejsza ni ujemna warto
odlegoci obserwatora od ekranu, nie musimy rzutowa ani wywietla punktu.
;8&.
4
.
7<
.
8.3&
/
P=% &
=0%Q*/ 7
#
2
&%
2
Nawet jeli obiekt nie znajduje si z tyu obserwatora, nie jest powiedziane, e znajdzie
si na ekranie. Jeli obiekt mieci si poza ekranem, nadal nie musimy go wywietla. eby to jednak stwierdzi, musimy zrzutowa go na ekran, czyli pozna jego wsprzdne
i skal. Pamitaj, e te operacje mieszcz si wewntrz klauzuli wyraenia warunkowego i s wykonywane tylko wwczas, gdy obiekt znajduje si z przodu obserwatora.
%
.
8 &1 .
8
4& 3&
%% &
&
$&.
..
&
/
0#
&1
&
/' /'0'+ &
/
#
&
/. /..+ &
/
#
.&
&
/&
% &
/
P%Q*
/ + &
/
#
79
Wszelkie akcje zwizane z aktualizacj pooenia obiektu mieszcz si wewntrz klauzuli tego wyraenia warunkowego. Przede wszystkim wczamy widzialno
( ) obiektu, poniewa znajduje si on na ekranie. Nastpnie przepisujemy obliczone wartoci wsprzdnych i skali do jego odpowiednich waciwoci.
83&
/
P=% &
=0%Q*/
#
%$4
/
P=% &
=0%Q*/' &
/'#
/
P=% &
=0%Q*/. &
/.#
%
4
/
P=% &
=0%Q*/'&
/
P=% &
=0%Q*/.&
&
/&
#
% $43
/
P=% &
=0%Q*
)#
2
2
2
2
W tym przykadzie losowo rozmieszczamy w trjwymiarowej przestrzeni kilka napisw. Uytkownik moe porusza si w przestrzeni i wybiera napisy, ktre s jednoczenie przyciskami. Nie obracamy caego rodowiska, poniewa nie jestemy w stanie
przedstawia elementw menu pod rnymi ktami (rysunek 2.40).
Otwrz plik demo_three1.fla, zapisany na pycie CD-ROM.
80
Rysunek 2.40.
Ruchome elementy
menu rozrzucone
w przestrzeni
Rozpoczynamy demonstracj
Ta demonstracja zawiera bardzo ma liczb komponentw, za w jej mechanizmach
nie znajdziesz adnych sztuczek. Aby podkreli perspektywiczny charakter demonstracji, moesz utworzy rysunek ta, obejmujcy ca powierzchni obrazu. W takim przypadku pamitaj o tym, by punkt zbiegu perspektywy na rysunku ta pokrywa si
z punktem zbiegu perspektywy napisw (szczeglnie wana jest wsprzdna y punktu
zbiegu, ktra pokrywa si z lini horyzontu). Utwrz rwnie klip filmowy (o nazwie
), ktry bdzie zawiera elementy menu. W klipie tym umieciem dugie
dynamiczne pole tekstowe (takie, by miecio stosunkowo dugie nazwy elementw menu)
i powizaem je ze zmienn. Ponadto pod polem tekstowym utworzyem niewidzialny
przycisk, ktry po klikniciu otwiera wybrany adres URL w nowym oknie przegldarki.
Jak zwykle, oddzielny klip filmowy
zawiera najwaniejsze czci kodu.
Skrypty
Jedynie w trzech miejscach tego pliku znajduj si skrypty. Pierwszym jest przycisk
wewntrz klipu filmowego , drugim s detektory zdarze tego klipu, za
trzecim s detektory zdarze klipu filmowego
. Najwaniejszy skrypt mieci si
w trzecim z wymienionych miejsc; pozostae dwa zawieraj po kilka wierszy kodu.
Poniewa klip filmowy bdzie wielokrotnie klonowany, umieciem w nim
krtki skrypt, ktry wycza pierwotny klon tego klipu (ten, z ktrego bd duplikowane wszystkie nastpne). Ten pierwszy klon nie ma bra udziau w prezentacji, jedynie
da pocztek pozostaym klonom.
81
.3&
.
7
)*/
= /
=
)*/ 7
#
2
2
Gwna cz skryptu w detektorach zdarze klipu
rni si nieco od kodu, z ktrym pracowalimy do tej pory. Rozpoczynamy od zadeklarowania liczby elementw
menu, ktre pojawi si na obrazie. Dla kadego z nich musimy zapamita takie informacje jak wywietlana nazwa, zwizany z ni adres URL oraz wsprzdne przestrzenne. Aby uporzdkowa te informacje, tworzymy tablic zawierajc oddzielny
obiekt dla kadego elementu menu. Kady z tych obiektw bdzie zawiera wszystkie
informacje o jednym elemencie menu.
&
$
/ /
-"#
&
7
&%
& $.&)
&)
/
/7 O
./ /
#
$
1
&.
7
% "#%</ /
#%00
/
/7P%Q F% &
#
2
W*) *&=#
/
/7P-Q* =)
W* *&=#
/
/7P,Q* =)
W*
7*&=#
/
/7PRQ* =)
W*&
*&=#
/
/7P!Q* =)
W*
77*&=#
/
/7P6Q* =)
W*)
.*&=#
/
/7PTQ* =)
W* *&=#
82
W* *&=#
/
/7PLQ* =)
W*
*&=#
/
/7PSQ* =)
W*&
&
*&=#
Po ustaleniu tych informacji musimy powieli element menu i ustali warunki pocztkowe. Nazwa kadego elementu i odpowiadajcy mu adres URL s przesyane do klonu
klipu filmowego, gdzie mog by nastpnie wywietlone i uyte w przycisku.
Przestrzenne wsprzdne elementw menu s inicjalizowane w specjalny sposb. Tworzony przez nas efekt wymaga, by elementy menu byy rozrzucone przed obserwatorem.
Oznacza to, e elementy naley rozmieci jedynie wzdu osi x i z. Dodaem rwnie
niewielki czynnik losowy dla wsprzdnej y, by zwikszy wraenie przestrzeni.
&%
$ &
7
% "#%</ /
#%00
&%
/
* /
*&
( = /
=0%8%
4
. 3
7
/
P= /
=0%Q*7 /
/7P%Q*
#
%
7 8..
&)4&
.&
/
P= /
=0%Q* /
/7P%Q*#
.%1 7
/
/7P%Q*' (
)*
+-"""6""#
/
/7P%Q*. (
)*
+-""6"#
/
/7P%Q* (
)*
+6""#
2
Pozostay jeszcze do zainicjalizowania wielkoci wpywajce na zmian pooenia elementw. Ponadto definiujemy pierwotn skal elementw menu. Bezwzgldna wielko wszystkich napisw (czyli ich wielko po odrzuceniu perspektywy) powinna by
taka sama; dziki temu nie bdziesz musia ledzi skali poszczeglnych napisw w tablicy .
1 &3
$%.
$4.&)
/' ,56#
/. ,""#
R""#
$&. %
.
(
)*JA-L"#
.
4&
&)'&4&
/& -"#
&3
4& 1'
/' "#
/ "#
&3
.
/
/ ,""#
2
83
Po przesuniciu punktw sprawdzasz pierwszy warunek widzialnoci. Jeli punkt znajduje si z tyu obserwatora, nie ma potrzeby rzutowania go i wywietlania. Jeli jednak
znajduje si z przodu obserwatora, musimy dodatkowo sprawdzi, czy znajduje si na
obrazie, czy poza nim.
;8&.
1.
.
7
<
%
8.3&
/
P= /
=0%Q*/ 7
#
2
&%
2
Wewntrz klauzuli skrypt oblicza pooenie i skal zrzutowanego elementu. Posiadajc te informacje, moesz sprawdzi, czy element menu mieci si na obrazie. Poniewa wsprzdna y elementu nigdy si nie zmienia, podczas rzutowania wsprzdnej
moemy skorzysta bezporednio z informacji zawartej w tablicy .
%% 4
.
8 &
&.
% & 8
1
%% 4
8
3&
%% &
&
$&.
..
&
/
0
#
&1
&
/' /'0
'+ &
/
#
&
/. /. /
/7P%Q*.+ &
/
#
&
4
&
/&
/
/ + &
/
#
84
Skoro dotarlimy do tego miejsca struktury decyzyjnej, oznacza to, e element menu
znajduje si gdzie na obrazie. Musimy zatem wczy jego widzialno (waciwoci
przypisa warto ) oraz zaktualizowa pozycj i inne waciwoci.
%% 4
83&%
/
P= /
=0%Q*/
#
%1
/
P= /
=0%Q*/' &
/'#
/
P= /
=0%Q*/. &
/.#
%
4
/
P= /
=0%Q*/'&
/
P= /
=0%Q*/.&
&
/&
#
.
$43
/
P= /
=0%Q*
)
#
2
2
2
2
Inny wariant
Istnieje wiele metod udoskonalenia interaktywnoci w prezentowanym menu. W tym
wariancie wprowadzimy nawigacj za pomoc kursora myszy.
Otwrz plik demo_three2.swf, zapisany na pycie CD-ROM.
85
Rysunek 2.41.
Przesuwajc
kursor myszy,
moesz porusza si
w trjwymiarowym
wiecie
Mechanizmy, jakie utworzylimy do tej pory, mona atwo zaadaptowa do tego wariantu.
Musimy jedynie zmodyfikowa kilka wierszy kodu, obliczajcych przyrosty przesuni,
ktre do tej pory robiy to na podstawie wykrytych wcini klawiszy. Teraz przyrosty
powinny by obliczane na podstawie pooenia kursora myszy.
Bardzo wane jest, by nawigacja bya intuicyjna. Stwierdziem, e najlepszym rozwizaniem bdzie przesuwanie wiata wzdu osi x w kierunku przeciwnym do pooenia
kursora. Gdy zatem kursor znajduje si po lewej stronie rodka ukadu wsprzdnych,
przyrost przesunicia w poziomie (wzdu osi x) powinien by dodatni, by napisy przesuway si w prawo. Z kolei gdy kursor znajduje si po prawej stronie obrazu, przyrost powinien by ujemny, by uzyska ruch w lewo. Takie zachowanie realizujemy za pomoc
jednego prostego wiersza:
/' /'/
*/' #
/ /
*/. /.#
86
Gdy mamy zdefiniowany ten parametr, moemy zmodyfikowa oba wiersze obliczajce przesunicia.
.7% 4& 1' 1
..
/' /'/
*/'
/
#
/ /
*/. /.
/
#
I to wszystko!
Otwrz plik demo_three3.swf, zapisany na pycie CD-ROM.
Oto kolejny wariant jeden z wielu wartych zbadania. Uoylimy w nim wszystkie
elementy menu wzdu osi z i umoliwilimy uytkownikowi przesuwanie si pomidzy
nimi. Klawisze strzaek w gr i w d steruj ruchem wzdu osi z, za kursor myszy
pozwala na wykonywanie nieznacznych przesuni wzdu osi x i y (rysunek 2.42).
Rysunek 2.42.
Moesz tworzy
przerne warianty
sterowania
Dalsze przykady
Na pycie CD-ROM umieciem jeszcze kilka przykadw zastosowania programowanej
grafiki trjwymiarowej we Flashu. Jedna z demonstracji to obracajce si trjwymiarowe
menu z prostymi elementami nawigacyjnymi witryny. W innym pliku znajdziesz generator
terenu z polem si oraz kulk poruszajc si w tym polu. Mam nadziej, e badanie
tych plikw sprawi ci tyle radoci, ile mnie sprawio ich tworzenie. Pliki z tymi przykadami
znajdziesz w katalogu rozdzial_2/_Dalsze_przyklady.
87
Podsumowanie
Gratulacje nauczye si tworzy nowe, fascynujce efekty. Bez wtpienia pojawi
si u ciebie pytania i problemy zwizane z tworzeniem podobnych efektw. By moe
zechcesz je omwi z innymi czonkami spoecznoci flashowych. Jeli potrafisz posugiwa si jzykiem angielskim, jednym z dobrych miejsc dla takich dyskusji jest witryna Were-Here (www.were-here.com). Na forum matematycznym tej witryny moesz
podyskutowa z wiodcymi twrcami prezentacji flashowych; s oni znani z tego, e
przedyskutowali ju niemal wszystkie aspekty tworzenia grafiki trjwymiarowej.
Swift 3D
Program Swift 3D korzysta z interfejsu typowego dla aplikacji 3D (rysunek 2.43).
88
Rysunek 2.43.
Interfejs programu
Swift 3D
Vectra3D
Interfejs programu Vectra3D rni si od tego, ktry zobaczylimy w Swift 3D (rysunek 2.44).
Program ten nie pozwala tworzy obiektw trjwymiarowych od podstaw ani nie oferuje
gotowych schematw animacji, zatem praca w nim wyglda zgoa inaczej. Program wywietla obiekt trjwymiarowy jako grup punktw. Aby zobaczy wypenienia obiektu,
musisz go wyrenderowa.
89
Rysunek 2.44.
Interfejs programu
Vectra3D
Studium 1. Myliwiec
Moim pierwszym przykadem jest animacja futurystycznego myliwca, ktry pikuje z nieba,
wyrwnuje poziom lotu, oddaje kilka strzaw, a nastpnie wykonuje zwrot w lewo i znika z pola widzenia. Animacja ta jest zwiastunem wikszego projektu, ktry nazwaem interfejsem Gwiezdne wrota.
Zobacz animacj zapisan w pliku Spaceship_final.swf na pycie CD-ROM (rysunek 2.45).
Ukoczony projekt moesz te zobaczy pod adresem www.sdflash.net/trailer.htm.
Rysunek 2.45.
Animacja
zapisana w pliku
Spaceship_final.swf
90
Planowanie animacji
Zanim przystpisz do realizacji projektu, powiniene naszkicowa najwaniejsze momenty trjwymiarowej animacji. Gdy zobaczysz ujcia animacji na papierze, bdziesz
mg dokadnie przeanalizowa akcj i zdecydowa, ktre elementy naley zrobi w programie renderujcym, a ktre mona zreazliowa bezporednio we Flashu. Tym sposobem zaoszczdzisz mnstwo czasu i frustracji na dalszych etapach produkcji.
Staraj si ogranicza liczb uj renderowanych w zewntrznej aplikacji. Pomoe ci to
zminimalizowa rozmiar wynikowego pliku Flasha. (Kade wyrenderowane ujcie animacji
to oddzielny rysunek, wic takie rozwizanie wpywa na szybki wzrost rozmiaru pliku).
91
Kliknij ikon Play Animation (symbol trjkta) w lewym dolnym naroniku listwy czasowej, by sprawdzi przebieg animacji. Zobaczysz, jak myliwiec z pozycji pionowej
wyrwnuje lot do poziomu, a nastpnie odbija w lewo. Dokadnie taki ruch myliwca
opisalimy na wczeniejszej licie.
Zwr uwag, e aktywna kamera nosi nazw camera01. Gdy program Swift 3D importuje plik 3D Studio, dziedziczy pewne ustawienia tego programu, takie jak kt widzenia kamery, wiata i kolory. Jeli jeste uytkownikiem programu 3D Studio, jest to
dla ciebie due uatwienie, poniewa moesz przygotowa kompletny obiekt przed
przystpieniem do pracy w programie Swift 3D.
W Internecie moesz znale mnstwo darmowych siatek trjwymiarowych obiektw,
przeznaczonych dla uytkownikw, ktrzy nie maj czasu lub zdolnoci do przygotowywania
wasnych modeli. Sprawd witryny www.3dcafe.com i www.highend3d.com. Uywany przez
nas model znalazem na witrynie www.3dcafe.com.
Jak wida na rysunku 2.48, nasza animacja zawiera trzy ujcia kluczowe. Operacje obrotu i pochylenia modelu w poszczeglnych ujciach kluczowych wykonaem za pomoc kulowego manipulatora obiektw (Object Trackball), znajdujcego si w lewym dolnym naroniku interfejsu.
92
Aby ustawi typ wypenienia w programie Swift 3D, przejd na zakadk Preview and Export Editor, w polu
Output Options wybierz opcj Fill Options, a nastpnie z listy Fill Type wybierz odpowiedni metod
wypenienia przyp. tum.
93
Rysunek 2.50.
Kontynuujemy prace
nad projektem
we Flashu
Importujemy animacj
We Flashu rozpocznij prac od utworzenia klipu filmowego o nazwie *
,
w ktrym umie wyrenderowany obiekt trjwymiarowy. Nastpnie zaimportuj animacj SWF wygenerowan w programie Swift 3D, umieszczajc j na domylnej warstwie
klipu. Warstwie tej nadaj nazw
. Po zaimportowaniu animacji warstwa ta
powinna zawiera 34 ujcia kluczowe (rysunek 2.51).
Pomie silnikw i strzay dziaka
Nastpnie utwrz symbol graficzny (
zawierajcy koo wypenione gradientem radialnym. Posuy on do utworzenia efektw pomieni silnikw odrzutowych oraz strzaw
dziaka. Umie go na warstwie + klipu *
. Wane jest, by
warstwa ta znajdowaa si pod warstw
, poniewa pomie silnikw musi si
znajdowa za myliwcem. Zmie skal symbolu, tak aby wyglda jak realistyczny ar
emitowany z silnikw (rysunek 2.52). Stosujc t technik, moesz nawet uzyska efekt
podobny do tego z Gwiezdnych wojen myl tu o biao-niebieskiej unie wydobywajcej si z silnikw myliwca Millenium Falcon, ktrym latali Han Solo i Chewie.
94
Rysunek 2.51.
Kolejne ujcia
kluczowe animacji
myliwca
Rysunek 2.52.
Zmie skal
symbolu, aby
dopasowa un
do wymiarw
myliwca
W pierwszych dwudziestu klatkach klipu filmowego myliwiec porusza si po linii prostej, zatem za pomoc zwykej automatycznej animacji mona sprawi, by pomie poda za silnikami. W ostatnich 15 klatkach myliwiec porusza si mniej regularnie
i ledzenie go staje si bardziej kopotliwe. W zwizku z tym w ostatnich 15 klatkach
umie ujcia kluczowe, animujc pomie silnikw metod klatka po klatce (rysunek
2.53). Kolejne ujcia kluczowe zawieraj przeskalowane i obrcone klony symbolu (
.
Rysunek 2.53.
Animacja pomieni
stanowi kombinacj
automatycznej animacji
ruchu i animacji
klatka po klatce
95
(wysoko = 272; szeroko = 272) oraz jego wsprzdn x zmie na 128. Wreszcie
w sidmej klatce utwrz trzecie ujcie kluczowe, w ktrym ponownie zmodyfikuj laser
(wysoko = 340; szeroko = 340; wsprzdna x = 176). Modyfikujc wsprzdn x,
zwikszysz realizm efektu w wynikowym filmie.
W ujciu kluczowym w klatce numer 7 umie nastpujc akcj:
OJ
.-#
Aby utworzy efekt strzau z lewego dziaka, zduplikuj poprzednio utworzony strza i nadaj
duplikatowi nazw (
,. Nastpnie w duplikacie zmodyfikuj wsprzdn x lasera w ujciach 4. i 7., zmieniajc w panelu Info wartoci wsprzdnej z ujemnych na dodatnie. Dziki temu strza lewego dziaka bdzie si przemieszcza w przeciwn stron.
Dwik
Ostatnim krokiem zwizanym ze strzaem dziaek jest dodanie dwiku strzau. Zwr
uwag, e dwik ten umieciem tylko w jednym z dwch klipw filmowych strzaw.
Poniewa dziaka strzelaj rwnoczenie, nie ma potrzeby umieszczania dwiku w obu
klipach. Preferuj sterowanie dwikiem za pomoc skryptw, poniewa obiekt Sound
Flasha 5 oferuje znakomite moliwoci w tej dziedzinie. (Wicej informacji na temat
dwiku we Flashu znajdziesz w rozdziale 4.).
Zwykle wszystkie uywane w filmie dwiki definiuj w pierwszym ujciu gwnej listwy czasowej. To uatwia wyszukiwanie i usuwanie ewentualnych bdw w kodzie.
Symbole dwikw zawarte w bibliotece udostpniam skryptom, definiujc dla kadego
z nich identyfikator eksportu w oknie Symbol Linkage Properties. Zdefiniowany tam
identyfikator funkcjonuje tak jak zewntrzna nazwa klipu filmowego za jego pomoc
moesz odnosi si w swoich skryptach do symboli zawartych w bibliotece. Aby uatwi sobie zapamitanie identyfikatorw, nadaj im takie same nazwy, jak nazwy symboli wewntrz biblioteki.
W pierwszym ujciu klipu (
, umie nastpujc akcj:
/
*
K*
#
96
Rysunek 2.54.
Myliwiec w chwili
rozpoczcia strzau
+ i na niej umie dwa ujcia kluczowe, odpowiednio w klatkach 19. i 35.
W kadym z tych uj kluczowych umie akcj . (Na razie moe si to wydawa
niezrozumiae, lecz wszystko si wyjani, gdy poczymy wszystkie elementy animacji).
97
W klatce numer 20 zwiksz skal klipu do 65 procent i zmie jego wsprzdne na nastpujce:
XW-,L*,
YW6!*"
W panelu Frame wybierz automatyczn animacj ruchu (Motion Tween) i pozostaw domylne ustawienia pozostaych opcji. Nastpnie utwrz kolejne ujcie kluczowe w klatce
numer 40. Tam zwiksz skal myliwca do 150 procent i przesu go do wsprzdnych:
XWRL*S
YW!R*S
Ponownie wybierz automatyczn animacj ruchu, pozostawiajc jej domylne parametry. W tej klatce musimy rwnie wstawi akcj, ktra wznowi odtwarzanie klipu myliwca po tym, jak zatrzyma si na akcji w klatce numer 19 listwy czasowej klipu. Na gwnej listwie czasowej utwrz now warstw i nadaj jej nazw
+
(skrypty uj).
98
&)K=
=#
'K K#
'K*
&)K='=#
Aby odtworzy dwik nadlatujcego myliwca, utwrz nowe ujcie kluczowe w klatce
numer 6 i umie w nim nastpujc akcj:
'K*
#
Aby sterowa klipem myliwca, utwrz puste ujcie kluczowe w 40. klatce warstwy
+ i umie w nim tak akcj:
/
*
)/&*
OJ
.,"#
Na gwnej listwie czasowej utwrz nowe ujcie kluczowe w klatce numer 54 warstwy
. Zwiksz skal klipu do 300 procent i nadaj mu nastpujce wsprzdne:
XW,6,*L
YWR!5*"
99
Wszystkie trjwymiarowe obiekty projektu powstay w programie Swift 3D. Same wrota
zaprojektowaem jako paski rysunek wektorowy w programie FreeHand, a nastpnie
zaimportowaem go do programu Swift 3D. Wszystkie trjwymiarowe symbole wrt
sprawiy, e powsta plik dosy sporych rozmiarw, lecz zdecydowaem si kontynuowa projekt ze wzgldu na zadowalajce rezultaty.
Interfejs skada si z czterech wsppracujcych ze sob klipw filmowych (rysunek 2.58).
Inicjalizacja
Wszelkie czynnoci nawigacyjne rozpoczynaj si w menu, gdzie uytkownik wybiera
jedn z dostpnych opcji. Z kad z opcji jest zwizana inna sekwencja kodu, zoona
z czterech symboli. Poszczeglne sekwencje s zdefiniowane w szeciu tablicach na pocztku filmu:
. O
.6858!8R#
. O
.R868T85#
7
)
. O
.!8-868R#
&
. O
.,86858R#
7
. O
.,8T8-8R#
&
&
. O
.-868,8T#
100
Rysunek 2.58.
Ukad elementw
nawigacyjnych
Tablice te steruj caym schematem animacji. Ponadto na pocztku filmu zdefiniowaem pewne zmienne, ktre rwnie maj kluczowe znaczenie w sterowaniu interfejsem:
. &%
." "#
. &%
.- "#
& . &%
., "#
&
. &%
.R "#
7%3&
.8
$.&
&). &%
1.
#
#
101
.% .
/
*
/&*
.#
.
7 %
/
*
/&*
=K.
&
******=#
#
2
Gwiezdny nawigator
Jak wida w powyszym kodzie, w tym momencie aktywowalimy gwiezdny nawigator.
W nim zdefiniowaem funkcj, do ktrej odwouj si za kadym razem, gdy strzaki
mijaj symbol. Oto ta funkcja:
&
.%
.
7&
7&K
&&
;8&.%
.%
&..&.
&3
7/
P=.=0&
Q &ZZ/
*
-
.
/
*
/&*
=K.=0/
*
0=&
******=#
.% .&)$
/
*
/&*
.#
.%
%3&
.
J
./
*
/&P=&=0&0=/&=Q8/ 8
#
/
*&*
#
&
00#
#
7
%
.
1 . &%
2 7/
P=.=0&
Q &ZZ/
*
,
/
*
/&*
/
*
/&*
0=[K.=0/
*
0=
&
******=#
/
*
/&*
.#
J
./
*
/&P=&=0&0=/&=Q8/ 8
#
/
*&*
#
&
00#
#
2 7/
P=.=0&
Q &ZZ/
*
R
/
*
/&*
/
*
/&*
0=[K.=0/
*
0=
&
******=#
/
*
/&*
.#
J
./
*
/&P=&=0&0=/&=Q8/ 8
#
/
*&*
#
&
00#
#
2 7/
P=.=0&
Q &ZZ/
*
!
/
*
/&*
=K.=0/
*
0=&
******[E
&) \ &
&
]]]]]=#
/
*
/&*
.#
J
./
*
/&P=&=0&0=/&=Q8/ 8
#
/
*&*
#
&
00#
#
2
2
Za kadym razem gdy strzaki docieraj do symbolu, odwouj si do tej funkcji, podajc warto symbolu jako argument, w taki sposb:
102
^#
.
7&%
8&
.
7&K
,R8R8!8^ 7
^#
W tym miejscu koczy si sekwencja kodu. Teraz czas na rozpoczcie sekwencji podry.
Sekwencja podry
W sekwencji podry gwiazda jest lokalizowana w podobny sposb, jak urzdzenie GPS
lokalizuje samochd. Wybierasz cel podry, a komputer wybiera tras. W interfejsie
103
Funkcja *
" zleca gwnej listwie czasowej wykonanie skoku do etykiety
o nazwie
. W ujciu oznaczonym t etykiet rozpoczyna si sekwencja wyznaczania trasy podry. Korzystamy przy tym z kolejnej funkcji, ktr zdefiniowaem
wczeniej w listwie czasowej, a ktra wyznacza tras podry. Oto posta tej funkcji:
#
^
^#
7&
7&D
& %
. 3&4&
3
4.-T
)*7
)*
+T0-#
. %
4
.
.8
$ %.
.
%
%.
3&4
0
#
2
Funkcja )
*
jest wywoywana w gwnej listwie czasowej. Powoduje ona
wykonanie skoku w klipie
do wygenerowanej przez ni etykiety. Oto skrypt
wykonujcy ten skok:
7&D
#
/
*
/&*
OJ
.
#
104
Podsumowanie
Tym sposobem dotarlimy do koca rozdziau. Mam nadziej, e wiesz ju, jak korzysta z renderowanej grafiki trjwymiarowej i zechcesz tworzy ciekawe efekty
wizualne, dziki ktrym twoje filmy stan si bardziej realistyczne. Miej pracy w trzech
wymiarach!