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
Flash MX.
Programowanie
Autor: Robert Penner
Tumaczenie: Marek Binkowski, Rafa Joca
ISBN: 83-7361-085-5
Tytu oryginau: Robert Penner's Programming
Macromedia Flash MX
Format: B5, stron: 400
Przykady na ftp: 545 kB
Robert Penner ekspert i innowator w dziedzinie jzyka ActionScript dzieli si swoj
wiedz na temat programowania Macromedia Flash. Penner przyblia tajniki czenia
zoonej matematyki i fizyki z atrakcyjn i estetyczn grafik Flasha. Dziki ksice
Flash MX. Programowanie poznasz podstawowe zagadnienia zwizane z przestrzeni,
matematyk, kolorem, ruchem i ksztatem, a nastpnie dowiesz si, jak wykorzysta t
teori do generowania nieprzecitnych animacji. Przekonasz si, jak wspaniale moesz za
pomoc ActionScriptu symulowa zjawiska atmosferyczne takie jak tornado, nieyca czy
zorza polarna.
Ksika omawia szeroki zakres zagadnie -- od projektowania i mechaniki ruchu po tajniki
pisania poprawnego, zorientowanego obiektowo kodu; suy take pomoc w tworzeniu
kolorw, dwiku, ruchu i interakcji.
Wyjanienie podstaw matematyki w kontekcie programu Flash
Tworzenie skomplikowanych animacji oraz prostego ruchu i efektw typu rollover
Prezentacja moliwoci obiektowych jzyka ActionScript
Tworzenie atwych do modyfikacji interfejsw wielokrotnego uytku
Tworzenie obiektw trjwymiarowych
Dokadne wyjanienie procesu tworzenia kilku przykadowych animacji: nieycy,
fraktalnego tancerza i zorzy polarnej
Projektowanie i generowanie dynamicznej animacji za pomoc jzyka ActionScript
Tworzenie grafiki od prostych schematw po zoone filmy.
Poczenie odwiecznych praw fizyki i matematyki z nowoczesn technologi Flasha MX
sprawi, e bdziesz w stanie tworzy niezwyke animacje. Poznaj granice wasnej
wyobrani z ksik Flash MX. Programowanie!
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treci
O Autorze........................................................................................................... 17
Wprowadzenie ................................................................................................... 19
Co omawia ta ksika? (opisy czci i rozdziaw)..............................................................19
Jak czyta t ksik?............................................................................................................21
Pliki z przykadami................................................................................................................21
Istota dyscypliny....................................................................................................................30
Co to s dyscypliny? ........................................................................................................... 30
Nawyki .............................................................................................................................. 31
Moje dyscypliny ................................................................................................................. 32
Samodzielna nauka................................................................................................................32
Rozwj przez wiczenie ...................................................................................................... 33
Przykad: nauka skrtw klawiszowych ................................................................................ 34
Spoeczno...........................................................................................................................35
Uczenie si przez nauczanie innych ...................................................................................... 36
Udostpnianie kodu rdowego........................................................................................... 37
Ukad ksiki.........................................................................................................................41
Projektowanie........................................................................................................................62
Dobr waciwoci.............................................................................................................. 63
Dobr metod ...................................................................................................................... 63
Relacje midzy obiektami.................................................................................................... 64
Diagramy klas .................................................................................................................... 65
Dziedziczenie klas.................................................................................................................72
Dziedziczenie waciwoci a dziedziczenie metod.................................................................. 72
Dziedziczenie waciwoci za pomoc funkcji super()............................................................ 73
Dziedziczenie metod ........................................................................................................... 74
Obiekt super....................................................................................................................... 74
Dziedziczenie metod za pomoc sowa kluczowego new ........................................................ 75
Dziedziczenie metod przy uyciu waciwoci __proto__ ....................................................... 76
Rozwizanie korzystajce z waciwoci __constructor__....................................................... 76
Metoda superCon() ............................................................................................................. 78
Wnioski .................................................................................................................................79
Spis treci
Ukady wsprzdnych..........................................................................................................98
Kartezjaski ukad wsprzdnych........................................................................................ 98
Ukad wsprzdnych Flasha................................................................................................ 99
Wsprzdne biegunowe.................................................................................................... 102
Wnioski ...............................................................................................................................107
Dodawanie wektorw..........................................................................................................114
Metoda Vector.plus() ........................................................................................................ 115
Metoda Vector.plusNew().................................................................................................. 115
Odwracanie wektora............................................................................................................117
Metoda Vector.negate() ..................................................................................................... 117
Metoda Vector.negateNew() .............................................................................................. 118
Dugo wektora..................................................................................................................119
Metoda Vector.getLength()................................................................................................ 120
Metoda Vector.setLength() ................................................................................................ 120
Obracanie wektora...............................................................................................................122
Metoda Vector.rotate() ...................................................................................................... 123
Metoda Vector.rotateNew() ............................................................................................... 123
Iloczyny wektorw..............................................................................................................139
Iloczyn skalarny................................................................................................................ 139
Metoda Vector3d.dot() ...................................................................................................... 140
Iloczyn wektorowy ........................................................................................................... 140
Metoda Vector3d.cross() ................................................................................................... 142
Spis treci
Wnioski ...............................................................................................................................160
Sondy...................................................................................................................................167
Programowanie bazujce na czasie ..................................................................................... 167
Programowanie bazujce na zdarzeniach............................................................................. 168
Nasuchiwanie zdarze obiektw Flasha MX....................................................................... 169
Przykad: nasuchiwanie zdarze pola tekstowego................................................................ 170
Wysyanie zdarze do wielu obiektw ................................................................................ 171
Przygotowywanie systemu..................................................................................................179
Tworzenie obiektu bdcego rdem zdarze ..................................................................... 180
Tworzenie obiektu, dla ktrego zostanie zaoona sonda ...................................................... 180
Definiowanie detektorw zdarze ...................................................................................... 180
Zakadanie sond................................................................................................................ 181
Rozsyanie zdarze ........................................................................................................... 181
Wnioski ...............................................................................................................................182
10
Wygadzanie ruchu..............................................................................................................197
Estetyka ruchu przyspieszonego ......................................................................................... 198
Przyspieszenie .................................................................................................................. 198
Spowolnienie.................................................................................................................... 199
Przyspieszenie i spowolnienie w jednym............................................................................. 199
Klasa Tween........................................................................................................................219
Konstruktor Tween ........................................................................................................... 220
Metody publiczne ............................................................................................................. 221
Metody pobierania i ustawiania .......................................................................................... 223
Waciwoci pobierania i ustawiania................................................................................... 224
Zakaczanie ..................................................................................................................... 225
Wnioski ...............................................................................................................................225
Sia ......................................................................................................................................233
Pierwsze prawo dynamiki Newtona .................................................................................... 233
Sia niezrwnowaona (sia wypadkowa) ............................................................................ 234
Spis treci
11
Tarcie ..................................................................................................................................237
Tarcie kinetyczne.............................................................................................................. 238
Tarcie statyczne................................................................................................................ 239
Tarcie dla cieczy i gazw................................................................................................... 240
Klasa WaveMotion..............................................................................................................252
Konstruktor WaveMotion .................................................................................................. 252
WaveMotion.getPosition() ................................................................................................. 253
Metody ustawiania i pobierania .......................................................................................... 253
Waciwoci ustawiania i pobierania................................................................................... 255
Uywanie WaveMotion ..................................................................................................... 255
Wnioski ...............................................................................................................................256
Przeksztacenia kolorw......................................................................................................264
Color.setTransform() ........................................................................................................ 264
MovieClip.setColorTransform()......................................................................................... 265
Color.getTransform() ........................................................................................................ 265
MovieClip.getColorTransform() ........................................................................................ 265
12
Sterowanie jasnoci...........................................................................................................266
Color.setBrightness()......................................................................................................... 267
MovieClip.setBrightness() ................................................................................................. 267
Color.getBrightness() ........................................................................................................ 268
MovieClip.getBrightness()................................................................................................. 268
Przesunicie jasnoci...........................................................................................................268
Color.setBrightOffset()...................................................................................................... 269
MovieClip.setBrightOffset() .............................................................................................. 269
Color.getBrightOffset() ..................................................................................................... 270
MovieClip.getBrightOffset() .............................................................................................. 270
Zabarwienie.........................................................................................................................270
Color.setTint().................................................................................................................. 270
MovieClip.setTint() .......................................................................................................... 271
Color.getTint() ................................................................................................................. 271
MovieClip.getTint() .......................................................................................................... 271
Odwrcenie kolorw...........................................................................................................273
Color.invert() ................................................................................................................... 273
MovieClip.invertColor() .................................................................................................... 274
Color.setNegative() ........................................................................................................... 274
MovieClip.setNegativeColor() ........................................................................................... 274
Color.getNegative()........................................................................................................... 274
MovieClip.getNegativeColor() ........................................................................................... 275
Wnioski ...............................................................................................................................280
Spis treci
13
MovieClip.lineStyle()........................................................................................................ 282
MovieClip.curveTo() ........................................................................................................ 283
MovieClip.beginFill() ....................................................................................................... 283
MovieClip.beginGradientFill() ........................................................................................... 284
MovieClip.endFill() .......................................................................................................... 284
MovieClip.clear().............................................................................................................. 285
Wnioski ...............................................................................................................................305
Klasa ElasticForce...............................................................................................................325
Konstruktor...................................................................................................................... 325
Metody ............................................................................................................................ 326
14
Wnioski ...............................................................................................................................334
Klasa Snowstorm.................................................................................................................346
Konstruktor Snowstorm .................................................................................................... 346
Metody publiczne ............................................................................................................. 347
Wnioski ...............................................................................................................................352
Klasa MotionCam................................................................................................................362
Konstruktor MotionCam.................................................................................................... 362
Metody publiczne ............................................................................................................. 363
Metody pobierania i ustawiania .......................................................................................... 365
Metody prywatne.............................................................................................................. 367
Wnioski ...............................................................................................................................368
Oval .....................................................................................................................................375
Oval.init() ........................................................................................................................ 375
Oval.sidewind() ................................................................................................................ 376
Spis treci
15
Komponent Cyclone............................................................................................................376
Cyclone.init() ................................................................................................................... 377
Cyclone.makeParticle() ..................................................................................................... 377
Cyclone.grow()................................................................................................................. 378
Cyclone.sidewind() ........................................................................................................... 379
Cyclone.startSidewind() i stopSidewind()............................................................................ 380
Parametry komponentu ..................................................................................................... 380
Dragger................................................................................................................................381
Akcje w klatkach .............................................................................................................. 381
Dragger.appear()............................................................................................................... 381
Dragger.onEnterFrame().................................................................................................... 381
Akcje przycisku ................................................................................................................ 382
Wnioski ...............................................................................................................................382
Dodatki............................................................................................... 383
Skorowidz ........................................................................................................ 385
Rozdzia 8.
Fizyka
Zrozumienie fizyki to zrozumienie dziaania otaczajcego nas wiata. W tym rozdziale
omwimy podstawy mechaniki prdko, przyspieszenie i si oraz zwizki midzy
nimi. Poznamy pewne szczeglne rodzaje si, jak tarcie, sprysto, grawitacja i sposoby
ich obliczania oraz doczania do dynamicznych animacji. Na kocu zajmiemy si fizyk
fali i wasn klas , ktra umoliwi generowanie oscylacji.
Kinematyka
Mechanika to dzia fizyki zajmujcy si dziaaniem si na obiekty fizyczne i wynikajcym
z tego ruchem. Istniej trzy gwne obszary, ktrymi zajmuje si mechanika: statyka,
kinetyka i kinematyka. Statyka zajmuje si siami w rwnowadze, a kinetyka przyspieszeniem powodowanym przez brak rwnowaenia si si. Tymczasem kinematyka to
czysty ruch, ktry nie przejmuje si siami i mas. W tym podrozdziale przyjrzymy si
kinematyce, a w dalszej czci rozdziau przejdziemy do kinetyki (si).
Pooenie
W tym rozdziale skupimy si na kinematyce dwuwymiarowej, czyli z dwoma parametrami:
x i y. Z tego powodu pooenie w naszych rozwaaniach bdzie dwuwymiarowym wektorem zawierajcym komponenty x i y. Skorzystamy z klasy
omwionej w rozdziale 4.
Obiekt zawierajcy dwuwymiarowe pooenie wykreujemy, tworzc kopi
za pomoc poniszego kodu.
228
Przemieszczenie
Przemieszczenie to zmiana pooenia. Innymi sowy, przemieszczenie to rnica midzy
dwoma pooeniami. Gdy pooenia to wektory, przemieszczenie take jest wektorem.
Wektor przemieszczenia midzy dwoma pooeniami znajdziemy, odejmujc jeden wektor
pooenia od drugiego. Rysunek 8.1 przedstawia wektory pooe i wektor przemieszczenia midzy nimi.
Rysunek 8.1.
Znajdowanie wektora
przemieszczenia d
midzy punktami A i B
Mamy dwa punkty: A w (2, 3) i B w (4, 2). Mamy te dwa odpowiadajce im wektory:
a = [2, 3] i b = [4, 2]. Wektor przemieszczenia d obliczamy jako rnic b i a (odejmujemy b od a). Rysunek 8.1 przedstawia sytuacj graficznie, ale poniej przedstawiam
sposb analityczny.
a = [2,3]
b = [4,2 ]
d = [4 2,2 3]
d = [2,1]
Klasa
powoduje, e przeniesienie tego procesu do ActionScript jest bardzo proste,
poniewa okrelilimy ju metod odejmowania. Poniszy kod przedstawia sposb znajdowania wektora przemieszczenia dla dwch okrelonych wektorw pooenia.
!"
!# $
% & '()*+
Najpierw tworzymy dwa wektory pooenia, i . Aby znale przemieszczenie
z do , odejmujemy pierwszy wektor od drugiego. Korzystajc z moliwoci
klasy
, wywoujemy metod dla punktu , by odj punkt i zwrci
rnic jako nowy wektor .
Rozdzia 8.
Fizyka
229
Odlego
Cho odlego i przemieszczenie s blisko zwizane, to jednak oznaczaj dwie rne
rzeczy. Odlego to warto jednowymiarowa, a przemieszczenie moe mie dwa lub
wicej wymiarw. Inaczej mwic, odlego to skalar, a przemieszczenie to wektor.
W powyszym kodzie przemieszczenie midzy i wynosi [2, 1]. Gdy policzymy odlego, okae si, e jest to pierwiastek kwadratowy z 5, czyli w przyblieniu
2,236. Moemy to sprawdzi za pomoc twierdzenia Pitagorasa, na przykad przy uyciu funkcji z rozdziau 3. Moemy te za pomoc poniszego kodu obliczy dugo wektora przemieszczenia. Uzyskamy t sam warto.
,
#,-,.% & '# /0/1211"2212
To nie przypadek. Odlego midzy dwoma punktami jest zawsze rwna dugoci wektora przemieszczenia midzy tymi punktami. Jeli wic mamy wektor przemieszczenia
midzy dwoma punktami i chcemy pozna odlego, wywoujemy dla wektora metod
.
&,%
"
&,&#,-,.
&,&% & '# /0/1211"2212
Prdko
Prdko to zmiana pooenia w czasie. Mona powiedzie, e jest to stosunek przemieszczenia i czasu. Prdko to warto wektorowa, w naszym przypadku bdzie dwuwymiarowa.
Gdy tworzymy animacj za pomoc skryptu, rzadko chcemy oblicza prdko poruszania
si obiektu, ledzc jego pooenia. Chcemy raczej zdefiniowa na pocztku prdko
i porusza obiekt zgodnie z ni. Jeli na przykad gramy w gr Asteroids, nie sterujemy
bezporednio pooeniem statku. Mamy tylko wpyw na prdko, ktra modyfikuje pooenie. A oto inny przykad: pomylmy o rnicy midzy mysz a joystickiem. Mysz bezporednio steruje pooeniem kursora, ale joystick steruje raczej jego prdkoci. W obiektach z rzeczywistego wiata znacznie atwiej sterowa prdkoci ni pooeniem, wic
wikszo urzdze zdalnego sterowania korzysta z joystickw.
230
Struktura jest mniej wicej taka sama jak w poprzednim przykadzie. Najpierw definiujemy wektory i (obiekty
). Nastpnie w procedurze obsugi zdarzenia
! dodajemy do i renderujemy aktualne pooenie na ekranie. Modyfikacja polega tylko na jednym dodatkowym wierszu kodu.
5&#
2)"
2)"
Rozdzia 8.
Fizyka
231
. #:;#;
. #:#
<
Jako wartoci nowej prdkoci stosujemy wsprzdne myszy zamiast liczb losowych.
Poniewa uyte waciwoci $" i $# s liczone wzgldem obiektu, wic porusza
si on w kierunku myszy.
Szybko
Szybko i prdko czy podobny zwizek jak odlego i przemieszczenie. Prdko
to wektor (zwykle wielowymiarowy), a szybko to skalar (zawsze jeden wymiar).
Co wicej, szybko to dugo wektora prdkoci; nazywana jest te czasem wartoci
bezwzgldn prdkoci. Pamitajmy o tym, e wektor posiada warto, jak i kierunek.
Gdy odrzucimy kierunek, pozostanie tylko warto szybko.
Poniej przedstawiam sposb znajdowania szybkoci z wektora prdkoci.
5 "
5#,-,.
% & '
Przyspieszenie
Przyspieszenie to stopie zmian prdkoci. Poniewa prdko to stopie zmian pooenia
w czasie, moemy powiedzie, e przyspieszenie to podwjny stopie zmian pooenia.
Prdkociomierz samochodu podaje szybko w danym momencie czasu. Gdy samochd
przyspiesza, wskanik prdkociomierza przechodzi na inn warto. Im szybciej porusza si strzaka, tym wiksze przyspieszenie. Przyspieszenie to warto wektorowa, wic
posiada modu i kierunek.
Przyjrzyjmy si trzem skryptom, ktre obrazuj wpyw przyspieszenia na dynamiczny
ruch. W sposb podobny do trzech wczeniejszych przykadw dotyczcych prdkoci,
sprawdzimy stae, losowe i sterowane mysz przyspieszenie.
232
Spowoduje to pocztkowy ruch obiektu w lewo, ale po chwili obiekt zatrzyma si i zacznie
porusza si ze staym przyspieszeniem w prawo.
Kod jest podobny do przykadu z losow prdkoci, ale teraz zmieniamy wartoci
" i # na losowe liczby z przedziau od 2 do 2. Skrypt tworzy chaotyczny
ruch, ale wyglda on inaczej ni chaotyczny ruch dla prdkoci.
Przykad ten jest w zasadzie przykadem ruchw Browna, w ktrym to obiekt dowiadcza
losowych zmian si (a co za tym idzie przyspieszenia) z rnych kierunkw. Ruchom
Browna przyjrzymy si dokadniej w rozdziale 11.
Rozdzia 8.
Fizyka
233
&00
. #678 9
&#. #:;*00. #:*00
5&#&&
#&5&
. #:;#;
. #:#
<
Sia
Sia to po prostu cignicie lub pchanie w okrelonym kierunku. Bez siy nic w fizycznym
wiecie nie moe si z mieni, wic cay wiat byby si do blu statyczny. Z pewnej
perspektywy moemy traktowa ycie jako proces cigej zmiany materii.
Pewnie kady sysza o tym, e materia w zasadzie skada si pustej przestrzeni. Atom to
jdro i orbitujce wok niego elektrony. Elektrony od jdra dzieli znaczna odlego,
porwnywalna z odlegociami wystpujcymi w naszym ukadzie planetarnym. Jak wic
obiekty bdce w 99,9999% puste, powoduj przesunicie innych obiektw? A jak lina
utrzymuje mj ciar, skoro jej atomy nawet si nie dotykaj? W rzeczywistoci midzy
elektronami atomw wystpuje sia elektromagnetyczna, dajc wraenie solidnoci,
do ktrej jestemy przyzwyczajeni. Poza grawitacj wszystkie siy doznawane w naszym
mikroskopijnym wiecie, czyli tarcie, sprysto, magnetyzm, elektrostatyczno, to
wynik siy elektromagnetycznej.
Pozostaymi dwiema podstawowymi siami w fizyce, poza grawitacj
i elektromagnetyzmem, s sabe i silne siy wiza atomowych. Poniewa zachodz
one na poziomie atomw, nie odczuwamy ich bezporednio. Siy te s jednak bardzo
wane; gdyby ich nie byo, uleglibymy natychmiastowej dematerializacji.
234
W tym podejciu tworzymy zerowy wektor siy wypadkowej i dodajemy do niego po kolei
trzy wektory si skadowych. czna warto komponentu x wynosi 1 (2 3 + 0),
a komponentu y 3 (0 + 2 +1).
Moemy skrci zapis, uywajc metody
, ktra w jednym kroku dodaje
dwa wektory i zwraca sum jako osobny obiekt.
>
&@
&#&$ &!
&@
#& &?
&@
()* +
Rozdzia 8.
Fizyka
235
a= f m
a = [8,0] 2
a = [4,0]
Uzyskalimy wektor przyspieszenia o wartoci [4, 0] jego kierunek jest jak przypuszczalimy taki sam jak dziaajcej siy.
Zamy teraz, e stosujemy t sam si [8, 0] dla ciszego obiektu, na przykad o masie
wynoszcej 4. Przyspieszenie bdzie wynosio:
f = [8,0 ]
m=4
a= f m
236
m =1
Rozdzia 8.
Fizyka
237
a= f 1
a= f
Gdy masa wynosi 1, przyspieszenie jest rwne sile wypadkowej. Z tego powodu
w ActionScript moemy napisa nastpujce wiersze.
$ &
"
!
Tarcie
Tarcie to reakcja na ruch sia dziaajca w odwrotnym kierunku ni ruch obiektu. Gdy
prbujemy przesun sof po pododze, dywan rywalizuje z nami za pomoc siy tarcia.
Gdy nasza sia przewyszy tarcie, uzyskamy si wypadkow zdoln przesun sof.
238
Tarcie kinetyczne
Tarcie kinetyczne nazywane jest take tarciem lizgowym. Gdy krek hokejowy pdzi
po lodzie, sia tarcia cay czas go zwalnia. Stopie tej siy jest zwykle stay. Oznacza to,
e spowalnianie krka take jest stae. Wykres spowolnienia przypomina spowolnienie
kwadratowe.
Warto tarcia zaley od tego, jaka jest sia prostopada (nazywana te si normaln)
do powierzchni, po ktrej si przesuwamy. Na tym samym lodzie ciszy obiekt bdzie
mia wiksze tarcie ni obiekt lekki, poniewa dziaa na niego wiksza sia grawitacji.
Oto wzr na tarcie kinetyczne w jego typowej postaci.
fk = k N
W tym rwnaniu fk to sia tarcia kinetycznego, k to wspczynnik tarcia, a N to modu
z siy normalnej czcej obydwa ciaa. Warto k ( wymawiamy jak mi) znajduje si
typowo w przedziale od 0 do 1. Im wysza warto wspczynnika, tym wiksze tarcie dla
danej siy dociskajcej.
Jeli chcemy uywa tarcia kinetycznego w animacji Flasha, ktra nie jest symulacj
fizyczn, lepiej od razu przypisa warto tarcia do fk i nie przejmowa si wspczynnikiem ani si dociskajc (normaln). Mona nawet od razu wyliczy przyspieszenie
tarcia, a nie si tarcia. Poprawny, ale duszy sposb polega na znalezieniu wartoci siy
tarcia, a nastpnie na wyliczeniu przyspieszenia ze wzoru f = ma. Oto przykadowe
obliczenia dla tej metody.
f k = 10
a= f m
m=5
a = 10 5
a=2
Moemy zaoy, e przyspieszenie tarcia bdzie stae (nie bdzie zalee od masy
obiektu), wic przypiszemy warto przyspieszenia na stae.
a=2
Gdy mamy przyspieszenie powodowane przez tarcie kinetyczne, proces jego implementacji
nie naley do najprostszych (przynajmniej w porwnaniu z uproszczonym tarciem pynw,
ktrym zajmiemy si za chwil). Poniszy kod ActionScript wykonuje obliczenia dla tarcia kinetycznego.
Rozdzia 8.
Fizyka
239
Gdy uruchomimy ten przykad, obiekt stoi w miejscu, dopki nie naciniemy przycisku
myszy generujcego przyspieszenie. Obiekt natychmiast zaczyna si porusza, ale pniej
stopniowo zwalnia z powodu tarcia kinetycznego.
Logika kodu jest nastpujca. Jeli prdko w poziomie jest wiksza od zera (czyli obiekt
porusza si w prawo), tarcie kinetyczne dziaa w druga stron w lewo. Z tego powodu
zmniejszamy aktualn prdko o warto tarcia (
).
Tarcie nie moe zmieni kierunku prdkoci. Innymi sowy, gdy prdko bya dodatnia,
odejmowanie przyspieszenia tarcia nie moe spowodowa, e stanie si ujemna. Tarcie
spowalnia prdko obiektu do zera, ale nie powoduje ruchu w przeciwnym kierunku.
Korzystam z funkcji i , aby upewni si, e odejmowanie nie
przekroczy zera.
Tarcie statyczne
Gdy obiekt stoi na powierzchni, moliwe jest tarcie statyczne. Tarcie statyczne jest najczciej silniejsze od tarcia kinetycznego, co wyjania, dlaczego trudniej wprawi co
w ruch, ni tylko kontynuowa ruch.
Obiekt nie rozpocznie ruchu, dopki nie popchniemy go odpowiednio mocno. Gdy przekroczymy prg siy, obiekt nagle zaczyna si porusza. Sanki na stoku potrafi sta
niewzruszone. Dziaa na nie sia grawitacji, ale sia tarcia midzy sankami a niegiem
jest taka sama. Poniewa siy maj identyczn warto, ale przeciwne kierunki, wzajemnie
si znosz, wic sanki stoj w miejscu. Gdy jednak lekko popchniemy sanki, dodatkowa
sia przezwycia si tarcia statycznego i sanki zaczynaj si porusza.
Tarcie statyczne zachodzi tylko wtedy, gdy dwa obiekty, ktrych ono dotyczy, nie poruszaj
si wzgldem siebie. Gdy istnieje ruch, mamy ju do czynienia z tarciem kinetycznym,
ktre zwykle ma mniejsz warto ni tarcie statyczne.
Oto wzr na tarcie statyczne.
fs = sN
240
Rozdzia 8.
Fizyka
241
0
#=$
@$:
4A
>
Grawitacja w kosmosie
Midzy dwoma ciaami zawsze wystpuje sia grawitacji nawet midzy dwoma ziarnami
piasku. Dopiero gdy zlepimy ze sob ogromn ilo materii, sia grawitacji jest na tyle
dua, e moemy j zauway; przykadem mog by gwiazdy i planety.
Poniej przedstawiam klasyczny wzr Newtona na si grawitacji midzy dwoma ciaami.
Fg =
Gm1m2
r2
242
Rozdzia 8.
Fizyka
243
0
#
A555
0
#EA5
0
#
55
0
#5
To wanie w tej metodzie liczymy si wypadkow. Pierwszy wiersz kodu znajduje wektor
przemieszczenia midzy wektorem punktu a wektorem pooenia obiektu za pomoc
odjcia jednego od drugiego.
0
#90
#
#&$
%0
#
0
Pierwszy wiersz znajduje odlego midzy punktem a obiektem za pomoc obliczenia dugoci wektora przemieszczenia (umieszczonego chwilowo w
).
(Pamitajmy nasz opis odlegoci i przemieszczenia we wczeniejszej czci rozdziau).
Na kocu nadajemy wektorowi siy odpowiedni dugo, obliczajc odwrotno odlegoci do kwadratu.
Znamy ju si wypadkow, wic musimy j jeszcze zamieni na prdko i pooenie.
Zajmuje si tym metoda ! przy uyciu poniszego kodu.
0
#&E$:
3
& +
0
#E# $
0
#9
0
#E#
20
#
0
#
# $
0
#E
, +
0
#-.0
#
#.
0
#-0
#
#
>
244
Dla kadej klatki procedura obsugi " najpierw wywouje metod
,
aby policzy now si wypadkow, a nastpnie metod ! , by wykona animacj
obiektu.
Na kocu dodajemy jeszcze interakcj na kliknicia myszy, definiujc procedur obsugi
#$.
0
#=$
@$:
0
#
0#
0
#-
#-.&$
0
#-
#-&$
>
Rozdzia 8.
Fizyka
245
Poniewa sia grawitacja na powierzchni jest staa, stae te jest powodowane przez ni
przyspieszenie. Z tego wzgldu bardzo atwo zaimplementowa w ActionScript ruch
powodowany tak grawitacj. Przyspieszenie dla grawitacji definiujemy raz na pocztku
filmu i bez adnych zmian stosujemy w obliczeniach.
Poniszy przykad obrazuje sposb implementacji grawitacji wystpujcej na powierzchni
planety.
(,
0
#
0
#-.0
#-
0
#E55
0
#5
'',
0
#,
E5#A
0
#&E$:
3
, +
0
#E# $
0
#,
E
0
#E#
20
#
0
#
# $
0
#E
, +
0
#-.0
#
#.
0
#-0
#
#
>
0
#89
&$:
0
#9
0
#&E
>
0
#=$
@$:
0
#
#
0
#-
#-.&$
0
#-
#-&$
0
#E#
55
>
W trakcie dziaania skryptu kade kliknicie myszy umieszcza klip filmowy w nowym
pooeniu i powoduje jego swobodne spadanie. W procedurze obsugi
#$
wektor pooenia
ustawiany jest na wsprzdne myszy, a wektor prdkoci
! na zero.
Przyspieszenie obiektu sterowane jest waciwoci przyspieszenia grawitacyjnego
!%
, zdefiniowanego na pocztku skryptu jako wektor [0, 0,5] wskazujcy
w d. Uywamy takiego samego procesu co w poprzednich przykadach w celu przeksztacenia przyspieszenia w dynamiczny ruch.
Elastyczno (sprysto)
Prawa dotyczce elastycznoci moemy napotka w wielu miejscach: rozcigajc spryn,
skaczc na trampolinie a nawet ubierajc sweter. Gdy rozcigamy elastyczny obiekt, stara
si on przeciwdziaa naszemu ruchowi. Pojawia si sia elastycznoci nazywana te
si sprystoci.
246
Stan spoczynkowy
Elastyczny obiekt znajduje si w stanie spoczynku, gdy nic go nie popycha i nie cignie.
Moemy bez problemu wyrwa obiekt z tego bogiego stanu spoczynku. Im bardziej
rozcigasz ciao, tym wiksz si sprystoci ono generuje.
Istnieje bezporedni zwizek midzy przemieszczeniem w czasie rozcigania a wartoci siy sprystoci. Jeli na przykad elastyczn lin rozcigniemy o jeden centymetr
i otrzymamy dan warto siy, po rozcigniciu liny na dwa centymetry sia ta zwikszy
si dwukrotnie. Musimy pamita o tym, e ciao spryste zawsze dy do osignicia
stanu rwnowagi.
Prawo Hookea
Pamitajmy, e to dziki matematyce jestemy w stanie opisa zwizki za pomoc wzorw.
Jak ju si przekonalimy, zwizek midzy rozciganiem a si sprystoci jest prosty.
Z tego powodu jego wzr take jest prosty.
f = kd
Rwnanie to nazywane jest prawem Hookea. Informuje ono, e sia sprystoci jest
wprost proporcjonalna do wychylenia z punktu rwnowagi.
Robert Hooke odkry to rwnanie w XVII wieku. By koleg Isaaca Newtona.
Staa sprystoci
Warto k w prawie Hookea to staa sprystoci. Jest to zawsze warto dodatnia, ktra
okrela stopie naprenia materiau elastycznego; zawsze zawiera si w przedziale od
0 do 1. Im wiksze k, tym sztywniejsza jest substancja elastyczna.
Na przykad gruba lina elastyczna ma wiksze k ni cienka. Z tego powodu grubsza lina
przy rozciganiu generuje wiksz si sprystoci. Moemy te powiedzie inaczej: to my
musimy woy wicej siy w rozcignicie grubszej liny ni cienkiej.
Rozdzia 8.
Fizyka
247
Implementacja w ActionScript
)+
'*!/ $!$!',!$
&&
0
#
0
#-.0
#-
0
#E55
0
#
55
0
##
''
)+
'
0
#
0A555
0
#
$
#A
0
#9$:
3
)+
'
0
#90
#
#&$
%0
#
0
0
#9#
20
#
$
>
0
#&E$:
3, +
0
#E# $
0
#9
0
#E#
20
#
0
#
# $
0
#E
, +
0
#-.0
#
#.
0
#-0
#
#
>
0
#89
&$:
0
#9
0
#&E
>
0
#=$
@$:
0
#
0#
0
#-
#-.&$
0
#-
#-&$
>
Najpierw pojawiaj si standardowe definicje wektorw pooenia, prdkoci i przyspieszenia oraz tarcie w cieczach ustawione na 10%. Nastpnie deklarujemy dwie waciwoci
dotyczce sprystoci: wektor rwnowagi
i sta sprystoci
.
Punkt rwnowagi jest pocztkowo ustawiony na (150, 100), ale moemy go zmieni klikniciem na aktualne wsprzdne kursora myszy. Klip filmowy jest przecigany wok
punktu rwnowagi: przyspiesza z jednej strony, zwalnia z drugiej, powraca z przyspieszeniem obiekt oscyluje wok punktu rwnowagi, zmniejszajc powoli ogln prdko.
248
>
Ruch falowy
Wiele rzeczy oscyluje. Moemy powiedzie, e ich ruch jest cykliczny lub okresowy.
Wykres ich pooenia w czasie tworzy fal sinusoidaln pokazan na rysunku 8.2.
Rysunek 8.2.
Typowa
fala sinusoidalna
Fale sinusoidalne, jak przedstawiona, mog bazowa na funkcji sinus lub kosinus. My
korzystamy z funkcji sinus.
P = sin (t )
Rozdzia 8.
Fizyka
249
W tym rwnaniu t to kt w radianach. Koo to 2 radianw, wic jeden okres fali sinusoidalnej take trwa 2 radianw. Po przyjrzeniu si wykresowi moemy stwierdzi, e fala
przecina o X zaraz za wartoci 3. Jest to poowa okresu, ktra odpowiada 3,1415 radianw lub 180. Krzywa wraca do punktu pocztkowego, by rozpocz kolejny okres
w punkcie 6,2832 radianw (2) lub 360.
Amplituda
Amplituda to warto oscylacji fali. Amplitud moemy take zdefiniowa jako maksymalne odchylenie fali od punktu rwnowagi w kadym z kierunkw. Tradycyjna fala sinusoidalna posiada amplitud o wartoci 1. Rysunek 8.3 przedstawia dwie fale sinusoidalne
z rnymi amplitudami. Amplituda fali odniesienia z rysunku jest dwa razy wiksza ni
drugiej fali o wzorze P = 0,5 sin(t).
Rysunek 8.3.
Zmiana amplitudy
fali sinusoidalnej
Czstotliwo
Czstotliwo to stopie oscylacji fali. Mnoc parametr t w rwnaniu sin(t), modyfikujemy
czstotliwo fali. Rysunek 8.4 porwnuje fal sin(t) z fal sin(2t).
Jak moemy si przekona, patrzc na rysunek, pomnoenie t przez 2 podwaja czstotliwo. Podobnie pomnoenie t przez 0,5 zmniejszy j o poow. Ponisze rwnanie
okrela ogln zaleno.
P = sin (2 czst t )
250
Rysunek 8.4.
Zmiana czstotliwoci
fali sinusoidalnej
Okres
Okres to dugo czasu, jak fala powica na jeden obieg. Okres jest bezporednio
powizany z czstotliwoci. Obydwie wartoci s wzajemnymi odwrotnociami, wic
moemy je wyrazi poniszymi rwnaniami.
okres = 1 / czstotliwo
czstotliwo = 1 / okres
Jeli podzielimy jeden przez czstotliwo, otrzymamy okres, a jeli podzielimy jeden
przez okres, uzyskamy czstotliwo. Jeli mamy do czynienia z obiektem oscylujcym
cztery razy na sekund, jego czstotliwo wynosi 4 Hz, a okres 0,25 sekundy.
Jeli zastpimy czstotliwo okresem we wczeniej podanym rwnaniu na fal sinusoidaln, uzyskamy poniszy wzr.
P = sin (2 t okres)
Okres fali jest niezaleny od jej amplitudy moemy zmieni okres bez zmiany amplitudy i na odwrt. Cho okres i czstotliwo s ze sob powizane, nie mona myli obu
wartoci, poniewa stanowi dwie rne wielkoci opisujce t sam fal.
Rozdzia 8.
Fizyka
251
Przesunicie czasu
Z mienna przesunicia czasu powoduje przesunicie fali w lewo lub w prawo na osi
poziomej (patrz rysunek 8.5). Jak moemy zauway, odjcie od t jedynki w sin(t 1)
przesuwa fal o jeden w prawo. Dodanie do t jeden, przesuwa fal w lewo o jeden.
Rysunek 8.5.
Przesunicie czasowe
fali sinusoidalnej
Przesunicie czasu jest blisko zwizane z przesuniciem fazy, ktre take przemieszcza
fal na osi czasu. Jednak przesunicie fazy okrelane jest nieco inaczej jako kt.
Moemy na przykad powiedzie, e dwie fale s przesunite wzgldem siebie o 90
(co jest prawd, gdy porwnamy funkcje sin(t) i cos(t)).
Offset
Zmienna offsetu to przesunicie fali w gr lub w d na osi pionowej (patrz rysunek 8.6).
Offset definiuje rodek fali. Domylnie offset wynosi zero, wic fala oscyluje wok osi
czasu, czyli pooenia 0. Na rysunku 8.6 funkcja P = sin(t) + 0,5 posiada offset wynoszcy
0,5, wic rodek oscylacji jest przesunity do gry o p jednostki.
Rysunek 8.6.
Zmiana offsetu
fali sinusoidalnej
252
Rwnanie fali
Wszystkie waciwoci moemy umieci w jednym rwnaniu.
Pw = amp sin [(t przesunicie) 2 okres] + offset
A oto implementacja rwnania w ActionScript jako funkcja $!.
=
0#
E$
& &G0
:
$
& D=
0#
2&G0DD=
0#BH ;
>
Funkcja $! zapewnia wygodny interfejs do obliczania oscylacji ruchu. Wystarczy
przekaza do funkcji intuicyjne waciwoci fali i dosta z powrotem aktualn warto
fali bez martwienia si zbytnio o obliczenia.
Klasa WaveMotion
Utworzyem klas &!, aby zhermetyzowa oscylacje i umoliwi prost modyfikacj waciwoci fali. &! rozszerza klas (omwion w poprzednim
rozdziale). Jako klasa pochodna &! dziedziczy metody i waciwoci klasy
, jak i dodaje wasne. Dziedzicznie oznacza, e do filmu musimy doczy klas
, aby wszystko dziaao prawidowo. ActionScript jest bardzo pobaliwy w sprawie
bdw. W szczeglnoci nie sprawdza, czy kod klasy bazowej zosta doczony, gdy
kompiluje klasy pochodne. Napisaem wic wasny kod, ktry sprawdza istnienie klasy
bazowej .
-,3
#=IJ$J
K<<(L3
!!
3
=K
Powyszy kod sprawdza istnienie konstruktora klasy bazowej i jeli go nie znajdzie,
wysya odpowiedni komunikat do okna Output. W nastpnych krokach deklaruje konstruktor &!, definiuje dziedziczenie i dodaje nowe metody do prototypu klasy.
Konstruktor WaveMotion
Pamitamy, e konstruktor przyjmowa pi parametrw: '(, , ',
i
)
. Do konstruktora fali dodaem dwa nowe parametry: i . Amplituda
i okres to dwie najwaniejsze waciwoci fali, poniewa definiuj jej ksztat.
Poniszy kod definiuje konstruktor klasy &!.
-,3
#"
E=$3 3,
& $
$
G
:
0
#
$ M3 3,$
$
G
0
#
N
3,
0
#
&
&
0
#
B
>
Rozdzia 8.
Fizyka
253
WaveMotion.getPosition()
Metoda
to podstawa kadej klasy dziedziczcej po . To wanie w niej
definiujemy zwizek midzy czasem i pooeniem. W klasie metoda ta jest pusta,
poniewa klasy pochodne maj j przysoni, definiujc wasn wersj.
W klasie &! uywamy rwnania fali.
"=B#,B
$:
$0
#O&
$0
#O
& D=
0#
20
#O&G0DD=
0#BH0
#O ;
0
#O
>
254
Metoda
sprawdza dan w podobny sposb, w jaki robi to
%.
Metody &!
, i , modyfikuj i zwracaj czstotliwo fali.
"=B#
9P$:
0
#
B
>
"=B#,9P$:
$0
#,B
>
Rozdzia 8.
Fizyka
255
Uywanie WaveMotion
Oto przykad tworzenia kopii &!.
4"
E=0
K-.K55755$
Jeli umiecimy ten kod w pierwszej klatce klipu filmowego, klip zacznie oscylowa
w poziomie wok wartoci 200 pikseli z 2 sekundami na okres. Domylnie bdzie tak
oscylowa w nieskoczono. Tabela 8.1 wymienia argumenty konstruktora &!.
Tabela 8.1. Parametry konstruktora WaveMotion
Parametr
Typ
Warto
3
referencja 0
Opis
Modyfikowany obiekt.
tekst
K-.K
3,
liczba
55
rodek fali.
&
liczba
75
Rozmiar oscylacji.
liczba
$
liczba
Boolean
$
$
G
Po utworzeniu kopii &! wybrany klip oscyluje automatycznie. Moemy zmienia
wartoci parametrw fali w trakcie tego ruchu. Moemy na przykad doda poniszy kod,
aby w kadej klatce zwiksza amplitud fali o jeden.
0
#89
&$:
4#
& ;;
>
256
Oto inny fragment kodu, ktry steruje dwiema waciwociami fali na podstawie pooenia
myszy.
0
#89
&$:
4#
& 0
#-
#-&$
4#
N
0
#-
#-.&$
>
Podobnie jak wczeniej pooenie myszy w pionie steruje amplitud. Jednak tym razem
pooenie myszy w poziomie odpowiada za offset. Powoduje to, e rodek oscylacji zawsze
znajduje si w miejscu, w ktrym jest kursor myszy.
Wnioski
Fizyka to fascynujca dziedzina nauki. W tym rozdziale poznalimy jej podstawy: prdko, przyspieszenie, si i zwizki midzy nimi. Przyjrzelimy si bliej pewnym rodzajom
si, takim jak tarcie, sprysto i grawitacja. Obliczalimy i stosowalimy j w naszych
dynamicznie generowanych animacjach. Na kocu przyjrzelimy si fizyce fal i zaprojektowalimy wasn klas &!, ktra pozwala tworzy prawie dowolne oscylacje
sinusoidalne. Po dwch intensywnych rozdziaach dotyczcych ruchu, przejdziemy teraz
do zabawy z kolorami.