You are on page 1of 42

IDZ DO

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

Robert Penner to niezaleny twrca filmw w programie Macromedia Flash, konsultant,


pisarz i wykadowca. Na caym wiecie znany jest z innowacyjnych pomysw i animacji
odtwarzajcych pikno natury. Jego biografi artystyczn i efekty eksperymentw mona
znale na witrynie http://robertpenner.com

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

Cz I Pocztek procesu .......................................................................23


Rozdzia 1. Jak poznaem Flasha?...................................................................... 25
Zaplecze osobiste ..................................................................................................................25
Lata studenckie................................................................................................................... 27
Studium techniczne ............................................................................................................. 28
Odkrycie Flasha.................................................................................................................. 28

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

Proces iteracyjny ...................................................................................................................38


Nauka jest okrga .............................................................................................................. 38
Ustalanie priorytetw .......................................................................................................... 39
Tworzenie z myl o przyszoci .......................................................................................... 40

Ukad ksiki.........................................................................................................................41

Rozdzia 2. Programowanie zorientowane obiektowo......................................... 43


Istota programowania............................................................................................................43
Pami i zmienne................................................................................................................ 44
Umiejtnoci i funkcje......................................................................................................... 44
Obiekty: pami i umiejtnoci ............................................................................................ 45
Waciwoci i metody ......................................................................................................... 45

Flash MX. Programowanie


Klasy......................................................................................................................................47
Wbudowane klasy i obiekty Flasha....................................................................................... 47
Konstruktory klas ............................................................................................................... 49
Klonowanie klas wizualnych................................................................................................ 51
Waciwo prototype ......................................................................................................... 51
Dodawanie metod do klas.................................................................................................... 53
Zastpowanie wbudowanych metod ..................................................................................... 54
Rozszerzanie moliwoci obiektw statycznych .................................................................... 54

Klasyczne pojcia z dziedziny OOP .....................................................................................55


Abstrakcja.......................................................................................................................... 55
Separacja ........................................................................................................................... 56
Polimorfizm ....................................................................................................................... 59

Tworzenie wasnej klasy .......................................................................................................59


Analiza...................................................................................................................................60
Lista zada......................................................................................................................... 60
Scenariusze poszczeglnych zada ....................................................................................... 61

Projektowanie........................................................................................................................62
Dobr waciwoci.............................................................................................................. 63
Dobr metod ...................................................................................................................... 63
Relacje midzy obiektami.................................................................................................... 64
Diagramy klas .................................................................................................................... 65

Tworzenie klas w jzyku ActionScript .................................................................................66


Konstruktor klasy PhotoAlbum ............................................................................................ 66
Metoda showPhotoAt() ....................................................................................................... 68
Metoda next()..................................................................................................................... 69
Metoda prev() .................................................................................................................... 70
Klasa PhotoAlbum w akcji................................................................................................... 71

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

Cz II Podstawowe pojcia .................................................................81


Rozdzia 3. Matematyka cz I: trygonometria i ukady wsprzdnych........... 83
Trygonometria.......................................................................................................................84
Trjkt prostoktny............................................................................................................. 84
Twierdzenie Pitagorasa........................................................................................................ 84
Odlego midzy dwoma punktami ..................................................................................... 85
Kty w trjktach prostoktnych .......................................................................................... 86
Sinus ................................................................................................................................. 88
Kosinus.............................................................................................................................. 91
Tangens ............................................................................................................................. 93
Arcus tangens ..................................................................................................................... 94

Spis treci

Arcus kosinus ..................................................................................................................... 96


Arcus sinus......................................................................................................................... 97

Ukady wsprzdnych..........................................................................................................98
Kartezjaski ukad wsprzdnych........................................................................................ 98
Ukad wsprzdnych Flasha................................................................................................ 99
Wsprzdne biegunowe.................................................................................................... 102

Wnioski ...............................................................................................................................107

Rozdzia 4. Matematyka cz II: wektory w dwch wymiarach ...................... 109


Wektory...............................................................................................................................109
Klasa Vector........................................................................................................................110
Konstruktor klasy Vector................................................................................................... 111
Metoda Vector.toString()................................................................................................... 111
Metoda Vector.reset() ....................................................................................................... 112
Metoda Vector.getClone() ................................................................................................. 112
Metoda Vector.equals() ..................................................................................................... 113

Dodawanie wektorw..........................................................................................................114
Metoda Vector.plus() ........................................................................................................ 115
Metoda Vector.plusNew().................................................................................................. 115

Odejmowanie wektorw .....................................................................................................116


Metoda Vector.minus()...................................................................................................... 116
Metoda Vector.minusNew()............................................................................................... 116

Odwracanie wektora............................................................................................................117
Metoda Vector.negate() ..................................................................................................... 117
Metoda Vector.negateNew() .............................................................................................. 118

Skalowanie wektorw .........................................................................................................118


Metoda Vector.scale() ....................................................................................................... 118
Metoda Vector.scaleNew() ................................................................................................ 119

Dugo wektora..................................................................................................................119
Metoda Vector.getLength()................................................................................................ 120
Metoda Vector.setLength() ................................................................................................ 120

Orientacja wektora ..............................................................................................................121


Metoda Vector.getAngle() ................................................................................................. 121
Metoda Vector.setAngle().................................................................................................. 122

Obracanie wektora...............................................................................................................122
Metoda Vector.rotate() ...................................................................................................... 123
Metoda Vector.rotateNew() ............................................................................................... 123

Iloczyn skalarny ..................................................................................................................124


Interpretacja iloczynu skalarnego ....................................................................................... 124
Metoda Vector.dot().......................................................................................................... 124

Wektory prostopade ...........................................................................................................125


Poszukiwanie normalnej wektora ....................................................................................... 125
Metoda Vector.getNormal() ............................................................................................... 125
Sprawdzanie prostopadoci wektorw................................................................................ 126
Metoda Vector.isNormalTo()............................................................................................. 126

Obliczanie kta midzy dwoma wektorami ........................................................................127


Wyprowadzenie wzoru na kt midzy wektorami ................................................................ 127
Metoda Vector.angleBetween() .......................................................................................... 128

Traktowanie punktw jako wektory....................................................................................128


Wnioski ...............................................................................................................................130

Flash MX. Programowanie

Rozdzia 5. Matematyka cz III: wektory w trzech wymiarach ..................... 131


Osie X, Y i Z .......................................................................................................................131
Klasa Vector3d....................................................................................................................132
Konstruktor klasy Vector3d ............................................................................................... 132
Metoda Vector3d.toString() ............................................................................................... 132
Metoda Vector3d.reset().................................................................................................... 133
Metoda Vector3d.getClone().............................................................................................. 133
Metoda Vector3d.equals().................................................................................................. 134

Podstawowe operacje z udziaem trjwymiarowych wektorw .........................................134


Metoda Vector3d.plus()..................................................................................................... 134
Metoda Vector3d.plusNew() .............................................................................................. 135
Metoda Vector3d.minus() .................................................................................................. 135
Metoda Vector3d.minusNew() ........................................................................................... 136
Metoda Vector3d.negate() ................................................................................................. 136
Metoda Vector3d.negateNew()........................................................................................... 137
Metoda Vector3d.scale().................................................................................................... 137
Metoda Vector3d.scaleNew()............................................................................................. 137
Metoda Vector3d.getLength() ............................................................................................ 138
Metoda Vector3d.setLength()............................................................................................. 138

Iloczyny wektorw..............................................................................................................139
Iloczyn skalarny................................................................................................................ 139
Metoda Vector3d.dot() ...................................................................................................... 140
Iloczyn wektorowy ........................................................................................................... 140
Metoda Vector3d.cross() ................................................................................................... 142

Kt midzy dwoma wektorami............................................................................................142


Rwnanie pozwalajce na wyznaczenie kta ....................................................................... 143
Metoda Vector3d.angleBetween() ...................................................................................... 143

Rzutowanie wektora na paszczyzn ekranu.......................................................................144


Metoda Vector3d.getPerspective()...................................................................................... 144
Metoda Vector3d.persProject() .......................................................................................... 145
Metoda Vector3d.persProjectNew() ................................................................................... 146

Obroty w trzech wymiarach ................................................................................................146


Obrt wok osi X ............................................................................................................ 146
Metoda Vector3d.rotateX()................................................................................................ 146
Metoda Vector3d.rotateXTrig().......................................................................................... 147
Obrt wok osi Y ............................................................................................................ 148
Metoda Vector3d.rotateY()................................................................................................ 148
Metoda Vector3d.rotateYTrig().......................................................................................... 149
Obrt wok osi Z............................................................................................................. 149
Metoda Vector3d.rotateZ() ................................................................................................ 150
Metoda Vector3d.rotateZTrig() .......................................................................................... 150
Metoda Vector3d.rotateXY() ............................................................................................. 151
Metoda Vector3d.rotateXYTrig() ....................................................................................... 151
Metoda Vector3d.rotateXYZ() ........................................................................................... 152
Metoda Vector3d.rotateXYZTrig() ..................................................................................... 152

Rysowanie czsteczek w trzech wymiarach........................................................................153


Klasa Particle3d................................................................................................................ 153
Metoda Particle3d.attachGraphic() ..................................................................................... 155
Metoda Particle3d.render() ................................................................................................ 155

Spis treci

Przykad: ciana czsteczek.................................................................................................156


Przygotowania.................................................................................................................. 157
Funkcja getWallPoints() .................................................................................................... 157
Inicjalizacja ciany............................................................................................................ 158
Funkcja arrayRotateXY() .................................................................................................. 159
Animowanie z udziaem zdarzenia onEnterFrame ................................................................ 159

Wnioski ...............................................................................................................................160

Rozdzia 6. Programowanie zdarze ................................................................ 161


Model zdarze we Flashu 5.................................................................................................161
Model obsugi zdarze we Flashu MX................................................................................162
Detektory zdarze przyciskw i klipw filmowych we Flashu MX........................................ 163
Przykad: Polizg MX ....................................................................................................... 164

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

Wbudowane rda zdarze ................................................................................................172


Zajrzyjmy gbiej.............................................................................................................. 172
Moliwoci rde zdarze ................................................................................................ 173
Obiekt ASBroadcaster....................................................................................................... 174
Inicjalizacja rda zdarze................................................................................................ 174
Rozsyanie zdarze ........................................................................................................... 175

rdo zdarze NewsFeed...................................................................................................176


Konstruktor obiektu NewsFeed .......................................................................................... 177
Metoda NewsFeed.toString() ............................................................................................. 177
Inicjalizacja rda zdarze za pomoc metody ASBroadcaster............................................. 177
Modyfikacja konstruktora.................................................................................................. 178
Metoda NewsFeed.sendNews().......................................................................................... 178

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

Cz III Dynamiczna grafika .............................................................. 183


Rozdzia 7. Ruch, klatki porednie, przyspieszanie i zwalnianie ....................... 185
Zasady ruchu .......................................................................................................................185
Dodatkowe informacje o pooeniu..................................................................................... 186
Pooenie jako funkcja czasu ............................................................................................. 187
Ruch jako wykres ............................................................................................................. 187

Statyczne klatki porednie we Flashu .................................................................................188

10

Flash MX. Programowanie


Dynamiczne klatki porednie w ActionScript.....................................................................189
Przejcie wykadnicze ....................................................................................................... 189
Podstawowe komponenty przejcia .................................................................................... 191
Funkcje przej ................................................................................................................ 191

Przejcie liniowe .................................................................................................................192


Wykres ............................................................................................................................ 192
Funkcja w ActionScript ..................................................................................................... 194
Implementacja przejcia za pomoc funkcji......................................................................... 194
Estetyka ruchu liniowego................................................................................................... 196

Wygadzanie ruchu..............................................................................................................197
Estetyka ruchu przyspieszonego ......................................................................................... 198
Przyspieszenie .................................................................................................................. 198
Spowolnienie.................................................................................................................... 199
Przyspieszenie i spowolnienie w jednym............................................................................. 199

Odmiany przej z przyspieszeniem ...................................................................................200


Przyspieszenie kwadratowe ............................................................................................... 200
Przyspieszenie stopnia trzeciego......................................................................................... 201
Przyspieszenie stopnia czwartego ....................................................................................... 202
Przyspieszenie stopnia pitego ........................................................................................... 203
Przyspieszenie sinusoidalne ............................................................................................... 204
Przyspieszenie wykadnicze ............................................................................................... 205
Przyspieszenie koowe....................................................................................................... 206
Wprowadzenie do klasy Tween.......................................................................................... 207

Klasa Motion .......................................................................................................................207


Konstruktor Motion .......................................................................................................... 207
Metody publiczne ............................................................................................................. 209
Metody ustawiania i pobierania .......................................................................................... 213
Metody prywatne.............................................................................................................. 217
Waciwoci pobierania i ustawiania................................................................................... 218
Zakaczanie ..................................................................................................................... 219

Klasa Tween........................................................................................................................219
Konstruktor Tween ........................................................................................................... 220
Metody publiczne ............................................................................................................. 221
Metody pobierania i ustawiania .......................................................................................... 223
Waciwoci pobierania i ustawiania................................................................................... 224
Zakaczanie ..................................................................................................................... 225

Wnioski ...............................................................................................................................225

Rozdzia 8. Fizyka ............................................................................................ 227


Kinematyka .........................................................................................................................227
Pooenie ......................................................................................................................... 227
Przemieszczenie ............................................................................................................... 228
Odlego......................................................................................................................... 229
Prdko.......................................................................................................................... 229
Szybko ......................................................................................................................... 231
Przyspieszenie .................................................................................................................. 231

Sia ......................................................................................................................................233
Pierwsze prawo dynamiki Newtona .................................................................................... 233
Sia niezrwnowaona (sia wypadkowa) ............................................................................ 234

Spis treci

11

Drugie prawo dynamiki Newtona ....................................................................................... 235


Ruch we Flashu sterowany si........................................................................................... 236

Tarcie ..................................................................................................................................237
Tarcie kinetyczne.............................................................................................................. 238
Tarcie statyczne................................................................................................................ 239
Tarcie dla cieczy i gazw................................................................................................... 240

Grawitacja w kosmosie .......................................................................................................241


Grawitacja w pobliu powierzchni......................................................................................244
Elastyczno (sprysto)..................................................................................................245
Stan spoczynkowy ............................................................................................................ 246
Prawo Hookea................................................................................................................. 246
Staa sprystoci.............................................................................................................. 246
Kierunek siy sprystoci ................................................................................................. 247
Implementacja w ActionScript ........................................................................................... 247

Ruch falowy ........................................................................................................................248


Amplituda ........................................................................................................................ 249
Czstotliwo ................................................................................................................... 249
Okres............................................................................................................................... 250
Przesunicie czasu ............................................................................................................ 251
Offset .............................................................................................................................. 251
Rwnanie fali ................................................................................................................... 252

Klasa WaveMotion..............................................................................................................252
Konstruktor WaveMotion .................................................................................................. 252
WaveMotion.getPosition() ................................................................................................. 253
Metody ustawiania i pobierania .......................................................................................... 253
Waciwoci ustawiania i pobierania................................................................................... 255
Uywanie WaveMotion ..................................................................................................... 255

Wnioski ...............................................................................................................................256

Rozdzia 9. Kolorowanie w ActionScript .......................................................... 257


Ustawianie koloru................................................................................................................257
Color.setRGB() ................................................................................................................ 257
MovieClip.setRGB() ......................................................................................................... 258
Color.getRGB() ................................................................................................................ 259
MovieClip.getRGB()......................................................................................................... 259
Color.setRGBStr() ............................................................................................................ 259
MovieClip.setRGBStr()..................................................................................................... 260
Color.getRGBStr()............................................................................................................ 260
MovieClip.getRGBStr() .................................................................................................... 261
Color.setRGB2()............................................................................................................... 262
MovieClip.setRGB2() ....................................................................................................... 262
Color.getRGB2() .............................................................................................................. 263
MovieClip.getRGB2()....................................................................................................... 264

Przeksztacenia kolorw......................................................................................................264
Color.setTransform() ........................................................................................................ 264
MovieClip.setColorTransform()......................................................................................... 265
Color.getTransform() ........................................................................................................ 265
MovieClip.getColorTransform() ........................................................................................ 265

12

Flash MX. Programowanie


Powrt do oryginalnego koloru...........................................................................................265
Color.reset() ..................................................................................................................... 265
MovieClip.resetColor()...................................................................................................... 266

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

Offset zabarwienia ..............................................................................................................272


Color.setTintOffset()......................................................................................................... 272
MovieClip.setTintOffset() ................................................................................................. 272
Color.getTintOffset() ........................................................................................................ 272
MovieClip.getTintOffset() ................................................................................................. 273

Odwrcenie kolorw...........................................................................................................273
Color.invert() ................................................................................................................... 273
MovieClip.invertColor() .................................................................................................... 274
Color.setNegative() ........................................................................................................... 274
MovieClip.setNegativeColor() ........................................................................................... 274
Color.getNegative()........................................................................................................... 274
MovieClip.getNegativeColor() ........................................................................................... 275

Zmiany poszczeglnych kolorw .......................................................................................275


setRed() ........................................................................................................................... 275
setGreen() ........................................................................................................................ 275
setBlue() .......................................................................................................................... 276
getRed()........................................................................................................................... 276
getGreen()........................................................................................................................ 276
getBlue().......................................................................................................................... 276

Dodawanie waciwoci koloru do klipu filmowego ..........................................................277


MovieClip._red, _green i _blue .......................................................................................... 277
MovieClip._rgb ................................................................................................................ 279
MovieClip._brightness ...................................................................................................... 279
MovieClip._brightOffset.................................................................................................... 280

Wnioski ...............................................................................................................................280

Rozdzia 10. Rysowanie w ActionScript............................................................ 281


Interfejs programistyczny rysowania ksztatw..................................................................281
MovieClip.moveTo() ........................................................................................................ 282
MovieClip.lineTo()........................................................................................................... 282

Spis treci

13

MovieClip.lineStyle()........................................................................................................ 282
MovieClip.curveTo() ........................................................................................................ 283
MovieClip.beginFill() ....................................................................................................... 283
MovieClip.beginGradientFill() ........................................................................................... 284
MovieClip.endFill() .......................................................................................................... 284
MovieClip.clear().............................................................................................................. 285

Animacja i dynamiczne rysowanie .....................................................................................285


Animacja klipu filmowego................................................................................................. 285
Animacja ksztatu ............................................................................................................. 286

Rysowanie typowych ksztatw..........................................................................................287


Linie................................................................................................................................ 287
Trjkty........................................................................................................................... 288
Czworobok ...................................................................................................................... 290
Prostokty........................................................................................................................ 290
Kwadraty ......................................................................................................................... 293
Kropki ............................................................................................................................. 294
Wieloboki ........................................................................................................................ 295
Wieloboki foremne ........................................................................................................... 296
Elipsy .............................................................................................................................. 297
Okrgi ............................................................................................................................. 298

Znajdowanie pooenia kursora rysowania.........................................................................298


Waciwoci MovieClip._xpen i _ypen ............................................................................... 298
Waciwoci MovieClip._xpenStart i _ypenStart.................................................................. 299
Inicjalizacja waciwoci ................................................................................................... 300

Krzywe Beziera stopnia trzeciego.......................................................................................300


Krzywe Beziera stopnia drugiego a trzeciego....................................................................... 301
Metody rysowania krzywych Beziera stopnia trzeciego ........................................................ 303

Wnioski ...............................................................................................................................305

Cz IV Przykady .............................................................................. 307


Rozdzia 11. Nocna aura................................................................................... 309
Rozwj pomysu..................................................................................................................309
Klasa PhysicsParticle..........................................................................................................310
Konstruktor...................................................................................................................... 310
Metody publiczne ............................................................................................................. 312
Metody pobierania i ustawiania .......................................................................................... 313
Metody prywatne.............................................................................................................. 315
Waciwoci pobierania i ustawiania................................................................................... 320
Wykaczanie.................................................................................................................... 320

Klasa Force .........................................................................................................................320


Konstruktor...................................................................................................................... 321
Metody pobierania i ustawiania .......................................................................................... 321
Pozostae metody.............................................................................................................. 323
Waciwoci pobierania i ustawiania................................................................................... 324
Wykaczanie.................................................................................................................... 325

Klasa ElasticForce...............................................................................................................325
Konstruktor...................................................................................................................... 325
Metody ............................................................................................................................ 326

14

Flash MX. Programowanie


Waciwoci pobierania i ustawiania................................................................................... 328
Zakaczanie ..................................................................................................................... 328
Prosty przykad................................................................................................................. 328

Kod FLA przykadu Aurora Borealis..................................................................................329


Kod gwnej listwy czasowej............................................................................................. 329
Komponent aurora ............................................................................................................ 330
Klip filmowy czsteczki .................................................................................................... 330

Wnioski ...............................................................................................................................334

Rozdzia 12. nieyca ....................................................................................... 335


Klasa Snowflake..................................................................................................................335
Funkcje pomocnicze ......................................................................................................... 337
Konstruktor Snowflake...................................................................................................... 338
Metody ustawiania i pobierania .......................................................................................... 339
Metody prywatne.............................................................................................................. 341

Klasa Snowstorm.................................................................................................................346
Konstruktor Snowstorm .................................................................................................... 346
Metody publiczne ............................................................................................................. 347

Kod przykadu Snowstorm..................................................................................................349


Kod gwnej listwy czasowej............................................................................................. 349
Komponent snowstorm ..................................................................................................... 349
Metody komponentu ......................................................................................................... 350

Wnioski ...............................................................................................................................352

Rozdzia 13. Fraktalny tancerz......................................................................... 353


Komponent FractalTree ......................................................................................................354
Parametry komponentu ..................................................................................................... 354
Metody ............................................................................................................................ 355

Klasa FractalBranch ............................................................................................................357


Konstruktor FractalBranch................................................................................................. 357
Metody ............................................................................................................................ 358

Klasa MotionCam................................................................................................................362
Konstruktor MotionCam.................................................................................................... 362
Metody publiczne ............................................................................................................. 363
Metody pobierania i ustawiania .......................................................................................... 365
Metody prywatne.............................................................................................................. 367

Wnioski ...............................................................................................................................368

Rozdzia 14. Cyklon.......................................................................................... 369


Wymylanie cyklonu...........................................................................................................370
Rozbijamy zagadnienie .......................................................................................................373
Czsteczka...........................................................................................................................373
cieka.................................................................................................................................373
Path.onEnterFrame()......................................................................................................... 373
Path.init()......................................................................................................................... 374

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.
 
   


W dalszej czci rozdziau bdziemy bardzo intensywnie wykorzystywa t podstawow


skadni do tworzenia wektorw dotyczcych rnych aspektw fizyki, na przykad
przemieszczenia, prdkoci, przyspieszenia i siy.
Kinematyk mona rozszerzy do trzech lub wicej wymiarw bez zbytnich problemw.
Jeli nie bdziemy mieli kopotw z implementacj kinematyki w ActionScript za pomoc
klasy
  , nie powinnimy te mie wikszych problemw z przejciem na klas

   (patrz rozdzia 5.). Specjalnie korzystaem z polimorfizmu (patrz rozdzia 2.)


przy projektowaniu obydwu klas wektorw, aby ich interfejsy byy jak najbardziej podobne.

228

Cz III  Dynamiczna grafika

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 ]

Niech d bdzie przemieszczeniem midzy b i a.


d =ba

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.

Ruch ze sta prdkoci


Gdy obiekt posiada sta prdko w pionie i w poziomie, porusza si po linii prostej.
Poniszy pod przedstawia przykad ruchu klipu filmowego ze sta prdkoci.
. 34 % 3
00
5&*
. #67 8 9
#&5&

230

Cz III  Dynamiczna grafika


. #:;#;
. #:#
<

Najpierw deklarujemy dwa obiekty


  ,  i , ktre reprezentuj pooenie i prdko. Pocztkowe pooenie to (0, 0), a pocztkowa prdko to w d i na prawo. Nastpnie
kreujemy ptl dla klatek przy uyciu procedury obsugi zdarzenia   ! . W kadej klatce dodajemy do pooenia wektor prdkoci, korzystajc z metody
  .
Na kocu zmodyfikowane komponenty " i # przepisujemy do waciwoci $" i $# klipu
filmowego.
Powyszy przykad uywa ukadu wsprzdnych Flasha. Jeli chcemy korzysta z ukadu
kartezjaskiego, wystarczy zastpi $#%&%# konstrukcj $#%&%'#.
Odwracamy warto komponentu # przed przypisaniem go do $#.

Ruch z losow prdkoci


Po omwieniu staej prdkoci przejdmy do przykadu ruchu, w ktrym prdko nie
jest staa.
.&34 % 3
0000
5&00
. #67 8 9
5&#  2)"  2)"
#&5&
. #:;#;
. #:#
<

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)"

W kadej klatce ustawiamy now prdko, ktr pniej wykorzystujemy do przesunicia


obiektu. Wartoci " i # z  to wartoci losowe z przedziau od 4 do 4. Ruch obiektu
staje si chaotyczny.

Ruch z prdkoci sterowan mysz


Nasz nastpny przykad obrazuje sposb interaktywnego sterowania prdkoci klipu
za pomoc myszy.
4 %=  3
0000
5&00
. #67 8 9
5&#. #:;*0. #:*0
#&5&

Rozdzia 8.

Fizyka

231

. #:;#;
. #:#
<

Przykad jest identyczny do poprzedniego poza wierszem:


5&#. #:;*0. #:*0

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#,-,.
 % & '

Podobnie jak wczeniej wywoywalimy metod   do znalezienia odlegoci


z wektora przemieszczenia, tak teraz uywamy tej samej metody do znalezienia moduu
wektora prdkoci szybkoci.

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.

Ruch ze staym przyspieszeniem


Poniszy kod wykonuje ruch ze staym przyspieszeniem.
.   
00
5&00

232

Cz III  Dynamiczna grafika


&*0
. #67 8 9
5&#& &
#&5&
. #:;#;
. #:#
<

Najpierw tworzymy trzy obiekty


  reprezentujce pooenie, prdko i przyspieszenie. W procedurze obsugi   !  dodajemy przyspieszenie do prdkoci,
a prdko do pooenia. Nastpnie renderujemy now prdko. To wszystko.
Obiekt pocztkowo nie porusza si, ale pniej coraz szybciej pdzi na prawo. Moemy
zmodyfikowa wartoci pocztkowe wektorw ,  i  , aby uzyska inn animacj.
Nic nie stoi na przeszkodzie, aby zdefiniowa prdko wskazujc w lewo, jak w poniszym kodzie.
5&)*0

Spowoduje to pocztkowy ruch obiektu w lewo, ale po chwili obiekt zatrzyma si i zacznie
porusza si ze staym przyspieszeniem w prawo.

Ruch z losowym przyspieszeniem


Nasz nastpny przykad wykonuje losowe przyspieszenie.
.&  
0000
5&00
&00
. #67 8 9
 &#  )  )
5&#& &
#&5&
. #:;#;
. #:#
<

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.

Ruch z przyspieszeniem sterowanym mysz


Pozosta jeszcze skrypt modyfikujcy przyspieszenie na podstawie pooenia myszy.
   3
0000
5&00

Rozdzia 8.

Fizyka

233

&00
. #67 8 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.

Sia to warto wektorowa z moduem i kierunkiem. Wpywa ona na ruch, zmieniajc


przyspieszenie. Odkry to w XVII wieku Newton. Newton jest najbardziej znany z odkrycia grawitacji, ale jego trzy zasady dynamiki take zasuguj na ogromne uznanie.

Pierwsze prawo dynamiki Newtona


Jedn z podstawowych si mechaniki jest przyspieszenie zmiana prdkoci ktre nie
powstaje samo z siebie. Jeli zmienia si prdko obiektu, musi pojawi si sia powodujca t zmian. O tym dokadnie mwi pierwsze prawo dynamiki Newtona.
Jeeli siy dziaajce na punkt materialny rwnowa si, to w inercyjnym ukadzie
odniesienia ciao porusza si ruchem jednostajnym lub spoczywa.
Pierwsze prawo dynamiki nazywane jest te prawem inercji. Inercja to opr, jaki stawia
obiekt w przypadku chci zmiany jego prdkoci. Skaa stoi w miejscu, dopki nie zadziaa
na ni niezrwnowaona sia. Podobnie dzieje si, jeli skaa porusza si, nie zwolni ani
nie przyspieszy, gdy nie dziaa na ni tarcie czy grawitacja.

234

Cz III  Dynamiczna grafika


W kosmosie ciaa prawie wcale nie doznaj tarcia, wic mog przebywa znaczne odlegoci bez wikszej utraty prdkoci. W ten sposb moemy wysya sondy do systemu
sonecznego, by szpiegowa inne planety. Bez inercji podr mierzona milionami kilometrw nie byaby jeszcze moliwa (wymagaaby ogromnej iloci paliwa).

Sia niezrwnowaona (sia wypadkowa)


Pierwsze prawo dynamiki Newtona mwi o rwnowadze si, a zmiana ruchu nastpuje
tylko przy jej braku. Na ciao w tym samym czasie moe dziaa wiele si z rnych
kierunkw. Na przykad w zabawie z przeciganiem liny dwie druyny cign lin w przeciwnych kierunkach. Jeli obydwie druyny stosuj t sam si, lina nie porusza si,
poniewa przyoone do niej siy wzajemnie si znosz. Gdy sia jest niezrwnowaona,
lina przesunie si w kierunku silniejszej druyny. Rnica midzy dwiema siami to sia
wypadkowa.
W systemie, w ktrym kilka si dziaa na ciao, obliczamy si wypadkow, sumujc
wszystkie wektory si. Jeli sia wypadkowa wynosi zero, obiekt nie zmienia swojej prdkoci. Gdy sia wypadkowa jest rna od zera, obiekt przyspiesza w kierunku wskazywanym przez si wypadkow.
W poniszym przykadzie zdefiniowalimy trzy siy, a nastpnie dodalimy je do siebie,
by obliczy si wypadkow.
  &  
 > 
 & 0
 & !) 
 & ?0*
  
 & @  00
 & @  #& & 
 & @  #& & !
 & @  #& & ?
  & @  ()* +

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.
   >
 & @   & #&$ & !
 & @  #& & ?
  & @  ()* +

Wektor  dodajemy do , a wynik przypisujemy do #. Aby zakoczy


proces sumowania, dodajemy ( do #.
W przypadku gdy musimy doda do siebie wiele si, powiedzmy pi i wicej, bardziej
wydajne wydaje si zastosowanie wasnej procedury dodawania zamiast
  .
Procedura ta moe przyjmowa tablic wektorw, przechodzi przez ni w ptli i dodawa
komponenty x oraz y do osobnych zmiennych. Na kocu wystarczy wpisa komponenty
do nowego wektora i zwrci go.

Rozdzia 8.

Fizyka

235

Drugie prawo dynamiki Newtona


Z pierwszego prawa dynamiki wnioskujemy, e sia wypadkowa powoduje przyspieszenie
ruchu obiektu. Wiemy te, jak policzy si wypadkow dla obiektu, dodajc siy skadowe.
Nie wiemy jednak, jakie przyspieszenie spowoduje konkretna sia jaki jest midzy
tymi wektorami zwizek? Dowiadczenie podpowiada, e popchniecie lekkiego i cikiego ciaa z t sam si powoduje szybsze poruszanie si lejszego obiektu. Wyglda
na to, e masa ciaa ma wpyw na przyspieszenie.
Drugie prawo dynamiki Newtona opisuje zwizek midzy si, mas i przyspieszeniem.
Przyspieszenie powodowane przez si wypadkow jest wprost proporcjonalne
do moduu siy wypadkowej, a odwrotnie proporcjonalne do masy ciaa.
Kierunek przyspieszenia i siy jest taki sam.
Moemy powiedzie, e im wiksza sia wypadkowa, tym wiksze przyspieszenie, a im
wiksza masa, tym mniejsze przyspieszenie.
Drugie prawo dynamiki mona wyrazi za pomoc poniszego wzoru matematycznego.
f = ma
Tutaj a to przyspieszenie obiektu, f to dziaajca niego sia, a m to masa obiektu. Rwnanie
to jest czsto przeksztacane do postaci:
a= f m
Dziki tej postaci potrafimy obliczy przyspieszenie, gdy znamy przyoon si oraz mas
obiektu. Wystarczy tylko podzieli si przez mas. Przypumy, e sia wypadkowa
wynosi [8, 0] (modu rwny osiem i kierunek w prawo), a masa rwna jest 2. Przyspieszenie policzymy w nastpujcy sposb.
f = [8,0]
m=2

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

Cz III  Dynamiczna grafika


a = [8,0] 4
a = [2,0 ]

Przyspieszenie ciszego obiektu wyniesie [2, 0] poow przyspieszenia lejszego


obiektu. Teraz bardzo atwo zauway zwizek midzy mas i przyspieszeniem. Gdy
masa wzrasta dwa razy, przyspieszenie zmniejsza si dwukrotnie.

Ruch we Flashu sterowany si


Aby uzyska we Flashu wiarygodny, dynamiczny ruch bazujcy na siach, musimy mie
si i na jej podstawie automatycznie oblicza nowe pooenie obiektu. By wykona to
zadanie, skorzystamy z poznanych do tej pory wiadomoci na temat prdkoci, przyspieszenia itp. Oto krtkie przypomnienie. Siy dziaajce na obiekt sumujemy, by uzyska
si wypadkow. Z siy wypadkowej obliczamy przyspieszenie. Przyspieszenie zmienia
prdko poruszania si obiektu. Prdko wpywa na pooenie. Kolejno jest nastpujca: siy sia wypadkowa przyspieszenie prdko pooenie.
W ActionScript implementacja tego procesu to sze oddzielnych krokw.
1. Obliczamy siy dziaajce na obiekt.
Wektory si moemy policzy dowoln metod. W dalszej czci rozdziau dowiemy si,
jak oblicza siy, takie jak grawitacja czy sprysto. Na razie w tym kroku
po prostu je zdefiniujemy.
 


 

 

2. Dodajemy siy, by obliczy si wypadkow.


We wczeniejszej czci rozdziau przedstawiem skrtowy sposb obliczania siy
wypadkowej.
  
  !

 " ! 


 # $
%
 

3. Znajdujemy przyspieszenie dla siy.


Pamitamy rwnanie na przyspieszenie:
a= f m

W ActionScript dzielimy wektor siy wypadkowej przez mas obiektu.


 $ & 


&

   '


 " ! #
 %&


Czasem masa poruszajcego si obiektu nie ma wpywu na animacj. Moemy wic


zignorowa mas i zaoy, e ma ona warto jednostkow. W takim przypadku
rwnanie na przyspieszenie upraszcza si.
a= f m

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.
 $ & 




 " ! 

W wikszoci tworzonych animacji masa nie jest istotna, wic zakadam, e ma


warto 1 i pomijam krok 3.
4. Dodajemy przyspieszenie do prdkoci.
Wektor przyspieszenia modyfikuje wektor prdkoci.
 $ &( )!'*
 
   '
# $
 


5. Dodajemy prdko do pooenia.


Ten krok jest podobny do poprzedniego, ale tym razem modyfikujemy pooenie.
 $ &  +
  
   '
 # $
 

6. Umieszczamy obiekt w nowym pooeniu.


Oglnie oznacza to ustawienie waciwoci  i  klipu filmowego na komponenty
x i y wektora pooenia.
 !$     + !  $ &,
&#-.  #.
&#-  #

Wspomniaem ju w rozdziale 3., e czasem preferuj tradycyjne wsprzdne


kartezjaskie, a nie wsprzdne ekranu Flasha. Obracam wic o y, mnoc
komponent dla tej osi przez 1.
$+
/ )0!  1
!0
&#-.  #.
&#-2  #

Powysze 6. krokw to oglna procedura generowania dynamicznego ruchu na podstawie


si. Do tej pory poruszalimy si w idealnym wszechwiecie nie istnia aden opr.
Aby urealni ruch, musimy wzi pod uwag tarcie.

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

Cz III  Dynamiczna grafika


Pamitajmy o tym, e tarcie to sia przeciwdziaajca. Nie powoduje spontanicznego
przesuwania si obiektw tarcie pojawia si tylko w odpowiedzi na ruch. Gdy sofa
stoi w miejscu, nie dziaa na ni adne tarcie. Gdy prbujemy j poruszy, sia tarcia
przeciwdziaa ruchowi. Kiedy dwa ciaa stae s ze sob zczone, pojawiaj si dwa
gwne rodzaje tarcia: statyczne i kinetyczne.

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

3    !, && 


45

6  #7
0
#89 &$:
 4; 
4
 
45
 4<5:
 4= 0#& .5 42 
6  
>
 4?5:
 4= 0#&5 4; 
6  
>
0
#-.; 4
>
0
#=$
@$:
 
4A
>

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

Cz III  Dynamiczna grafika


W tym rwnaniu fs to sia tarcia statycznego, s to wspczynnik tarcia, a N to modu z siy
normalnej czcej obydwa ciaa. Warto s znajduje si typowo w przedziale od 0 do 1.
Im wysza warto wspczynnika, tym wiksze tarcie dla danej siy dociskajcej.
Do tej pory nie musiaem w adnej animacji korzysta z tarcia statycznego, ale naley teraz
wspomnie o takiej moliwoci. Sposb implementacji jest prosty.
1. Sprawdzamy, czy obiekt nie porusza si (czyli jego prdko wynosi zero).
2. Obliczamy si wypadkow dziaajc na obiekt.
3. Obliczamy si tarcia statycznego dziaajcego na obiekt.
4. Jeli sia wypadkowa jest mniejsza do siy tarcia, nie robimy nic.
5. W przeciwnym przypadku zaczynamy przyspiesza obiekt.

Tarcie dla cieczy i gazw


Do tej pory mwilimy o tarciu midzy obiektami staymi. Z tarciem pynw spotykamy
si na co dzie, gdy pywamy si w wodzie. Im szybciej porusza si obiekt, tym wiksze
odczuwa tarcie. Gdy na przykad prowadzimy samochd, czujemy wikszy opr powietrza, gdy jedziemy szybciej.
Wykonanie dokadnej symulacji tarcia w pynach wymaga zoonych rwna. Poniewa
nie zaley nam a tak na dokadnoci w dynamicznych animacjach Flasha, skorzystamy
z przyblienia, ktre w wikszoci przypadkw sprawdza si doskonale. Musimy tylko
podporzdkowa si gwnej zasadzie: wiksza prdko oznacza wiksz utrat prdkoci spowodowan tarciem. Innymi sowy, utrata prdkoci jest wprost proporcjonalna
do samej prdkoci.
Proporcje czsto wyraamy w procentach. Na przykad podatek VAT wyraamy w procentach. Im wicej pacimy za produkt, tym wikszy odprowadzamy od niego podatek. Tarcie
w pynach to jakby podatek od prdkoci, ktry moemy zdefiniowa w procentach utraty
prdkoci na jednostk czasu. We Flashu podstawow jednostk czasu jest klatka, wic ze
wzgldw praktycznych tarcie w pynach okrelimy jako procent utraty prdkoci na klatk.
Na przykad sia tarcia moe powodowa zmniejszanie prdkoci ciaa o 10% w kadej
klatce. Jeli obiekt rozpoczyna ruch z prdkoci 100, to w nastpnej klatce jego prdko
spadnie do 90 (100 10). W kolejnej klatce prdko spadnie o 9 (10% z 90), czyli do
wartoci 81. Nastpny spadek wyniesie 8,1 do 72,9 itd.
Poniszy kod obrazuje sposb uzyskania tego efektu w ActionScript.
3      0 && 
45
 B $5#5C
0
#89 &$:
 4; 
4
 
45
 4D2 B $
0
#-.; 4
>

Rozdzia 8.

Fizyka

241

0
#=$
@$:
 
4A
>

Przykad ten jest bardzo podobny do wczeniejszego przykadu z tarciem kinetycznym.


Rnice s tylko dwie. Pierwsza to deklaracja zmiennej tarcia.
 B $5#5C

Tarcie pynu definiujemy w procentach; w tym przypadku strata wynosi 7% wartoci


prdkoci w kadej klatce. Druga rnica to wiersz, w ktrym tarcie wpywa na prdko.
4D2 B $

W ten sposb redukujemy  o warto okrelon w   . W naszym przykadzie


   daje wynik 0,93. Pomnoenie prdkoci przez t warto zmniejsza j
o 7%.
Jak moemy zauway, kod tarcia w pynach jest szybszy i prostszy ni w przypadku
tarcia kinetycznego. W wikszoci animacji uywam tarcia w pynach. Gwny wyjtek
stanowi witryna Axis Interactive v2 (www.axis-media.com), gdzie uyem tarcia kinetycznego dla pywajcego menu.
Jeli gwnym naszym z martwieniem jest szybko dziaania, korzystajmy z tarcia
w pynach. Jeli poszukujemy wikszej dokadnoci, uywamy tarcia kinetycznego, gdzie
obiekty tocz si lub lizgaj, i tarcia w pynach dla cieczy, gazw i przestrzeni kosmicznej (ktra take zawiera niewielkie iloci gazu). Gdy porwnamy tarcia do przej, okae
si, e tarcie kinetyczne to w zasadzie spowolnienie kwadratowe, a tarcie w pynach to
spowolnienie wykadnicze (szczegy znajdziemy w rozdziale 7.).

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

Fg to warto siy grawitacji, m1 i m2 to masy cia. G to staa grawitacji wynoszca


6,67 1011 Nm 2/kg2, a r to odlego rodkw mas obydwu cia.
Sia grawitacji jest wprost proporcjonalna do masy obydwu obiektw. Jeli dwukrotnie
zwikszymy jedn z mas, sia grawitacji wzronie dwukrotnie, a gdy dwukrotnie zwikszymy obydwie masy, sia wzronie czterokrotnie.
Z drugiej strony pojawia si odwrotna proporcjonalno do kwadratu odlegoci. Jeli
odlego midzy ciaami zwikszymy dwukrotnie, sia grawitacji zmniejszy si do jednej
czwartej oryginalnej wartoci. Jeli dwukrotnie zmniejszymy odlego midzy ciaami,
sia grawitacji wzronie czterokrotnie.

242

Cz III  Dynamiczna grafika


We Flashu interesuje nas przede wszystkim efekt, a nie dokadno. Z tego powodu nie
jest w zasadzie potrzebna staa grawitacji ani nawet masa obiektw, gdy sdzimy, e nie
odgrywa adnej znaczcej roli.
Wane jest, aby zapamita, e sia grawitacji jest odwrotnie proporcjonalna do kwadratu
odlegoci midzy obiektami. By znale si grawitacji, moemy okreli oddziaywanie
midzy obiektami, znale odlego midzy nimi (r) i podzieli oddziaywanie przez
kwadrat odlegoci. .
Przyjrzyjmy si teraz przykadowi implementacji grawitacji w ActionScript. Najpierw
przedstawmy cao kodu.
,   !/ ! !), $!$
0
# 
A555
0
#E A5
0
#  55
0
#5
 '',   
0
# 0A555
0
#
,0A555
0
#9$:
3  
 ,   
0
#90
# 
#&$
%0
# 0
E 0
#9#,F,0
0
#9#
F,020
#
,0D
>
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
#- #-&$

>

Skrypt naley umieci wewntrz klipu filmowego z widoczn grafik, na przykad


wewntrz klipu przedstawiajcego pik. Pamitajmy te o doczeniu klasy  
(vector_class.as). Po uruchomieniu przykadu moemy klikn dowolne miejsce i spowodowa orbitowanie wok kliknitego punktu. Przyjrzyjmy si teraz dokadniej kodowi.
Pierwsza cz skryptu deklaruje gwne wektory dotyczce pooenia, prdkoci, przyspieszenia i tarcia.

Rozdzia 8.

Fizyka

243

0
# 
A555
0
#E A5
0
#  55
0
#5

Ustawienia te znamy ju z wczeniejszych przykadw. Nastpnie pojawiaj si dwa


wiersze zwizane z grawitacj.
0
# 0A555
0
#
,0A555

Wektor   to punkt na scenie, wok ktrego orbituje obiekt. Waciwo



okrela si przycigania midzy punktem a poruszajcym si obiektem. Wyprbujmy
rne wartoci tego parametrem, by zobaczy jego wpyw na przebieg animacji.
Pniej pojawia si metoda   , ktrej kod jest nastpujcy.
0
#9$:
3  
 ,   
0
#90
# 
#&$
%0
# 0
E 0
#9#,F,0
0
#9#
F,020
#
,0D
>

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

Wprowadzam tutaj si wypadkow (


  ), poniewa wektor siy wypadkowej
jest w rzeczywistoci rwnolegy do wektora przemieszczenia. W ten sposb uzyskuj
odpowiedni kierunek wektora siy, a jego warto dugo dostosowuj przy uyciu
poniszego kodu.
E 0
#9#,F,0
0
#9#
F,020
#
,0D

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

Cz III  Dynamiczna grafika


Ta procedura powinna ju by znana z wczeniejszych przykadw. Przyspieszenie dodajemy do prdkoci, ktra jest skalowana tarciem. Nastpnie prdko dodajemy do pooenia.
W tym przykadzie si wypadkow dodajemy bezporednio do pooenia zamiast do
przyspieszenia, poniewa w naszym przykadzie sia ta jest rwna przyspieszeniu.
Po tej cikiej pracy pozostao jeszcze wykonanie na klatkach ptli, ktra poprowadzi
animacj.
0
#89 &$:
0
#9
0
#&E
>

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
#- #-&$

>

Gdy naciniemy przycisk myszy, zmieniamy wektor   na wartoci wsprzdnych


myszy. Powyszy przykad obrazuje sposb symulacji grawitacji midzy obiektami
w przestrzeni kosmicznej. Teraz przyjrzymy si grawitacji dziaajcej na Ziemi.

Grawitacja w pobliu powierzchni


Na Ziemi odczuwana sia grawitacji ma mniej wicej sta warto i dziaa tylko dla osi
pionowej. W zasadzie to wanie grawitacja okrela, gdzie jest pion. Sia grawitacja stara
si nas wepchn do rodka Ziemi. Z tego powodu d oznacza po prostu kierunek wskazujcy na rodek Ziemi. Kierunek ten jest prostopady do powierzchni naszej planety.
W grawitacji wystpujcej midzy dwoma obiektami w kosmosie masa kadego ciaa ma
wpyw na si grawitacji i przyspieszenie. Jednak na Ziemi przyspieszenie powodowane
przez grawitacj jest oglnie tak samo niezalene do masy i wymiarw obiektu (nie
uwzgldniamy tarcia).
Kilka wiekw temu w sawnym eksperymencie Galileusz obali pogld, e cisze ciaa
spadaj szybciej ni lejsze. Eksperyment polega na spuszczeniu dwch kul o rnej
wadze z krzywej wiey w Pizie. Obydwie kule armatnie zostay puszczone w tym samym
czasie i w tym samym czasie uderzyy w ziemi. Nasza planeta ma tak ogromn mas
w porwnaniu z innymi obiektami znajdujcymi si na Ziemi, e w rwnaniu na si
grawitacji masa lejszego ciaa (obiekt spadajcy na Ziemi) jest w zasadzie niezauwaalna.
Powodem wolniejszego spadania pirka od kamienia jest opr powietrza. W prni
obydwa obiekty spadaj z tak sam szybkoci.

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
#E 55
0
#5
 '',   
0
#, E 5#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

Cz III  Dynamiczna grafika


Nie wszystkie materiay s elastyczne; niektre rozsypuj si lub ami, gdy je ciniemy.
Jednak istniej materiay, ktre moemy rozciga; czsteczki tych obiektw oddalaj
si od siebie. W trakcie trwania procesu rozcigania atomy nadal wpywaj na siebie si
elektromagnetyczn (jedna z czterech podstawowych si). To wanie z niej bierze swj
pocztek sia sprystoci.

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.

Zmienna F w rwnaniu to sia sprystoci. Zmienna d to przemieszczenie w trakcie


rozcigania. W fizyce przemieszczenie podaje si typowo w metrach, a si w Newtonach (metryczna jednostka siy). W animacjach Flasha nie musimy jednak martwi si
o jednostki.

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

Kierunek siy sprystoci


Dlaczego w rwnaniu pojawia si znak minus? Poniewa sia sprystoci dziaa w kierunku przeciwnym do przemieszczenia w trakcie rozcigania. Przypumy, e przymocowalimy jeden koniec liny, a drugi cigniemy w prawo. Sia sprystoci stara si
cign nasz rk w lewo. Z tego powodu przemieszczenie jest dodatnie, a sia sprystoci ujemna i na odwrt.

Implementacja w ActionScript

)+
'*!/  $!$!' ,!$
&&

0
# 
0
#-.0
#-
0
#E 55
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

Cz III  Dynamiczna grafika


Gwn metod skryptu jest   , gdzie obliczamy elastyczno.
0
#9$:
3 
 
)+
'
0
#90
# 
#&$
%0
# 0
0
#9#
 20
# $


>

Pamitamy posta rwnania prawa Hookea dla sprystoci: F = kd. Przemieszczenie


rozcigania d znajdujemy, odejmujc w pierwszym wierszu kodu wektor punktu rwnowagi
od wektora pooenia.
0
#90
# 
#&$
%0
# 0

Teraz waciwo 


   przechowuje wektor przemieszczenia wskazujcy z klipu
filmowego na punkt rwnowagi, ktry jest rdem siy sprystoci.
Drugi wiersz przeprowadza mnoenie kd za pomoc metody  
.
0
#9#
 20
# $



Teraz wektor przechowuje si sprystoci.


Pozostae metody: !, "   i 
#$ s takie same jak we wczeniejszym przykadzie z grawitacj w kosmosie.

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

Oglny wzr na amplitud fali sinusoidalnej moemy zapisa nastpujco.


P = amp sin (t )
Warto amp skaluje ca funkcj sinus na now amplitud.

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

Cz III  Dynamiczna grafika

Rysunek 8.4.
Zmiana czstotliwoci
fali sinusoidalnej

Dlaczego znalazo si w tym rwnaniu? Funkcja sin(t) powtarza si co 2 radianw


(360), co oznacza, e naturalna czstotliwo fali wynosi 1/(2). Jeli wic chcemy nada
fali now czstotliwo, musimy najpierw pomnoy t przez 2, by znormalizowa czstotliwo do 1 (1/(2) 2 = 1), a dopiero potem przez czstotliwo.
W fizyce i elektronice czstotliwo jest zwykle mierzona w hercach (Hz), ktre
odpowiadaj iloci cykli na sekund. Dwik jest fal, ktrej czstotliwo moemy
wyrazi w hercach. Ludzkie ucho potrafi wychwyci dwiki od okoo 20Hz do 20 kHz.

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

Cz III  Dynamiczna grafika

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

Funkcja przyjmuje siedem parametrw. Pi z nich przekazujemy do konstruktora klasy


bazowej, uywajc metody
* (omwionej w rozdziale 2.). Nastpnie inicjalizujemy waciwoci ++
,  i  za pomoc odpowiednich metod ustawiajcych.
Nastpnie powodujemy dziedziczenie przez & ! metod po , uywajc
metody  omwionej w rozdziale 2.
" E=#.=

Po ustawieniu konstruktora i dziedziczenia zaczynamy przypisywa metody do prototypu


klasy. Czsto tworz tymczasow zmienn przechowujc prototyp obiektu, by skrci
sobie zapis metod.
E "=B" E=#  

Od tego momentu zamiast & ! mog uywa &.

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

>

Metody ustawiania i pobierania


Metody & !
% i % steruj amplitud fali.
"=B#
& $ :
 I$0
#O &  
>
"=B#,& $:
$0
#O & 
>

Warto zauway, e funkcja ustawiajca dokonuje prostego sprawdzenia danej. Zmienia


amplitud, tylko wtedy gdy rzeczywicie przekaemy parametr.
Metody & !
 i  steruj okresem fali.
"=B#
B$ :
 I$0
#O  
>

254

Cz III  Dynamiczna grafika


"=B#,B$:
$0
#O 
>

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
>

Zauwamy, e te metody dziaaj inaczej ni pozostae metody pobierania i ustawiania.


W odrnieniu od amplitudy i okresu czstotliwo nie jest przechowywana jako waciwo obiektu & !. Konwertujemy czstotliwo na okres i przy obliczaniu fali
korzystamy z okresu. Wspomniaem ju wczeniej o tym, e czstotliwo i okres to
wzajemne odwrotnoci. Z tego powodu dzielimy jeden przez czstotliwo, aby uzyska okres.
Metody & !
 )+ i  )+ ustawiaj i pobieraj przesunicie
fali na osi czasu.
"=B#
6&G0$:
I$0
#O&G0
>
"=B#,6&G0$:
$0
#O&G0
>

W podobny sposb metody


-++
 i -++
 przesuwaj fal w wymiarze
pooenia.
"=B#
N
$:
I$0
#O

>
"=B#,N
$:
$0
#O

>

Dodaem jeszcze jedn metod ustawiajc, & !


& !

, ktra umoliwia
ustawienie za jednym zamachem wszystkich czterech waciwoci fali.
"=B#
" EB0

$ &  &G0
:
0
#
&  & 
0
#
B 
0
#
6&G0&G0
0
#
N


>

Rozdzia 8.

Fizyka

255

Waciwoci ustawiania i pobierania


Po zdefiniowaniu metod pobierania i ustawiania moemy utworzy waciwoci ustawiania
i pobierania za pomoc metody  z Flasha MX.
0" E=#  :
 B K & K,& 
& 
 B K
K,N

N

 B K K,B
B
 B KPK,9P
9P
 B K&G0K,6&G0
6&G0
>

Na kocu usuwamy tymczasow zmienn &


 "=B

i wysyamy prosty komunikat o wczytaniu klasy do okna Output.


 K<<" !
)" E=K

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

Nazwa waciwoci, ktra oscyluje.

3,

liczba

55

rodek fali.

&

liczba

75

Rozmiar oscylacji.



liczba

Czas trwania jednego cyklu oscylacji.

$ 

liczba

czny czasu trwania oscylacji; jeli wynosi 0, ruch jest nieskoczony.

Boolean

$

Znacznik okrelajcy, czy chcemy korzysta z sekund, czy klatek


jako licznika.

$
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

Cz III  Dynamiczna grafika


Poniewa stale zwikszamy amplitud, obiekt zaczyna stopniowo waha si na coraz to
wiksze odlegoci.
Moemy nawet da uytkowi wiksz kontrol nad amplitud fali.
0
#89 &$:
 4#
& 0
#- #-&$

>

W powyszym kodzie uywam metody


% do zmiany amplitudy. Mgbym
skorzysta z waciwoci  jak poprzednio, ale chciaem przedstawi obydwa
podejcia. Waciwo  wydaje si prostsza, ale
% jest bardziej
bezporednia, a co za tym idzie typowo szybsza.

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.

You might also like