SlideShare a Scribd company logo
1 of 42
Download to read offline
IDZ DO
         PRZYK£ADOWY ROZDZIA£

                           SPIS TRE CI    Flash MX.
                                          Programowanie
           KATALOG KSI¥¯EK
                                          Autor: Robert Penner
                      KATALOG ONLINE      T³umaczenie: Marek Binkowski, Rafa³ Joñca
                                          ISBN: 83-7361-085-5
       ZAMÓW DRUKOWANY KATALOG            Tytu³ orygina³u: Robert Penner's Programming
                                          Macromedia Flash MX
                                          Format: B5, stron: 400
              TWÓJ KOSZYK                 Przyk³ady na ftp: 545 kB

                    DODAJ DO KOSZYKA     Robert Penner — ekspert i innowator w dziedzinie jêzyka ActionScript — dzieli siê swoj¹
                                         wiedz¹ na temat programowania Macromedia Flash. Penner przybli¿a tajniki ³¹czenia
                                         z³o¿onej matematyki i fizyki z atrakcyjn¹ i estetyczn¹ grafik¹ Flasha. Dziêki ksi¹¿ce
         CENNIK I INFORMACJE             „Flash MX. Programowanie” poznasz podstawowe zagadnienia zwi¹zane z przestrzeni¹,
                                         matematyk¹, kolorem, ruchem i kszta³tem, a nastêpnie dowiesz siê, jak wykorzystaæ tê
                   ZAMÓW INFORMACJE      teoriê do generowania nieprzeciêtnych animacji. Przekonasz siê, jak wspaniale mo¿esz za
                     O NOWO CIACH        pomoc¹ ActionScriptu symulowaæ zjawiska atmosferyczne takie jak tornado, nie¿yca czy
                                         zorza polarna.
                       ZAMÓW CENNIK      Ksi¹¿ka omawia szeroki zakres zagadnieñ -- od projektowania i mechaniki ruchu po tajniki
                                         pisania poprawnego, zorientowanego obiektowo kodu; s³u¿y tak¿e pomoc¹ w tworzeniu
                                         kolorów, d wiêku, ruchu i interakcji.
                 CZYTELNIA                  • Wyja nienie podstaw matematyki w kontek cie programu Flash
                                            • Tworzenie skomplikowanych animacji oraz prostego ruchu i efektów typu „rollover”
          FRAGMENTY KSI¥¯EK ONLINE          • Prezentacja mo¿liwo ci obiektowych jêzyka ActionScript
                                            • Tworzenie ³atwych do modyfikacji interfejsów wielokrotnego u¿ytku
                                            • Tworzenie obiektów trójwymiarowych
                                            • Dok³adne wyja nienie procesu tworzenia kilku przyk³adowych animacji: nie¿ycy,
                                              fraktalnego tancerza i zorzy polarnej
                                            • Projektowanie i generowanie dynamicznej animacji za pomoc¹ jêzyka ActionScript
                                            • Tworzenie grafiki — od prostych schematów po z³o¿one filmy.
                                         Po³¹czenie odwiecznych praw fizyki i matematyki z nowoczesn¹ technologi¹ Flasha MX
                                         sprawi, ¿e bêdziesz w stanie tworzyæ niezwyk³e animacje. Poznaj granice w³asnej
                                         wyobra ni z ksi¹¿k¹ „Flash MX. Programowanie”!
                                         Robert Penner to niezale¿ny twórca filmów w programie Macromedia Flash, konsultant,
Wydawnictwo Helion                       pisarz i wyk³adowca. Na ca³ym wiecie znany jest z innowacyjnych pomys³ów i animacji
ul. Chopina 6
                                         odtwarzaj¹cych piêkno natury. Jego biografiê artystyczn¹ i efekty eksperymentów mo¿na
44-100 Gliwice
                                         znale æ na witrynie http://robertpenner.com
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treści
   O Autorze........................................................................................................... 17
   Wprowadzenie ................................................................................................... 19
       Co omawia ta ksią ka? (opisy części i rozdziałów)..............................................................19
       Jak czytać tę ksią kę?............................................................................................................21
       Pliki z przykładami................................................................................................................21

Część I Początek procesu .......................................................................23
   Rozdział 1. Jak poznałem 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
            Rozwój przez ćwiczenie ...................................................................................................... 33
            Przykład: nauka skrótów klawiszowych ................................................................................ 34
       Społeczność...........................................................................................................................35
            Uczenie się przez nauczanie innych ...................................................................................... 36
            Udostępnianie kodu źródłowego........................................................................................... 37
       Proces iteracyjny ...................................................................................................................38
            Nauka jest okrągła .............................................................................................................. 38
            Ustalanie priorytetów .......................................................................................................... 39
            Tworzenie z myślą o przyszłości .......................................................................................... 40
       Układ ksią ki.........................................................................................................................41
   Rozdział 2. Programowanie zorientowane obiektowo......................................... 43
       Istota programowania............................................................................................................43
            Pamięć i zmienne................................................................................................................ 44
            Umiejętności i funkcje......................................................................................................... 44
            Obiekty: pamięć i umiejętności ............................................................................................ 45
            Właściwości i metody ......................................................................................................... 45
6           Flash MX. Programowanie


       Klasy......................................................................................................................................47
            Wbudowane klasy i obiekty Flasha....................................................................................... 47
            Konstruktory klas ............................................................................................................... 49
            Klonowanie klas wizualnych................................................................................................ 51
            Właściwość prototype ......................................................................................................... 51
            Dodawanie metod do klas.................................................................................................... 53
            Zastępowanie wbudowanych metod ..................................................................................... 54
            Rozszerzanie mo liwości obiektów statycznych .................................................................... 54
       Klasyczne pojęcia z dziedziny OOP .....................................................................................55
            Abstrakcja.......................................................................................................................... 55
            Separacja ........................................................................................................................... 56
            Polimorfizm ....................................................................................................................... 59
       Tworzenie własnej klasy .......................................................................................................59
       Analiza...................................................................................................................................60
            Lista zadań......................................................................................................................... 60
            Scenariusze poszczególnych zadań ....................................................................................... 61
       Projektowanie........................................................................................................................62
            Dobór właściwości.............................................................................................................. 63
            Dobór metod ...................................................................................................................... 63
            Relacje między obiektami.................................................................................................... 64
            Diagramy klas .................................................................................................................... 65
       Tworzenie klas w języku ActionScript .................................................................................66
            Konstruktor klasy PhotoAlbum ............................................................................................ 66
            Metoda showPhotoAt() ....................................................................................................... 68
            Metoda next()..................................................................................................................... 69
            Metoda prev() .................................................................................................................... 70
            Klasa PhotoAlbum w akcji................................................................................................... 71
       Dziedziczenie klas.................................................................................................................72
            Dziedziczenie właściwości a dziedziczenie metod.................................................................. 72
            Dziedziczenie właściwości za pomocą funkcji super()............................................................ 73
            Dziedziczenie metod ........................................................................................................... 74
            Obiekt super....................................................................................................................... 74
            Dziedziczenie metod za pomocą słowa kluczowego new ........................................................ 75
            Dziedziczenie metod przy u yciu właściwości __proto__ ....................................................... 76
            Rozwiązanie korzystające z właściwości __constructor__....................................................... 76
            Metoda superCon() ............................................................................................................. 78
       Wnioski .................................................................................................................................79

Część II Podstawowe pojęcia .................................................................81
    Rozdział 3. Matematyka część I: trygonometria i układy współrzędnych........... 83
       Trygonometria.......................................................................................................................84
            Trójkąt prostokątny............................................................................................................. 84
            Twierdzenie Pitagorasa........................................................................................................ 84
            Odległość między dwoma punktami ..................................................................................... 85
            Kąty w trójkątach prostokątnych .......................................................................................... 86
            Sinus ................................................................................................................................. 88
            Kosinus.............................................................................................................................. 91
            Tangens ............................................................................................................................. 93
            Arcus tangens ..................................................................................................................... 94
Spis treści                     7


        Arcus kosinus ..................................................................................................................... 96
        Arcus sinus......................................................................................................................... 97
   Układy współrzędnych..........................................................................................................98
        Kartezjański układ współrzędnych........................................................................................ 98
        Układ współrzędnych Flasha................................................................................................ 99
        Współrzędne biegunowe.................................................................................................... 102
   Wnioski ...............................................................................................................................107
Rozdział 4. Matematyka część II: wektory w dwóch 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 wektorów..........................................................................................................114
        Metoda Vector.plus() ........................................................................................................ 115
        Metoda Vector.plusNew().................................................................................................. 115
   Odejmowanie wektorów .....................................................................................................116
        Metoda Vector.minus()...................................................................................................... 116
        Metoda Vector.minusNew()............................................................................................... 116
   Odwracanie wektora............................................................................................................117
        Metoda Vector.negate() ..................................................................................................... 117
        Metoda Vector.negateNew() .............................................................................................. 118
   Skalowanie wektorów .........................................................................................................118
        Metoda Vector.scale() ....................................................................................................... 118
        Metoda Vector.scaleNew() ................................................................................................ 119
   Długość 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 prostopadłe ...........................................................................................................125
        Poszukiwanie normalnej wektora ....................................................................................... 125
        Metoda Vector.getNormal() ............................................................................................... 125
        Sprawdzanie prostopadłości wektorów................................................................................ 126
        Metoda Vector.isNormalTo()............................................................................................. 126
   Obliczanie kąta między dwoma wektorami ........................................................................127
        Wyprowadzenie wzoru na kąt między wektorami ................................................................ 127
        Metoda Vector.angleBetween() .......................................................................................... 128
   Traktowanie punktów jako wektory....................................................................................128
   Wnioski ...............................................................................................................................130
8           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 udziałem trójwymiarowych wektorów .........................................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 wektorów..............................................................................................................139
            Iloczyn skalarny................................................................................................................ 139
            Metoda Vector3d.dot() ...................................................................................................... 140
            Iloczyn wektorowy ........................................................................................................... 140
            Metoda Vector3d.cross() ................................................................................................... 142
       Kąt między dwoma wektorami............................................................................................142
            Równanie pozwalające na wyznaczenie kąta ....................................................................... 143
            Metoda Vector3d.angleBetween() ...................................................................................... 143
       Rzutowanie wektora na płaszczyznę ekranu.......................................................................144
            Metoda Vector3d.getPerspective()...................................................................................... 144
            Metoda Vector3d.persProject() .......................................................................................... 145
            Metoda Vector3d.persProjectNew() ................................................................................... 146
       Obroty w trzech wymiarach ................................................................................................146
            Obrót wokół osi X ............................................................................................................ 146
            Metoda Vector3d.rotateX()................................................................................................ 146
            Metoda Vector3d.rotateXTrig().......................................................................................... 147
            Obrót wokół osi Y ............................................................................................................ 148
            Metoda Vector3d.rotateY()................................................................................................ 148
            Metoda Vector3d.rotateYTrig().......................................................................................... 149
            Obrót 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 cząsteczek w trzech wymiarach........................................................................153
            Klasa Particle3d................................................................................................................ 153
            Metoda Particle3d.attachGraphic() ..................................................................................... 155
            Metoda Particle3d.render() ................................................................................................ 155
Spis treści                     9


      Przykład: ściana cząsteczek.................................................................................................156
           Przygotowania.................................................................................................................. 157
           Funkcja getWallPoints() .................................................................................................... 157
           Inicjalizacja ściany............................................................................................................ 158
           Funkcja arrayRotateXY() .................................................................................................. 159
           Animowanie z udziałem zdarzenia onEnterFrame ................................................................ 159
      Wnioski ...............................................................................................................................160
   Rozdział 6. Programowanie zdarzeń ................................................................ 161
      Model zdarzeń we Flashu 5.................................................................................................161
      Model obsługi zdarzeń we Flashu MX................................................................................162
           Detektory zdarzeń przycisków i klipów filmowych we Flashu MX........................................ 163
           Przykład: Poślizg MX ....................................................................................................... 164
      Sondy...................................................................................................................................167
           Programowanie bazujące na czasie ..................................................................................... 167
           Programowanie bazujące na zdarzeniach............................................................................. 168
           Nasłuchiwanie zdarzeń obiektów Flasha MX....................................................................... 169
           Przykład: nasłuchiwanie zdarzeń pola tekstowego................................................................ 170
           Wysyłanie zdarzeń do wielu obiektów ................................................................................ 171
      Wbudowane źródła zdarzeń ................................................................................................172
           Zajrzyjmy głębiej.............................................................................................................. 172
           Mo liwości źródeł zdarzeń ................................................................................................ 173
           Obiekt ASBroadcaster....................................................................................................... 174
           Inicjalizacja źródła zdarzeń................................................................................................ 174
           Rozsyłanie zdarzeń ........................................................................................................... 175
      Źródło zdarzeń NewsFeed...................................................................................................176
           Konstruktor obiektu NewsFeed .......................................................................................... 177
           Metoda NewsFeed.toString() ............................................................................................. 177
           Inicjalizacja źródła zdarzeń za pomocą metody ASBroadcaster............................................. 177
           Modyfikacja konstruktora.................................................................................................. 178
           Metoda NewsFeed.sendNews().......................................................................................... 178
      Przygotowywanie systemu..................................................................................................179
           Tworzenie obiektu będącego źródłem zdarzeń ..................................................................... 180
           Tworzenie obiektu, dla którego zostanie zało ona sonda ...................................................... 180
           Definiowanie detektorów zdarzeń ...................................................................................... 180
           Zakładanie sond................................................................................................................ 181
           Rozsyłanie zdarzeń ........................................................................................................... 181
      Wnioski ...............................................................................................................................182

Część III Dynamiczna grafika .............................................................. 183
   Rozdział 7. Ruch, klatki pośrednie, przyspieszanie i zwalnianie ....................... 185
      Zasady ruchu .......................................................................................................................185
           Dodatkowe informacje o poło eniu..................................................................................... 186
           Poło enie jako funkcja czasu ............................................................................................. 187
           Ruch jako wykres ............................................................................................................. 187
      Statyczne klatki pośrednie we Flashu .................................................................................188
10            Flash MX. Programowanie


         Dynamiczne klatki pośrednie w ActionScript.....................................................................189
              Przejście wykładnicze ....................................................................................................... 189
              Podstawowe komponenty przejścia .................................................................................... 191
              Funkcje przejść ................................................................................................................ 191
         Przejście liniowe .................................................................................................................192
              Wykres ............................................................................................................................ 192
              Funkcja w ActionScript ..................................................................................................... 194
              Implementacja przejścia za pomocą funkcji......................................................................... 194
              Estetyka ruchu liniowego................................................................................................... 196
         Wygładzanie 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 piątego ........................................................................................... 203
              Przyspieszenie sinusoidalne ............................................................................................... 204
              Przyspieszenie wykładnicze ............................................................................................... 205
              Przyspieszenie kołowe....................................................................................................... 206
              Wprowadzenie do klasy Tween.......................................................................................... 207
         Klasa Motion .......................................................................................................................207
              Konstruktor Motion .......................................................................................................... 207
              Metody publiczne ............................................................................................................. 209
              Metody ustawiania i pobierania .......................................................................................... 213
              Metody prywatne.............................................................................................................. 217
              Właściwości pobierania i ustawiania................................................................................... 218
              Zakańczanie ..................................................................................................................... 219
         Klasa Tween........................................................................................................................219
              Konstruktor Tween ........................................................................................................... 220
              Metody publiczne ............................................................................................................. 221
              Metody pobierania i ustawiania .......................................................................................... 223
              Właściwości pobierania i ustawiania................................................................................... 224
              Zakańczanie ..................................................................................................................... 225
         Wnioski ...............................................................................................................................225
     Rozdział 8. Fizyka ............................................................................................ 227
         Kinematyka .........................................................................................................................227
              Poło enie ......................................................................................................................... 227
              Przemieszczenie ............................................................................................................... 228
              Odległość......................................................................................................................... 229
              Prędkość.......................................................................................................................... 229
              Szybkość ......................................................................................................................... 231
              Przyspieszenie .................................................................................................................. 231
         Siła ......................................................................................................................................233
              Pierwsze prawo dynamiki Newtona .................................................................................... 233
              Siła niezrównowa ona (siła wypadkowa) ............................................................................ 234
Spis treści                   11


        Drugie prawo dynamiki Newtona ....................................................................................... 235
        Ruch we Flashu sterowany siłą........................................................................................... 236
   Tarcie ..................................................................................................................................237
        Tarcie kinetyczne.............................................................................................................. 238
        Tarcie statyczne................................................................................................................ 239
        Tarcie dla cieczy i gazów................................................................................................... 240
   Grawitacja w kosmosie .......................................................................................................241
   Grawitacja w pobli u powierzchni......................................................................................244
   Elastyczność (sprę ystość)..................................................................................................245
        Stan spoczynkowy ............................................................................................................ 246
        Prawo Hooke’a................................................................................................................. 246
        Stała sprę ystości.............................................................................................................. 246
        Kierunek siły sprę ystości ................................................................................................. 247
        Implementacja w ActionScript ........................................................................................... 247
   Ruch falowy ........................................................................................................................248
        Amplituda ........................................................................................................................ 249
        Częstotliwość ................................................................................................................... 249
        Okres............................................................................................................................... 250
        Przesunięcie czasu ............................................................................................................ 251
        Offset .............................................................................................................................. 251
        Równanie fali ................................................................................................................... 252
   Klasa WaveMotion..............................................................................................................252
        Konstruktor WaveMotion .................................................................................................. 252
        WaveMotion.getPosition() ................................................................................................. 253
        Metody ustawiania i pobierania .......................................................................................... 253
        Właściwości ustawiania i pobierania................................................................................... 255
        U ywanie 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
   Przekształcenia kolorów......................................................................................................264
        Color.setTransform() ........................................................................................................ 264
        MovieClip.setColorTransform()......................................................................................... 265
        Color.getTransform() ........................................................................................................ 265
        MovieClip.getColorTransform() ........................................................................................ 265
12           Flash MX. Programowanie


        Powrót do oryginalnego koloru...........................................................................................265
             Color.reset() ..................................................................................................................... 265
             MovieClip.resetColor()...................................................................................................... 266
        Sterowanie jasnością...........................................................................................................266
             Color.setBrightness()......................................................................................................... 267
             MovieClip.setBrightness() ................................................................................................. 267
             Color.getBrightness() ........................................................................................................ 268
             MovieClip.getBrightness()................................................................................................. 268
        Przesunięcie jasności...........................................................................................................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
        Odwrócenie kolorów...........................................................................................................273
             Color.invert() ................................................................................................................... 273
             MovieClip.invertColor() .................................................................................................... 274
             Color.setNegative() ........................................................................................................... 274
             MovieClip.setNegativeColor() ........................................................................................... 274
             Color.getNegative()........................................................................................................... 274
             MovieClip.getNegativeColor() ........................................................................................... 275
        Zmiany poszczególnych kolorów .......................................................................................275
             setRed() ........................................................................................................................... 275
             setGreen() ........................................................................................................................ 275
             setBlue() .......................................................................................................................... 276
             getRed()........................................................................................................................... 276
             getGreen()........................................................................................................................ 276
             getBlue().......................................................................................................................... 276
        Dodawanie właściwości 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 kształtów..................................................................281
             MovieClip.moveTo() ........................................................................................................ 282
             MovieClip.lineTo()........................................................................................................... 282
Spis treści                   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 kształtu ............................................................................................................. 286
       Rysowanie typowych kształtów..........................................................................................287
            Linie................................................................................................................................ 287
            Trójkąty........................................................................................................................... 288
            Czworobok ...................................................................................................................... 290
            Prostokąty........................................................................................................................ 290
            Kwadraty ......................................................................................................................... 293
            Kropki ............................................................................................................................. 294
            Wieloboki ........................................................................................................................ 295
            Wieloboki foremne ........................................................................................................... 296
            Elipsy .............................................................................................................................. 297
            Okręgi ............................................................................................................................. 298
       Znajdowanie poło enia kursora rysowania.........................................................................298
            Właściwości MovieClip._xpen i _ypen ............................................................................... 298
            Właściwości MovieClip._xpenStart i _ypenStart.................................................................. 299
            Inicjalizacja właściwości ................................................................................................... 300
       Krzywe Beziera stopnia trzeciego.......................................................................................300
            Krzywe Beziera stopnia drugiego a trzeciego....................................................................... 301
            Metody rysowania krzywych Beziera stopnia trzeciego ........................................................ 303
       Wnioski ...............................................................................................................................305

Część IV Przykłady .............................................................................. 307
   Rozdział 11. Nocna aura................................................................................... 309
       Rozwój pomysłu..................................................................................................................309
       Klasa PhysicsParticle..........................................................................................................310
            Konstruktor...................................................................................................................... 310
            Metody publiczne ............................................................................................................. 312
            Metody pobierania i ustawiania .......................................................................................... 313
            Metody prywatne.............................................................................................................. 315
            Właściwości pobierania i ustawiania................................................................................... 320
            Wykańczanie.................................................................................................................... 320
       Klasa Force .........................................................................................................................320
            Konstruktor...................................................................................................................... 321
            Metody pobierania i ustawiania .......................................................................................... 321
            Pozostałe metody.............................................................................................................. 323
            Właściwości pobierania i ustawiania................................................................................... 324
            Wykańczanie.................................................................................................................... 325
       Klasa ElasticForce...............................................................................................................325
            Konstruktor...................................................................................................................... 325
            Metody ............................................................................................................................ 326
14            Flash MX. Programowanie


              Właściwości pobierania i ustawiania................................................................................... 328
              Zakańczanie ..................................................................................................................... 328
              Prosty przykład................................................................................................................. 328
         Kod FLA przykładu Aurora Borealis..................................................................................329
              Kod głównej listwy czasowej............................................................................................. 329
              Komponent aurora ............................................................................................................ 330
              Klip filmowy cząsteczki .................................................................................................... 330
         Wnioski ...............................................................................................................................334
     Rozdział 12. Śnie yca ....................................................................................... 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 przykładu Snowstorm..................................................................................................349
              Kod głównej 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
         Wymyślanie cyklonu...........................................................................................................370
         Rozbijamy zagadnienie .......................................................................................................373
         Cząsteczka...........................................................................................................................373
         Ście ka.................................................................................................................................373
              Path.onEnterFrame()......................................................................................................... 373
              Path.init()......................................................................................................................... 374
         Oval .....................................................................................................................................375
              Oval.init() ........................................................................................................................ 375
              Oval.sidewind() ................................................................................................................ 376
Spis treści                   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 działania otaczającego nas świata. W tym rozdziale
       omówimy podstawy mechaniki — prędkość, przyspieszenie i siłę — oraz związki między
       nimi. Poznamy pewne szczególne rodzaje sił, jak tarcie, sprę ystość, grawitacja i sposoby
       ich obliczania oraz dołączania do dynamicznych animacji. Na końcu zajmiemy się fizyką
       fali i własną klasą 9CXG/QVKQP, która umo liwi generowanie oscylacji.



Kinematyka
       Mechanika to dział fizyki zajmujący się działaniem sił na obiekty fizyczne i wynikającym
       z tego ruchem. Istnieją trzy główne obszary, którymi zajmuje się mechanika: statyka,
       kinetyka i kinematyka. Statyka zajmuje się siłami w równowadze, a kinetyka — przyspie-
       szeniem powodowanym przez brak równowa enia się sił. Tymczasem kinematyka to
       czysty ruch, który nie przejmuje się siłami i masą. W tym podrozdziale przyjrzymy się
       kinematyce, a w dalszej części rozdziału przejdziemy do kinetyki (sił).


Poło enie

       W tym rozdziale skupimy się na kinematyce dwuwymiarowej, czyli z dwoma parametrami:
       x i y. Z tego powodu poło enie w naszych rozwa aniach będzie dwuwymiarowym wekto-
       rem zawierającym komponenty x i y. Skorzystamy z klasy 8GEVQT omówionej w rozdziale 4.
       Obiekt zawierający dwuwymiarowe poło enie wykreujemy, tworząc kopię 8GEVQT za pomo-
       cą poni szego kodu.
             RQ Q GPKG LCMQ FYWY[OKCTQY[ YGMVQT
            RQU  PGY 8GEVQT 
 

       W dalszej części rozdziału będziemy bardzo intensywnie wykorzystywać tę podstawową
       składnię do tworzenia wektorów dotyczących ró nych aspektów fizyki, na przykład
       przemieszczenia, prędkości, przyspieszenia i siły.

             Kinematykę można rozszerzyć do trzech lub więcej wymiarów bez zbytnich problemów.
             Jeśli nie będziemy mieli kłopotów z implementacją kinematyki w ActionScript za pomocą
             klasy 8GEVQT, nie powinniśmy też mieć większych problemów z przejściem na klasę
             8GEVQTF (patrz rozdział 5.). Specjalnie korzystałem z polimorfizmu (patrz rozdział 2.)
             przy projektowaniu obydwu klas wektorów, aby ich interfejsy były jak najbardziej podobne.
228       Część III     Dynamiczna grafika


Przemieszczenie

          Przemieszczenie to zmiana poło enia. Innymi słowy, przemieszczenie to ró nica między
          dwoma poło eniami. Gdy poło enia to wektory, przemieszczenie tak e jest wektorem.
          Wektor przemieszczenia między dwoma poło eniami znajdziemy, odejmując jeden wektor
          poło enia od drugiego. Rysunek 8.1 przedstawia wektory poło eń i wektor przemiesz-
          czenia między nimi.

Rysunek 8.1.
Znajdowanie wektora
przemieszczenia d
między punktami A i B




          Mamy dwa punkty: A w (2, 3) i B w (4, 2). Mamy te dwa odpowiadające im wektory:
          a = [2, 3] i b = [4, 2]. Wektor przemieszczenia d obliczamy jako ró nicę b i a (odejmu-
          jemy b od a). Rysunek 8.1 przedstawia sytuację graficznie, ale poni ej przedstawiam
          sposób analityczny.
                                                     a = [2,3]
                                                     b = [4,2 ]

          Niech d będzie przemieszczeniem między b i a.
                                                 d =b−a
                                              d = [4 − 2,2 − 3]
                                                     d = [2,1]

          Klasa 8GEVQT powoduje, e przeniesienie tego procesu do ActionScript jest bardzo proste,
          poniewa określiliśmy ju metodę odejmowania. Poni szy kod przedstawia sposób znajdo-
          wania wektora przemieszczenia dla dwóch określonych wektorów poło enia.
             PCLFQYCPKG YGMVQTC RTGOKGUEGPKC
            RWPMV#  PGY 8GEVQT 
 
            RWPMV$  PGY 8GEVQT 
 
            RTGO  RWPMV$OKPWU0GY 
RWPMV#
            VTCEG 
RTGO    Y[ YKGVNK = ?

          Najpierw tworzymy dwa wektory poło enia, RWPMV# i RWPMV$. Aby znaleźć przemieszczenie
          z RWPMV# do RWPMV$, odejmujemy pierwszy wektor od drugiego. Korzystając z mo liwości
          klasy 8GEVQT, wywołujemy metodę OKPWU0GY
 dla punktu $, by odjąć punkt # i zwrócić
          ró nicę jako nowy wektor RTGO.
Rozdział 8.   Fizyka         229


Odległość

       Choć odległość i przemieszczenie są blisko związane, to jednak oznaczają dwie ró ne
       rzeczy. Odległość to wartość jednowymiarowa, a przemieszczenie mo e mieć dwa lub
       więcej wymiarów. Inaczej mówiąc, odległość to skalar, a przemieszczenie to wektor.
       W powy szym kodzie przemieszczenie między RWPMV# i RWPMV$ wynosi [2, –1]. Gdy poli-
       czymy odległość, oka e się, e jest to pierwiastek kwadratowy z 5, czyli w przybli eniu
       2,236. Mo emy to sprawdzić za pomocą twierdzenia Pitagorasa, na przykład przy u y-
       ciu funkcji /CVJFKUVCPEG z rozdziału 3. Mo emy te za pomocą poni szego kodu obli-
       czyć długość wektora przemieszczenia. Uzyskamy tę samą wartość.
             MQPV[PWCELC RQRTGFPKGIQ RT[M CFW
            VTCEG 
FKURIGV.GPIVJ
  Y[ YKGVNK 

       To nie przypadek. Odległość między dwoma punktami jest zawsze równa długości wekto-
       ra przemieszczenia między tymi punktami. Jeśli więc mamy wektor przemieszczenia
       między dwoma punktami i chcemy poznać odległość, wywołujemy dla wektora metodę
       IGV.GPIVJ
.
             PCLFQYCPKG QFNGI Q EK  RTGOKGUEGPKC
            RTGO  PGY 8GEVQT 
 
            QFNGINQUE  RTGOIGV.GPIVJ

            VTCEG 
QFNGINQUE          Y[ YKGVNK 



Prędkość

       Prędkość to zmiana poło enia w czasie. Mo na powiedzieć, e jest to stosunek przemiesz-
       czenia i czasu. Prędkość to wartość wektorowa, w naszym przypadku będzie dwuwy-
       miarowa.

       Gdy tworzymy animację za pomocą skryptu, rzadko chcemy obliczać prędkość poruszania
       się obiektu, śledząc jego poło enia. Chcemy raczej zdefiniować na początku prędkość
       i poruszać obiekt zgodnie z nią. Jeśli na przykład gramy w grę Asteroids, nie sterujemy
       bezpośrednio poło eniem statku. Mamy tylko wpływ na prędkość, która modyfikuje poło-
        enie. A oto inny przykład: pomyślmy o ró nicy między myszą a joystickiem. Mysz bez-
       pośrednio steruje poło eniem kursora, ale joystick steruje raczej jego prędkością. W obiek-
       tach z rzeczywistego świata znacznie łatwiej sterować prędkością ni poło eniem, więc
       większość urządzeń zdalnego sterowania korzysta z joysticków.


       Ruch ze stałą prędkością

       Gdy obiekt posiada stałą prędkość w pionie i w poziomie, porusza się po linii prostej.
       Poni szy pod przedstawia przykład ruchu klipu filmowego ze stałą prędkością.
             TWEJ G UVC æ RTúFMQ EKæ
            RQU  PGY 8GEVQT 
 
            XGN  PGY 8GEVQT 
 
            VJKUQP'PVGT(TCOG  HWPEVKQP 
 ]
              RQURNWU 
XGN
230   Część III   Dynamiczna grafika


          VJKUAZ  RQUZ
          VJKUA[  RQU[
        _

      Najpierw deklarujemy dwa obiekty 8GEVQT, RQU i XGN, które reprezentują poło enie i pręd-
      kość. Początkowe poło enie to (0, 0), a początkowa prędkość to w dół i na prawo. Następnie
      kreujemy pętlę dla klatek przy u yciu procedury obsługi zdarzenia QP'PVGT(TCOG
. W ka -
      dej klatce dodajemy do poło enia wektor prędkości, korzystając z metody 8GEVQTRNWU
.
      Na końcu zmodyfikowane komponenty Z i [ przepisujemy do właściwości AZ i A[ klipu
      filmowego.

         Powyższy przykład używa układu współrzędnych Flasha. Jeśli chcemy korzystać z układu
         kartezjańskiego, wystarczy zastąpić VJKUA[  RQU[ konstrukcją VJKUA[  RQU[.
         Odwracamy wartość komponentu [ przed przypisaniem go do A[.


      Ruch z losową prędkością

      Po omówieniu stałej prędkości przejdźmy do przykładu ruchu, w którym prędkość nie
      jest stała.
         TWEJ  NQUQYæ RTúFMQ EKæ
        RQU  PGY 8GEVQT 
 
        XGN  PGY 8GEVQT 
 
        VJKUQP'PVGT(TCOG  HWPEVKQP 
 ]
           XGNTGUGV 
TCPFQO
  TCPFQO
 
           RQURNWU 
XGN
           VJKUAZ  RQUZ
           VJKUA[  RQU[
        _

      Struktura jest mniej więcej taka sama jak w poprzednim przykładzie. Najpierw definiu-
      jemy wektory RQU i XGN (obiekty 8GEVQT). Następnie w procedurze obsługi zdarzenia
      QP'PVGT(TCOG
 dodajemy XGN do RQU i renderujemy aktualne poło enie na ekranie. Modyfi-
      kacja polega tylko na jednym dodatkowym wierszu kodu.
        XGNTGUGV 
TCPFQO
  TCPFQO
 

      W ka dej klatce ustawiamy nową prędkość, którą później wykorzystujemy do przesunięcia
      obiektu. Wartości Z i [ z XGN to wartości losowe z przedziału od –4 do 4. Ruch obiektu
      staje się chaotyczny.


      Ruch z prędkością sterowaną myszą

      Nasz następny przykład obrazuje sposób interaktywnego sterowania prędkością klipu
      za pomocą myszy.
         RTúFMQ è UVGTQYCPC O[Uæ
        RQU  PGY 8GEVQT 
 
        XGN  PGY 8GEVQT 
 
        VJKUQP'PVGT(TCOG  HWPEVKQP 
 ]
          XGNTGUGV 
VJKUAZOQWUG   VJKUA[OQWUG  
          RQURNWU 
XGN
Rozdział 8.   Fizyka       231


             VJKUAZ  RQUZ
             VJKUA[  RQU[
           _

       Przykład jest identyczny do poprzedniego poza wierszem:
           XGNTGUGV 
VJKUAZOQWUG   VJKUA[OQWUG  

       Jako wartości nowej prędkości stosujemy współrzędne myszy zamiast liczb losowych.
       Poniewa u yte właściwości AZOQWUG i A[OQWUG są liczone względem obiektu, więc porusza
       się on w kierunku myszy.


Szybkość

       Szybkość i prędkość łączy podobny związek jak odległość i przemieszczenie. Prędkość
       to wektor (zwykle wielowymiarowy), a szybkość to skalar (zawsze jeden wymiar).
       Co więcej, szybkość to długość wektora prędkości; nazywana jest te czasem wartością
       bezwzględną prędkości. Pamiętajmy o tym, e wektor posiada wartość, jak i kierunek.
       Gdy odrzucimy kierunek, pozostanie tylko wartość — szybkość.

       Poni ej przedstawiam sposób znajdowania szybkości z wektora prędkości.
           X  PGY 8GEVQT 
 
           U  XIGV.GPIVJ

           VTCEG 
U    Y[ YKGVNK 

       Podobnie jak wcześniej wywoływaliśmy metodę IGV.GPIVJ
 do znalezienia odległości
       z wektora przemieszczenia, tak teraz u ywamy tej samej metody do znalezienia modułu
       wektora prędkości — szybkości.


Przyspieszenie

       Przyspieszenie to stopień zmian prędkości. Poniewa prędkość to stopień zmian poło enia
       w czasie, mo emy powiedzieć, e przyspieszenie to podwójny stopień zmian poło enia.
       Prędkościomierz samochodu podaje szybkość w danym momencie czasu. Gdy samochód
       przyspiesza, wskaźnik prędkościomierza przechodzi na inną wartość. Im szybciej poru-
       sza się strzałka, tym większe przyspieszenie. Przyspieszenie to wartość wektorowa, więc
       posiada moduł i kierunek.

       Przyjrzyjmy się trzem skryptom, które obrazują wpływ przyspieszenia na dynamiczny
       ruch. W sposób podobny do trzech wcześniejszych przykładów dotyczących prędkości,
       sprawdzimy stałe, losowe i sterowane myszą przyspieszenie.


       Ruch ze stałym przyspieszeniem

       Poni szy kod wykonuje ruch ze stałym przyspieszeniem.
            TWEJ G UVC [O RT[URKGUGPKGO
           RQU  PGY 8GEVQT 
 
           XGN  PGY 8GEVQT
232   Część III   Dynamiczna grafika


        CEEGN  PGY 8GEVQT 
 
        VJKUQP'PVGT(TCOG  HWPEVKQP 
 ]
           XGNRNWU 
CEEGN
           RQURNWU 
XGN
           VJKUAZ  RQUZ
           VJKUA[  RQU[
        _

      Najpierw tworzymy trzy obiekty 8GEVQT reprezentujące poło enie, prędkość i przyspie-
      szenie. W procedurze obsługi QP'PVGT(TCOG
 dodajemy przyspieszenie do prędkości,
      a prędkość — do poło enia. Następnie renderujemy nową prędkość. To wszystko.

      Obiekt początkowo nie porusza się, ale później coraz szybciej pędzi na prawo. Mo emy
      zmodyfikować wartości początkowe wektorów RQU, XGN i CEEGN, aby uzyskać inną animację.
      Nic nie stoi na przeszkodzie, aby zdefiniować prędkość wskazującą w lewo, jak w poni -
      szym kodzie.
        XGN  PGY 8GEVQT 
  

      Spowoduje to początkowy ruch obiektu w lewo, ale po chwili obiekt zatrzyma się i zacznie
      poruszać się ze stałym przyspieszeniem w prawo.


      Ruch z losowym przyspieszeniem

      Nasz następny przykład wykonuje losowe przyspieszenie.
         TWEJ  NQUQY[O RT[URKGUGPKGO
        RQU  PGY 8GEVQT 
 
        XGN  PGY 8GEVQT 
 
        CEEGN PGY 8GEVQT 
 
        VJKUQP'PVGT(TCOG  HWPEVKQP 
 ]
           CEEGNTGUGV 
TCPFQO
  TCPFQO
 
           XGNRNWU 
CEEGN
           RQURNWU 
XGN
           VJKUAZ  RQUZ
           VJKUA[  RQU[
        _

      Kod jest podobny do przykładu z losową prędkością, ale teraz zmieniamy wartości
      CEEGNZ i CEEGN[ na losowe liczby z przedziału od –2 do 2. Skrypt tworzy chaotyczny
      ruch, ale wygląda on inaczej ni chaotyczny ruch dla prędkości.

         Przykład ten jest w zasadzie przykładem ruchów Browna, w którym to obiekt doświadcza
         losowych zmian sił (a co za tym idzie przyspieszenia) z różnych kierunków. Ruchom
         Browna przyjrzymy się dokładniej w rozdziale 11.


      Ruch z przyspieszeniem sterowanym myszą

      Pozostał jeszcze skrypt modyfikujący przyspieszenie na podstawie poło enia myszy.
         RT[URKGUGPKG UVGTQYCPG O[Uæ
        RQU  PGY 8GEVQT 
 
        XGN  PGY 8GEVQT
Rozdział 8.    Fizyka        233


         CEEGN  PGY 8GEVQT 
 
         VJKUQP'PVGT(TCOG  HWPEVKQP 
 ]
            CEEGNTGUGV 
VJKUAZOQWUG   VJKUA[OQWUG  
            XGNRNWU 
CEEGN
            RQURNWU 
XGN
            VJKUAZ  RQUZ
            VJKUA[  RQU[
         _



Siła
       Siła to po prostu ciągnięcie lub pchanie w określonym kierunku. Bez siły nic w fizycznym
       świecie nie mo e się z mienić, więc cały świat byłby się do bólu statyczny. Z pewnej
       perspektywy mo emy traktować ycie jako proces ciągłej zmiany materii.

       Pewnie ka dy słyszał o tym, e materia w zasadzie składa się pustej przestrzeni. Atom to
       jądro i orbitujące wokół niego elektrony. Elektrony od jądra dzieli znaczna odległość,
       porównywalna z odległościami występującymi w naszym układzie planetarnym. Jak więc
       obiekty będące w 99,9999% puste, powodują przesunięcie innych obiektów? A jak lina
       utrzymuje mój cię ar, skoro jej atomy nawet się nie dotykają? W rzeczywistości między
       elektronami atomów występuje siła elektromagnetyczna, dając wra enie „solidności”,
       do której jesteśmy przyzwyczajeni. Poza grawitacją wszystkie siły doznawane w naszym
       mikroskopijnym świecie, czyli tarcie, sprę ystość, magnetyzm, elektrostatyczność, to
       wynik siły elektromagnetycznej.

          Pozostałymi dwiema podstawowymi siłami w fizyce, poza grawitacją
          i elektromagnetyzmem, są słabe i silne siły wiązań atomowych. Ponieważ zachodzą
          one na poziomie atomów, nie odczuwamy ich bezpośrednio. Siły te są jednak bardzo
          ważne; gdyby ich nie było, uleglibyśmy natychmiastowej dematerializacji.

       Siła to wartość wektorowa z modułem i kierunkiem. Wpływa ona na ruch, zmieniając
       przyspieszenie. Odkrył to w XVII wieku Newton. Newton jest najbardziej znany z od-
       krycia grawitacji, ale jego trzy zasady dynamiki tak e zasługują na ogromne uznanie.


Pierwsze prawo dynamiki Newtona

       Jedną z podstawowych sił mechaniki jest przyspieszenie — zmiana prędkości — które nie
       powstaje samo z siebie. Jeśli zmienia się prędkość obiektu, musi pojawić się siła powo-
       dująca tę zmianę. O tym dokładnie mówi pierwsze prawo dynamiki Newtona.

          Je eli siły działające na punkt materialny równowa ą się, to w inercyjnym układzie
          odniesienia ciało porusza się ruchem jednostajnym lub spoczywa.

       Pierwsze prawo dynamiki nazywane jest te prawem inercji. Inercja to opór, jaki stawia
       obiekt w przypadku chęci zmiany jego prędkości. Skała stoi w miejscu, dopóki nie zadziała
       na nią niezrównowa ona siła. Podobnie dzieje się, jeśli skała porusza się, nie zwolni ani
       nie przyspieszy, gdy nie działa na nią tarcie czy grawitacja.
234    Część III   Dynamiczna grafika


       W kosmosie ciała prawie wcale nie doznają tarcia, więc mogą przebywać znaczne odle-
       głości bez większej utraty prędkości. W ten sposób mo emy wysyłać sondy do systemu
       słonecznego, by szpiegować inne planety. Bez inercji podró mierzona milionami kilo-
       metrów nie byłaby jeszcze mo liwa (wymagałaby ogromnej ilości paliwa).


Siła niezrównowa ona (siła wypadkowa)
       Pierwsze prawo dynamiki Newtona mówi o równowadze sił, a zmiana ruchu następuje
       tylko przy jej braku. Na ciało w tym samym czasie mo e działać wiele sił z ró nych
       kierunków. Na przykład w zabawie z przeciąganiem liny dwie dru yny ciągną linę w prze-
       ciwnych kierunkach. Jeśli obydwie dru yny stosują tę samą siłę, lina nie porusza się,
       poniewa przyło one do niej siły wzajemnie się znoszą. Gdy siła jest niezrównowa ona,
       lina przesunie się w kierunku silniejszej dru yny. Ró nica między dwiema siłami to siła
       wypadkowa.

       W systemie, w którym kilka sił działa na ciało, obliczamy siłę wypadkową, sumując
       wszystkie wektory sił. Jeśli siła wypadkowa wynosi zero, obiekt nie zmienia swojej pręd-
       kości. Gdy siła wypadkowa jest ró na od zera, obiekt przyspiesza w kierunku wskazy-
       wanym przez siłę wypadkową.

       W poni szym przykładzie zdefiniowaliśmy trzy siły, a następnie dodaliśmy je do siebie,
       by obliczyć siłę wypadkową.
          FGMNCTCELC YGMVQTÎY UK
         UKNC#  PGY 8GEVQT 
 
         UKNC$  PGY 8GEVQT 
  
         UKNC%  PGY 8GEVQT 
 
          UWOC UK
         UKNC9[RCFMQYC  PGY 8GEVQT 
 
         UKNC9[RCFMQYCRNWU 
UKNC#
         UKNC9[RCFMQYCRNWU 
UKNC$
         UKNC9[RCFMQYCRNWU 
UKNC%
         VTCEG 
UKNC9[RCFMQYC     =  ?

       W tym podejściu tworzymy zerowy wektor siły wypadkowej i dodajemy do niego po kolei
       trzy wektory sił składowych. Łączna wartość komponentu x wynosi –1 (2 – 3 + 0),
       a komponentu y — 3 (0 + 2 +1).

       Mo emy skrócić zapis, u ywając metody 8GEVQTRNWU0GY
, która w jednym kroku dodaje
       dwa wektory i zwraca sumę jako osobny obiekt.
          UWOC UK 
UMTÎV
         UKNC9[RCFMQYC  UKNC#RNWU0GY 
UKNC$
         UKNC9[RCFMQYCRNWU 
UKNC%
         VTCEG 
UKNC9[RCFMQYC    =  ?

       Wektor UKNC# dodajemy do UKNC$, a wynik przypisujemy do UKNC9[RCFMQYC. Aby zakończyć
       proces sumowania, dodajemy UKNC% do UKNC9[RCFMQYC.

          W przypadku gdy musimy dodać do siebie wiele sił, powiedzmy pięć i więcej, bardziej
          wydajne wydaje się zastosowanie własnej procedury dodawania zamiast 8GEVQTRNWU
.
          Procedura ta może przyjmować tablicę wektorów, przechodzić przez nią w pętli i dodawać
          komponenty x oraz y do osobnych zmiennych. Na końcu wystarczy wpisać komponenty
          do nowego wektora i zwrócić go.
Rozdział 8.     Fizyka         235


Drugie prawo dynamiki Newtona

      Z pierwszego prawa dynamiki wnioskujemy, e siła wypadkowa powoduje przyspieszenie
      ruchu obiektu. Wiemy te , jak policzyć siłę wypadkową dla obiektu, dodając siły składowe.
      Nie wiemy jednak, jakie przyspieszenie spowoduje konkretna siła — jaki jest między
      tymi wektorami związek? Doświadczenie podpowiada, e popchniecie lekkiego i cię -
      kiego ciała z tą samą siłą powoduje szybsze poruszanie się l ejszego obiektu. Wygląda
      na to, e masa ciała ma wpływ na przyspieszenie.

      Drugie prawo dynamiki Newtona opisuje związek między siłą, masą i przyspieszeniem.

         Przyspieszenie powodowane przez siłę wypadkową jest wprost proporcjonalne
         do modułu siły wypadkowej, a odwrotnie proporcjonalne do masy ciała.
         Kierunek przyspieszenia i siły jest taki sam.

      Mo emy powiedzieć, e im większa siła wypadkowa, tym większe przyspieszenie, a im
      większa masa, tym mniejsze przyspieszenie.

      Drugie prawo dynamiki mo na wyrazić za pomocą poni szego wzoru matematycznego.
                                                f = ma

      Tutaj a to przyspieszenie obiektu, f to działająca niego siła, a m to masa obiektu. Równanie
      to jest często przekształcane do postaci:
                                               a= f m

      Dzięki tej postaci potrafimy obliczyć przyspieszenie, gdy znamy przyło oną siłę oraz masę
      obiektu. Wystarczy tylko podzielić siłę przez masę. Przypuśćmy, e siła wypadkowa
      wynosi [8, 0] (moduł równy osiem i kierunek w prawo), a masa równa jest 2. Przyspie-
      szenie policzymy w następujący sposób.
                                                f = [8,0]
                                                m=2
                                               a= f m
                                              a = [8,0] 2
                                               a = [4,0]

      Uzyskaliśmy wektor przyspieszenia o wartości [4, 0] — jego kierunek jest jak przypusz-
      czaliśmy taki sam jak działającej siły.

      Załó my teraz, e stosujemy tę samą siłę [8, 0] dla cię szego obiektu, na przykład o masie
      wynoszącej 4. Przyspieszenie będzie wynosiło:
                                                f = [8,0 ]
                                                m=4
                                               a= f m
236    Część III   Dynamiczna grafika


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

       Przyspieszenie cię szego obiektu wyniesie [2, 0] — połowę przyspieszenia l ejszego
       obiektu. Teraz bardzo łatwo zauwa yć związek między masą i przyspieszeniem. Gdy
       masa wzrasta dwa razy, przyspieszenie zmniejsza się dwukrotnie.


Ruch we Flashu sterowany siłą

       Aby uzyskać we Flashu wiarygodny, dynamiczny ruch bazujący na siłach, musimy mieć
       siłę i na jej podstawie automatycznie obliczać nowe poło enie obiektu. By wykonać to
       zadanie, skorzystamy z poznanych do tej pory wiadomości na temat prędkości, przyspie-
       szenia itp. Oto krótkie przypomnienie. Siły działające na obiekt sumujemy, by uzyskać
       siłę wypadkową. Z siły wypadkowej obliczamy przyspieszenie. Przyspieszenie zmienia
       prędkość poruszania się obiektu. Prędkość wpływa na poło enie. Kolejność jest nastę-
       pująca: siły → siła wypadkowa → przyspieszenie → prędkość → poło enie.

       W ActionScript implementacja tego procesu to sześć oddzielnych kroków.
        1. Obliczamy siły działające na obiekt.
          Wektory sił mo emy policzyć dowolną metodą. W dalszej części rozdziału dowiemy się,
          jak obliczać siły, takie jak grawitacja czy sprę ystość. Na razie w tym kroku
          po prostu je zdefiniujemy.
              FGHKPKELG UK
             UKNC#  PGY 8GEVQT 
 
             UKNC$  PGY 8GEVQT 
 

        2. Dodajemy siły, by obliczyć siłę wypadkową.
          We wcześniejszej części rozdziału przedstawiłem skrótowy sposób obliczania siły
          wypadkowej.
              PCLFQYCPKG UK [ Y[RCFMQYGL
             UKNC9[RCFMQYC  UKNC#RNWU0GY 
UKNC$

        3. Znajdujemy przyspieszenie dla siły.
          Pamiętamy równanie na przyspieszenie:
                                                  a= f m
          W ActionScript dzielimy wektor siły wypadkowej przez masę obiektu.
              PCLFWLGO[ RT[URKGUGPKG
              OCUC QUVC C FGHKPKQYCPC YEG PKGL
             RT[UR  UKNC9[RCFMQYCUECNG0GY 
  OCUC

          Czasem masa poruszającego się obiektu nie ma wpływu na animację. Mo emy więc
          zignorować masę i zało yć, e ma ona wartość jednostkową. W takim przypadku
          równanie na przyspieszenie upraszcza się.
                                                  a= f m
                                                   m =1
Rozdział 8.   Fizyka         237


                                               a= f 1
                                                a= f
           Gdy masa wynosi 1, przyspieszenie jest równe sile wypadkowej. Z tego powodu
           w ActionScript mo emy napisać następujące wiersze.
              PCLFWLGO[ RT[URKGUGPKG
             RT[UR  UKNC9[RCFMQYC

           W większości tworzonych animacji masa nie jest istotna, więc zakładam, e ma
           wartość 1 i pomijam krok 3.
         4. Dodajemy przyspieszenie do prędkości.
           Wektor przyspieszenia modyfikuje wektor prędkości.
              PCLFWLGO[ PQYæ RTúFMQ è
              RT QUVC C FGHKPKQYCPC YEG PKGL
             RTRNWU 
RT[UR

         5. Dodajemy prędkość do poło enia.
           Ten krok jest podobny do poprzedniego, ale tym razem modyfikujemy poło enie.
              PCLFWLGO[ PQYG RQ Q GPKG
              RQN QUVC C FGHKPKQYCPC YEG PKGL
             RQNRNWU 
RT

         6. Umieszczamy obiekt w nowym poło eniu.
           Ogólnie oznacza to ustawienie właściwości AZ i A[ klipu filmowego na komponenty
           x i y wektora poło enia.
              CMVWCNKCELC RQ Q GPKC MNKRW HKNOQYGIQ
             OEAZ  RQNZ
             OEA[  RQN[

           Wspomniałem ju w rozdziale 3., e czasem preferuję tradycyjne współrzędne
           kartezjańskie, a nie współrzędne ekranu Flasha. Obracam więc oś y, mno ąc
           komponent dla tej osi przez –1.
              W [EKG YURÎ TúFP[EJ MCTVGLC UMKEJ
             OEAZ  RQNZ
             OEA[  RQN[

     Powy sze 6. kroków to ogólna procedura generowania dynamicznego ruchu na podstawie
     sił. Do tej pory poruszaliśmy się w idealnym wszechświecie — nie istniał aden opór.
     Aby urealnić ruch, musimy wziąć pod uwagę tarcie.


Tarcie
     Tarcie to reakcja na ruch — siła działająca w odwrotnym kierunku ni ruch obiektu. Gdy
     próbujemy przesunąć sofę po podłodze, dywan rywalizuje z nami za pomocą siły tarcia.
     Gdy nasza siła przewy szy tarcie, uzyskamy siłę wypadkową zdolną przesunąć sofę.
238    Część III   Dynamiczna grafika


       Pamiętajmy o tym, e tarcie to siła przeciwdziałająca. Nie powoduje spontanicznego
       przesuwania się obiektów — tarcie pojawia się tylko w odpowiedzi na ruch. Gdy sofa
       stoi w miejscu, nie działa na nią adne tarcie. Gdy próbujemy ją poruszyć, siła tarcia
       przeciwdziała ruchowi. Kiedy dwa ciała stałe są ze sobą złączone, pojawiają się dwa
       główne rodzaje tarcia: statyczne i kinetyczne.


Tarcie kinetyczne

       Tarcie kinetyczne nazywane jest tak e tarciem ślizgowym. Gdy krą ek hokejowy pędzi
       po lodzie, siła tarcia cały czas go zwalnia. Stopień tej siły jest zwykle stały. Oznacza to,
        e spowalnianie krą ka tak e jest stałe. Wykres spowolnienia przypomina spowolnienie
       kwadratowe.

       Wartość tarcia zale y od tego, jaka jest siła prostopadła (nazywana te siłą normalną)
       do powierzchni, po której się przesuwamy. Na tym samym lodzie cię szy obiekt będzie
       miał większe tarcie ni obiekt lekki, poniewa działa na niego większa siła grawitacji.

       Oto wzór na tarcie kinetyczne w jego typowej postaci.
                                                fk = µ k N

       W tym równaniu fk to siła tarcia kinetycznego, µk to współczynnik tarcia, a N to moduł
       z siły normalnej łączącej obydwa ciała. Wartość µk (µ wymawiamy jak „mi”) znajduje się
       typowo w przedziale od 0 do 1. Im wy sza wartość współczynnika, tym większe tarcie dla
       danej siły dociskającej.

       Jeśli chcemy u ywać tarcia kinetycznego w animacji Flasha, która nie jest symulacją
       fizyczną, lepiej od razu przypisać wartość tarcia do fk i nie przejmować się współczyn-
       nikiem ani siłą dociskającą (normalną). Mo na nawet od razu wyliczyć przyspieszenie
       tarcia, a nie siłę tarcia. Poprawny, ale dłu szy sposób polega na znalezieniu wartości siły
       tarcia, a następnie — na wyliczeniu przyspieszenia ze wzoru f = ma. Oto przykładowe
       obliczenia dla tej metody.
                                                 f k = 10
                                                a= f m
                                                  m=5
                                                a = 10 5
                                                  a=2

       Mo emy zało yć, e przyspieszenie tarcia będzie stałe (nie będzie zale eć od masy
       obiektu), więc przypiszemy wartość przyspieszenia na stałe.
                                                  a=2

       Gdy mamy przyspieszenie powodowane przez tarcie kinetyczne, proces jego implementacji
       nie nale y do najprostszych (przynajmniej w porównaniu z uproszczonym tarciem płynów,
       którym zajmiemy się za chwilę). Poni szy kod ActionScript wykonuje obliczenia dla tar-
       cia kinetycznego.
Flash MX. Programowanie
Flash MX. Programowanie
Flash MX. Programowanie
Flash MX. Programowanie
Flash MX. Programowanie
Flash MX. Programowanie
Flash MX. Programowanie
Flash MX. Programowanie
Flash MX. Programowanie
Flash MX. Programowanie
Flash MX. Programowanie
Flash MX. Programowanie
Flash MX. Programowanie
Flash MX. Programowanie
Flash MX. Programowanie
Flash MX. Programowanie
Flash MX. Programowanie
Flash MX. Programowanie

More Related Content

What's hot

3ds max 5. Ćwiczenia praktyczne
3ds max 5. Ćwiczenia praktyczne3ds max 5. Ćwiczenia praktyczne
3ds max 5. Ćwiczenia praktyczneWydawnictwo Helion
 
Photoshop CS. Ćwiczenia praktyczne
Photoshop CS. Ćwiczenia praktycznePhotoshop CS. Ćwiczenia praktyczne
Photoshop CS. Ćwiczenia praktyczneWydawnictwo Helion
 
Macromedia Flash 8 ActionScript. Oficjalny podręcznik
Macromedia Flash 8 ActionScript. Oficjalny podręcznikMacromedia Flash 8 ActionScript. Oficjalny podręcznik
Macromedia Flash 8 ActionScript. Oficjalny podręcznikWydawnictwo Helion
 
CSS. Antologia. 101 wskazówek i trików
CSS. Antologia. 101 wskazówek i trikówCSS. Antologia. 101 wskazówek i trików
CSS. Antologia. 101 wskazówek i trikówWydawnictwo Helion
 
100 sposobów na fotografię cyfrową
100 sposobów na fotografię cyfrową100 sposobów na fotografię cyfrową
100 sposobów na fotografię cyfrowąWydawnictwo Helion
 
JavaScript dla każdego. Wydanie IV
JavaScript dla każdego. Wydanie IVJavaScript dla każdego. Wydanie IV
JavaScript dla każdego. Wydanie IVWydawnictwo Helion
 
Real World Adobe Photoshop CS2. Edycja polska
Real World Adobe Photoshop CS2. Edycja polskaReal World Adobe Photoshop CS2. Edycja polska
Real World Adobe Photoshop CS2. Edycja polskaWydawnictwo Helion
 
Flash CS3 Professional PL. Techniki zaawansowane. Klatka po klatce
Flash CS3 Professional PL. Techniki zaawansowane. Klatka po klatceFlash CS3 Professional PL. Techniki zaawansowane. Klatka po klatce
Flash CS3 Professional PL. Techniki zaawansowane. Klatka po klatceWydawnictwo Helion
 

What's hot (11)

3ds Max 8. Biblia
3ds Max 8. Biblia3ds Max 8. Biblia
3ds Max 8. Biblia
 
ABC grafiki komputerowej
ABC grafiki komputerowejABC grafiki komputerowej
ABC grafiki komputerowej
 
3ds max 5. Ćwiczenia praktyczne
3ds max 5. Ćwiczenia praktyczne3ds max 5. Ćwiczenia praktyczne
3ds max 5. Ćwiczenia praktyczne
 
Photoshop CS. Ćwiczenia praktyczne
Photoshop CS. Ćwiczenia praktycznePhotoshop CS. Ćwiczenia praktyczne
Photoshop CS. Ćwiczenia praktyczne
 
Macromedia Flash 8 ActionScript. Oficjalny podręcznik
Macromedia Flash 8 ActionScript. Oficjalny podręcznikMacromedia Flash 8 ActionScript. Oficjalny podręcznik
Macromedia Flash 8 ActionScript. Oficjalny podręcznik
 
Po prostu Flash MX
Po prostu Flash MXPo prostu Flash MX
Po prostu Flash MX
 
CSS. Antologia. 101 wskazówek i trików
CSS. Antologia. 101 wskazówek i trikówCSS. Antologia. 101 wskazówek i trików
CSS. Antologia. 101 wskazówek i trików
 
100 sposobów na fotografię cyfrową
100 sposobów na fotografię cyfrową100 sposobów na fotografię cyfrową
100 sposobów na fotografię cyfrową
 
JavaScript dla każdego. Wydanie IV
JavaScript dla każdego. Wydanie IVJavaScript dla każdego. Wydanie IV
JavaScript dla każdego. Wydanie IV
 
Real World Adobe Photoshop CS2. Edycja polska
Real World Adobe Photoshop CS2. Edycja polskaReal World Adobe Photoshop CS2. Edycja polska
Real World Adobe Photoshop CS2. Edycja polska
 
Flash CS3 Professional PL. Techniki zaawansowane. Klatka po klatce
Flash CS3 Professional PL. Techniki zaawansowane. Klatka po klatceFlash CS3 Professional PL. Techniki zaawansowane. Klatka po klatce
Flash CS3 Professional PL. Techniki zaawansowane. Klatka po klatce
 

Viewers also liked

Programowanie w języku C. FAQ
Programowanie w języku C. FAQProgramowanie w języku C. FAQ
Programowanie w języku C. FAQWydawnictwo Helion
 
Rozbudowa i naprawa komputera. Kompendium. Wydanie drugie
Rozbudowa i naprawa komputera. Kompendium. Wydanie drugieRozbudowa i naprawa komputera. Kompendium. Wydanie drugie
Rozbudowa i naprawa komputera. Kompendium. Wydanie drugieWydawnictwo Helion
 
Head First Servlets & JSP. Edycja polska
Head First Servlets & JSP. Edycja polskaHead First Servlets & JSP. Edycja polska
Head First Servlets & JSP. Edycja polskaWydawnictwo Helion
 
Delphi 2005. Kompendium programisty
Delphi 2005. Kompendium programistyDelphi 2005. Kompendium programisty
Delphi 2005. Kompendium programistyWydawnictwo Helion
 
Asembler. Podręcznik programisty
Asembler. Podręcznik programistyAsembler. Podręcznik programisty
Asembler. Podręcznik programistyWydawnictwo Helion
 
Wireless Hacking. Edycja polska
Wireless Hacking. Edycja polskaWireless Hacking. Edycja polska
Wireless Hacking. Edycja polskaWydawnictwo Helion
 
Windows Server 2008. Infrastruktura klucza publicznego (PKI)
Windows Server 2008. Infrastruktura klucza publicznego (PKI)Windows Server 2008. Infrastruktura klucza publicznego (PKI)
Windows Server 2008. Infrastruktura klucza publicznego (PKI)Wydawnictwo Helion
 
Wyciśnij maksimum z Twojego komputera
Wyciśnij maksimum z Twojego komputeraWyciśnij maksimum z Twojego komputera
Wyciśnij maksimum z Twojego komputeraWydawnictwo Helion
 
Rozbudowa i naprawa komputerów PC. Wydanie XVI
Rozbudowa i naprawa komputerów PC. Wydanie XVIRozbudowa i naprawa komputerów PC. Wydanie XVI
Rozbudowa i naprawa komputerów PC. Wydanie XVIWydawnictwo Helion
 
Wyrażenia regularne. Leksykon kieszonkowy
Wyrażenia regularne. Leksykon kieszonkowyWyrażenia regularne. Leksykon kieszonkowy
Wyrażenia regularne. Leksykon kieszonkowyWydawnictwo Helion
 

Viewers also liked (13)

Programowanie w języku C. FAQ
Programowanie w języku C. FAQProgramowanie w języku C. FAQ
Programowanie w języku C. FAQ
 
Rozbudowa i naprawa komputera. Kompendium. Wydanie drugie
Rozbudowa i naprawa komputera. Kompendium. Wydanie drugieRozbudowa i naprawa komputera. Kompendium. Wydanie drugie
Rozbudowa i naprawa komputera. Kompendium. Wydanie drugie
 
Head First Servlets & JSP. Edycja polska
Head First Servlets & JSP. Edycja polskaHead First Servlets & JSP. Edycja polska
Head First Servlets & JSP. Edycja polska
 
Delphi 2005. Kompendium programisty
Delphi 2005. Kompendium programistyDelphi 2005. Kompendium programisty
Delphi 2005. Kompendium programisty
 
Asembler. Podręcznik programisty
Asembler. Podręcznik programistyAsembler. Podręcznik programisty
Asembler. Podręcznik programisty
 
Wireless Hacking. Edycja polska
Wireless Hacking. Edycja polskaWireless Hacking. Edycja polska
Wireless Hacking. Edycja polska
 
C. Leksykon kieszonkowy
C. Leksykon kieszonkowyC. Leksykon kieszonkowy
C. Leksykon kieszonkowy
 
Windows Server 2008. Infrastruktura klucza publicznego (PKI)
Windows Server 2008. Infrastruktura klucza publicznego (PKI)Windows Server 2008. Infrastruktura klucza publicznego (PKI)
Windows Server 2008. Infrastruktura klucza publicznego (PKI)
 
Wyciśnij maksimum z Twojego komputera
Wyciśnij maksimum z Twojego komputeraWyciśnij maksimum z Twojego komputera
Wyciśnij maksimum z Twojego komputera
 
Access. Programowanie w VBA
Access. Programowanie w VBAAccess. Programowanie w VBA
Access. Programowanie w VBA
 
Rozbudowa i naprawa komputerów PC. Wydanie XVI
Rozbudowa i naprawa komputerów PC. Wydanie XVIRozbudowa i naprawa komputerów PC. Wydanie XVI
Rozbudowa i naprawa komputerów PC. Wydanie XVI
 
Wyrażenia regularne. Leksykon kieszonkowy
Wyrażenia regularne. Leksykon kieszonkowyWyrażenia regularne. Leksykon kieszonkowy
Wyrażenia regularne. Leksykon kieszonkowy
 
UML dla każdego
UML dla każdegoUML dla każdego
UML dla każdego
 

Similar to Flash MX. Programowanie

Flash MX. Vademecum profesjonalisty
Flash MX. Vademecum profesjonalistyFlash MX. Vademecum profesjonalisty
Flash MX. Vademecum profesjonalistyWydawnictwo Helion
 
Macromedia Flash MX 2004. Oficjalny podręcznik
Macromedia Flash MX 2004. Oficjalny podręcznikMacromedia Flash MX 2004. Oficjalny podręcznik
Macromedia Flash MX 2004. Oficjalny podręcznikWydawnictwo Helion
 
Flash MX 2004 ActionScript. Ćwiczenia praktyczne
Flash MX 2004 ActionScript. Ćwiczenia praktyczneFlash MX 2004 ActionScript. Ćwiczenia praktyczne
Flash MX 2004 ActionScript. Ćwiczenia praktyczneWydawnictwo Helion
 
Macromedia Flash MX 2004. Sztuka projektowania
Macromedia Flash MX 2004. Sztuka projektowaniaMacromedia Flash MX 2004. Sztuka projektowania
Macromedia Flash MX 2004. Sztuka projektowaniaWydawnictwo Helion
 
Flash 8. Techniki zaawansowane. Klatka po klatce
Flash 8. Techniki zaawansowane. Klatka po klatceFlash 8. Techniki zaawansowane. Klatka po klatce
Flash 8. Techniki zaawansowane. Klatka po klatceWydawnictwo Helion
 
Macromedia Flash MX 2004 ActionScript. Oficjalny podręcznik
Macromedia Flash MX 2004 ActionScript. Oficjalny podręcznikMacromedia Flash MX 2004 ActionScript. Oficjalny podręcznik
Macromedia Flash MX 2004 ActionScript. Oficjalny podręcznikWydawnictwo Helion
 
Flash MX. ActionScript. Leksykon kieszonkowy
Flash MX. ActionScript. Leksykon kieszonkowyFlash MX. ActionScript. Leksykon kieszonkowy
Flash MX. ActionScript. Leksykon kieszonkowyWydawnictwo Helion
 
Macromedia Flash 8. Oficjalny podręcznik
Macromedia Flash 8. Oficjalny podręcznikMacromedia Flash 8. Oficjalny podręcznik
Macromedia Flash 8. Oficjalny podręcznikWydawnictwo Helion
 
Język Cg. Programowanie grafiki w czasie rzeczywistym
Język Cg. Programowanie grafiki w czasie rzeczywistymJęzyk Cg. Programowanie grafiki w czasie rzeczywistym
Język Cg. Programowanie grafiki w czasie rzeczywistymWydawnictwo Helion
 
3ds max 5. Projekty i rozwiązania
3ds max 5. Projekty i rozwiązania3ds max 5. Projekty i rozwiązania
3ds max 5. Projekty i rozwiązaniaWydawnictwo Helion
 
Flash CS3 Professional PL. Klatka po klatce
Flash CS3 Professional PL. Klatka po klatceFlash CS3 Professional PL. Klatka po klatce
Flash CS3 Professional PL. Klatka po klatceWydawnictwo Helion
 
C++ Builder. Symulacje komputerowe
C++ Builder. Symulacje komputeroweC++ Builder. Symulacje komputerowe
C++ Builder. Symulacje komputeroweWydawnictwo Helion
 
DirectX. Rendering w czasie rzeczywistym
DirectX. Rendering w czasie rzeczywistymDirectX. Rendering w czasie rzeczywistym
DirectX. Rendering w czasie rzeczywistymWydawnictwo Helion
 

Similar to Flash MX. Programowanie (20)

Flash MX 2004. Biblia
Flash MX 2004. BibliaFlash MX 2004. Biblia
Flash MX 2004. Biblia
 
Flash MX. Vademecum profesjonalisty
Flash MX. Vademecum profesjonalistyFlash MX. Vademecum profesjonalisty
Flash MX. Vademecum profesjonalisty
 
Macromedia Flash MX 2004. Oficjalny podręcznik
Macromedia Flash MX 2004. Oficjalny podręcznikMacromedia Flash MX 2004. Oficjalny podręcznik
Macromedia Flash MX 2004. Oficjalny podręcznik
 
Flash MX 2004 ActionScript. Ćwiczenia praktyczne
Flash MX 2004 ActionScript. Ćwiczenia praktyczneFlash MX 2004 ActionScript. Ćwiczenia praktyczne
Flash MX 2004 ActionScript. Ćwiczenia praktyczne
 
Macromedia Flash MX 2004. Sztuka projektowania
Macromedia Flash MX 2004. Sztuka projektowaniaMacromedia Flash MX 2004. Sztuka projektowania
Macromedia Flash MX 2004. Sztuka projektowania
 
Flash 8. Techniki zaawansowane. Klatka po klatce
Flash 8. Techniki zaawansowane. Klatka po klatceFlash 8. Techniki zaawansowane. Klatka po klatce
Flash 8. Techniki zaawansowane. Klatka po klatce
 
Macromedia Flash MX 2004 ActionScript. Oficjalny podręcznik
Macromedia Flash MX 2004 ActionScript. Oficjalny podręcznikMacromedia Flash MX 2004 ActionScript. Oficjalny podręcznik
Macromedia Flash MX 2004 ActionScript. Oficjalny podręcznik
 
Flash MX. ActionScript. Leksykon kieszonkowy
Flash MX. ActionScript. Leksykon kieszonkowyFlash MX. ActionScript. Leksykon kieszonkowy
Flash MX. ActionScript. Leksykon kieszonkowy
 
Macromedia Flash 8. Oficjalny podręcznik
Macromedia Flash 8. Oficjalny podręcznikMacromedia Flash 8. Oficjalny podręcznik
Macromedia Flash 8. Oficjalny podręcznik
 
ActionScript 2.0. Od podstaw
ActionScript 2.0. Od podstawActionScript 2.0. Od podstaw
ActionScript 2.0. Od podstaw
 
Język Cg. Programowanie grafiki w czasie rzeczywistym
Język Cg. Programowanie grafiki w czasie rzeczywistymJęzyk Cg. Programowanie grafiki w czasie rzeczywistym
Język Cg. Programowanie grafiki w czasie rzeczywistym
 
ActionScript. Receptury
ActionScript. RecepturyActionScript. Receptury
ActionScript. Receptury
 
3ds max 5. Projekty i rozwiązania
3ds max 5. Projekty i rozwiązania3ds max 5. Projekty i rozwiązania
3ds max 5. Projekty i rozwiązania
 
Flash CS3 Professional PL. Klatka po klatce
Flash CS3 Professional PL. Klatka po klatceFlash CS3 Professional PL. Klatka po klatce
Flash CS3 Professional PL. Klatka po klatce
 
Pajączek 5 NxG
Pajączek  5 NxGPajączek  5 NxG
Pajączek 5 NxG
 
Po prostu 3ds max 5
Po prostu 3ds max 5Po prostu 3ds max 5
Po prostu 3ds max 5
 
Po prostu Flash MX
Po prostu Flash MXPo prostu Flash MX
Po prostu Flash MX
 
Po prostu Flash MX
Po prostu Flash MXPo prostu Flash MX
Po prostu Flash MX
 
C++ Builder. Symulacje komputerowe
C++ Builder. Symulacje komputeroweC++ Builder. Symulacje komputerowe
C++ Builder. Symulacje komputerowe
 
DirectX. Rendering w czasie rzeczywistym
DirectX. Rendering w czasie rzeczywistymDirectX. Rendering w czasie rzeczywistym
DirectX. Rendering w czasie rzeczywistym
 

More from Wydawnictwo Helion

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyWydawnictwo Helion
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikWydawnictwo Helion
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczneWydawnictwo Helion
 
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieE-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieWydawnictwo Helion
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsWydawnictwo Helion
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IIWydawnictwo Helion
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuWydawnictwo Helion
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIWydawnictwo Helion
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningWydawnictwo Helion
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykWydawnictwo Helion
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaWydawnictwo Helion
 

More from Wydawnictwo Helion (20)

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. Projekty
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnik
 
Access w biurze i nie tylko
Access w biurze i nie tylkoAccess w biurze i nie tylko
Access w biurze i nie tylko
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
 
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieE-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółu
 
Windows PowerShell. Podstawy
Windows PowerShell. PodstawyWindows PowerShell. Podstawy
Windows PowerShell. Podstawy
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie II
 
JavaScript. Pierwsze starcie
JavaScript. Pierwsze starcieJavaScript. Pierwsze starcie
JavaScript. Pierwsze starcie
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny trening
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktyk
 
Excel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktykExcel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktyk
 
Access 2007 PL. Seria praktyk
Access 2007 PL. Seria praktykAccess 2007 PL. Seria praktyk
Access 2007 PL. Seria praktyk
 
Word 2007 PL. Seria praktyk
Word 2007 PL. Seria praktykWord 2007 PL. Seria praktyk
Word 2007 PL. Seria praktyk
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacja
 
AutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PLAutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PL
 
Bazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcieBazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcie
 
Inventor. Pierwsze kroki
Inventor. Pierwsze krokiInventor. Pierwsze kroki
Inventor. Pierwsze kroki
 

Flash MX. Programowanie

  • 1. IDZ DO PRZYK£ADOWY ROZDZIA£ SPIS TRE CI Flash MX. Programowanie KATALOG KSI¥¯EK Autor: Robert Penner KATALOG ONLINE T³umaczenie: Marek Binkowski, Rafa³ Joñca ISBN: 83-7361-085-5 ZAMÓW DRUKOWANY KATALOG Tytu³ orygina³u: Robert Penner's Programming Macromedia Flash MX Format: B5, stron: 400 TWÓJ KOSZYK Przyk³ady na ftp: 545 kB DODAJ DO KOSZYKA Robert Penner — ekspert i innowator w dziedzinie jêzyka ActionScript — dzieli siê swoj¹ wiedz¹ na temat programowania Macromedia Flash. Penner przybli¿a tajniki ³¹czenia z³o¿onej matematyki i fizyki z atrakcyjn¹ i estetyczn¹ grafik¹ Flasha. Dziêki ksi¹¿ce CENNIK I INFORMACJE „Flash MX. Programowanie” poznasz podstawowe zagadnienia zwi¹zane z przestrzeni¹, matematyk¹, kolorem, ruchem i kszta³tem, a nastêpnie dowiesz siê, jak wykorzystaæ tê ZAMÓW INFORMACJE teoriê do generowania nieprzeciêtnych animacji. Przekonasz siê, jak wspaniale mo¿esz za O NOWO CIACH pomoc¹ ActionScriptu symulowaæ zjawiska atmosferyczne takie jak tornado, nie¿yca czy zorza polarna. ZAMÓW CENNIK Ksi¹¿ka omawia szeroki zakres zagadnieñ -- od projektowania i mechaniki ruchu po tajniki pisania poprawnego, zorientowanego obiektowo kodu; s³u¿y tak¿e pomoc¹ w tworzeniu kolorów, d wiêku, ruchu i interakcji. CZYTELNIA • Wyja nienie podstaw matematyki w kontek cie programu Flash • Tworzenie skomplikowanych animacji oraz prostego ruchu i efektów typu „rollover” FRAGMENTY KSI¥¯EK ONLINE • Prezentacja mo¿liwo ci obiektowych jêzyka ActionScript • Tworzenie ³atwych do modyfikacji interfejsów wielokrotnego u¿ytku • Tworzenie obiektów trójwymiarowych • Dok³adne wyja nienie procesu tworzenia kilku przyk³adowych animacji: nie¿ycy, fraktalnego tancerza i zorzy polarnej • Projektowanie i generowanie dynamicznej animacji za pomoc¹ jêzyka ActionScript • Tworzenie grafiki — od prostych schematów po z³o¿one filmy. Po³¹czenie odwiecznych praw fizyki i matematyki z nowoczesn¹ technologi¹ Flasha MX sprawi, ¿e bêdziesz w stanie tworzyæ niezwyk³e animacje. Poznaj granice w³asnej wyobra ni z ksi¹¿k¹ „Flash MX. Programowanie”! Robert Penner to niezale¿ny twórca filmów w programie Macromedia Flash, konsultant, Wydawnictwo Helion pisarz i wyk³adowca. Na ca³ym wiecie znany jest z innowacyjnych pomys³ów i animacji ul. Chopina 6 odtwarzaj¹cych piêkno natury. Jego biografiê artystyczn¹ i efekty eksperymentów mo¿na 44-100 Gliwice znale æ na witrynie http://robertpenner.com tel. (32)230-98-63 e-mail: helion@helion.pl
  • 2. Spis treści O Autorze........................................................................................................... 17 Wprowadzenie ................................................................................................... 19 Co omawia ta ksią ka? (opisy części i rozdziałów)..............................................................19 Jak czytać tę ksią kę?............................................................................................................21 Pliki z przykładami................................................................................................................21 Część I Początek procesu .......................................................................23 Rozdział 1. Jak poznałem 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 Rozwój przez ćwiczenie ...................................................................................................... 33 Przykład: nauka skrótów klawiszowych ................................................................................ 34 Społeczność...........................................................................................................................35 Uczenie się przez nauczanie innych ...................................................................................... 36 Udostępnianie kodu źródłowego........................................................................................... 37 Proces iteracyjny ...................................................................................................................38 Nauka jest okrągła .............................................................................................................. 38 Ustalanie priorytetów .......................................................................................................... 39 Tworzenie z myślą o przyszłości .......................................................................................... 40 Układ ksią ki.........................................................................................................................41 Rozdział 2. Programowanie zorientowane obiektowo......................................... 43 Istota programowania............................................................................................................43 Pamięć i zmienne................................................................................................................ 44 Umiejętności i funkcje......................................................................................................... 44 Obiekty: pamięć i umiejętności ............................................................................................ 45 Właściwości i metody ......................................................................................................... 45
  • 3. 6 Flash MX. Programowanie Klasy......................................................................................................................................47 Wbudowane klasy i obiekty Flasha....................................................................................... 47 Konstruktory klas ............................................................................................................... 49 Klonowanie klas wizualnych................................................................................................ 51 Właściwość prototype ......................................................................................................... 51 Dodawanie metod do klas.................................................................................................... 53 Zastępowanie wbudowanych metod ..................................................................................... 54 Rozszerzanie mo liwości obiektów statycznych .................................................................... 54 Klasyczne pojęcia z dziedziny OOP .....................................................................................55 Abstrakcja.......................................................................................................................... 55 Separacja ........................................................................................................................... 56 Polimorfizm ....................................................................................................................... 59 Tworzenie własnej klasy .......................................................................................................59 Analiza...................................................................................................................................60 Lista zadań......................................................................................................................... 60 Scenariusze poszczególnych zadań ....................................................................................... 61 Projektowanie........................................................................................................................62 Dobór właściwości.............................................................................................................. 63 Dobór metod ...................................................................................................................... 63 Relacje między obiektami.................................................................................................... 64 Diagramy klas .................................................................................................................... 65 Tworzenie klas w języku ActionScript .................................................................................66 Konstruktor klasy PhotoAlbum ............................................................................................ 66 Metoda showPhotoAt() ....................................................................................................... 68 Metoda next()..................................................................................................................... 69 Metoda prev() .................................................................................................................... 70 Klasa PhotoAlbum w akcji................................................................................................... 71 Dziedziczenie klas.................................................................................................................72 Dziedziczenie właściwości a dziedziczenie metod.................................................................. 72 Dziedziczenie właściwości za pomocą funkcji super()............................................................ 73 Dziedziczenie metod ........................................................................................................... 74 Obiekt super....................................................................................................................... 74 Dziedziczenie metod za pomocą słowa kluczowego new ........................................................ 75 Dziedziczenie metod przy u yciu właściwości __proto__ ....................................................... 76 Rozwiązanie korzystające z właściwości __constructor__....................................................... 76 Metoda superCon() ............................................................................................................. 78 Wnioski .................................................................................................................................79 Część II Podstawowe pojęcia .................................................................81 Rozdział 3. Matematyka część I: trygonometria i układy współrzędnych........... 83 Trygonometria.......................................................................................................................84 Trójkąt prostokątny............................................................................................................. 84 Twierdzenie Pitagorasa........................................................................................................ 84 Odległość między dwoma punktami ..................................................................................... 85 Kąty w trójkątach prostokątnych .......................................................................................... 86 Sinus ................................................................................................................................. 88 Kosinus.............................................................................................................................. 91 Tangens ............................................................................................................................. 93 Arcus tangens ..................................................................................................................... 94
  • 4. Spis treści 7 Arcus kosinus ..................................................................................................................... 96 Arcus sinus......................................................................................................................... 97 Układy współrzędnych..........................................................................................................98 Kartezjański układ współrzędnych........................................................................................ 98 Układ współrzędnych Flasha................................................................................................ 99 Współrzędne biegunowe.................................................................................................... 102 Wnioski ...............................................................................................................................107 Rozdział 4. Matematyka część II: wektory w dwóch 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 wektorów..........................................................................................................114 Metoda Vector.plus() ........................................................................................................ 115 Metoda Vector.plusNew().................................................................................................. 115 Odejmowanie wektorów .....................................................................................................116 Metoda Vector.minus()...................................................................................................... 116 Metoda Vector.minusNew()............................................................................................... 116 Odwracanie wektora............................................................................................................117 Metoda Vector.negate() ..................................................................................................... 117 Metoda Vector.negateNew() .............................................................................................. 118 Skalowanie wektorów .........................................................................................................118 Metoda Vector.scale() ....................................................................................................... 118 Metoda Vector.scaleNew() ................................................................................................ 119 Długość 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 prostopadłe ...........................................................................................................125 Poszukiwanie normalnej wektora ....................................................................................... 125 Metoda Vector.getNormal() ............................................................................................... 125 Sprawdzanie prostopadłości wektorów................................................................................ 126 Metoda Vector.isNormalTo()............................................................................................. 126 Obliczanie kąta między dwoma wektorami ........................................................................127 Wyprowadzenie wzoru na kąt między wektorami ................................................................ 127 Metoda Vector.angleBetween() .......................................................................................... 128 Traktowanie punktów jako wektory....................................................................................128 Wnioski ...............................................................................................................................130
  • 5. 8 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 udziałem trójwymiarowych wektorów .........................................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 wektorów..............................................................................................................139 Iloczyn skalarny................................................................................................................ 139 Metoda Vector3d.dot() ...................................................................................................... 140 Iloczyn wektorowy ........................................................................................................... 140 Metoda Vector3d.cross() ................................................................................................... 142 Kąt między dwoma wektorami............................................................................................142 Równanie pozwalające na wyznaczenie kąta ....................................................................... 143 Metoda Vector3d.angleBetween() ...................................................................................... 143 Rzutowanie wektora na płaszczyznę ekranu.......................................................................144 Metoda Vector3d.getPerspective()...................................................................................... 144 Metoda Vector3d.persProject() .......................................................................................... 145 Metoda Vector3d.persProjectNew() ................................................................................... 146 Obroty w trzech wymiarach ................................................................................................146 Obrót wokół osi X ............................................................................................................ 146 Metoda Vector3d.rotateX()................................................................................................ 146 Metoda Vector3d.rotateXTrig().......................................................................................... 147 Obrót wokół osi Y ............................................................................................................ 148 Metoda Vector3d.rotateY()................................................................................................ 148 Metoda Vector3d.rotateYTrig().......................................................................................... 149 Obrót 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 cząsteczek w trzech wymiarach........................................................................153 Klasa Particle3d................................................................................................................ 153 Metoda Particle3d.attachGraphic() ..................................................................................... 155 Metoda Particle3d.render() ................................................................................................ 155
  • 6. Spis treści 9 Przykład: ściana cząsteczek.................................................................................................156 Przygotowania.................................................................................................................. 157 Funkcja getWallPoints() .................................................................................................... 157 Inicjalizacja ściany............................................................................................................ 158 Funkcja arrayRotateXY() .................................................................................................. 159 Animowanie z udziałem zdarzenia onEnterFrame ................................................................ 159 Wnioski ...............................................................................................................................160 Rozdział 6. Programowanie zdarzeń ................................................................ 161 Model zdarzeń we Flashu 5.................................................................................................161 Model obsługi zdarzeń we Flashu MX................................................................................162 Detektory zdarzeń przycisków i klipów filmowych we Flashu MX........................................ 163 Przykład: Poślizg MX ....................................................................................................... 164 Sondy...................................................................................................................................167 Programowanie bazujące na czasie ..................................................................................... 167 Programowanie bazujące na zdarzeniach............................................................................. 168 Nasłuchiwanie zdarzeń obiektów Flasha MX....................................................................... 169 Przykład: nasłuchiwanie zdarzeń pola tekstowego................................................................ 170 Wysyłanie zdarzeń do wielu obiektów ................................................................................ 171 Wbudowane źródła zdarzeń ................................................................................................172 Zajrzyjmy głębiej.............................................................................................................. 172 Mo liwości źródeł zdarzeń ................................................................................................ 173 Obiekt ASBroadcaster....................................................................................................... 174 Inicjalizacja źródła zdarzeń................................................................................................ 174 Rozsyłanie zdarzeń ........................................................................................................... 175 Źródło zdarzeń NewsFeed...................................................................................................176 Konstruktor obiektu NewsFeed .......................................................................................... 177 Metoda NewsFeed.toString() ............................................................................................. 177 Inicjalizacja źródła zdarzeń za pomocą metody ASBroadcaster............................................. 177 Modyfikacja konstruktora.................................................................................................. 178 Metoda NewsFeed.sendNews().......................................................................................... 178 Przygotowywanie systemu..................................................................................................179 Tworzenie obiektu będącego źródłem zdarzeń ..................................................................... 180 Tworzenie obiektu, dla którego zostanie zało ona sonda ...................................................... 180 Definiowanie detektorów zdarzeń ...................................................................................... 180 Zakładanie sond................................................................................................................ 181 Rozsyłanie zdarzeń ........................................................................................................... 181 Wnioski ...............................................................................................................................182 Część III Dynamiczna grafika .............................................................. 183 Rozdział 7. Ruch, klatki pośrednie, przyspieszanie i zwalnianie ....................... 185 Zasady ruchu .......................................................................................................................185 Dodatkowe informacje o poło eniu..................................................................................... 186 Poło enie jako funkcja czasu ............................................................................................. 187 Ruch jako wykres ............................................................................................................. 187 Statyczne klatki pośrednie we Flashu .................................................................................188
  • 7. 10 Flash MX. Programowanie Dynamiczne klatki pośrednie w ActionScript.....................................................................189 Przejście wykładnicze ....................................................................................................... 189 Podstawowe komponenty przejścia .................................................................................... 191 Funkcje przejść ................................................................................................................ 191 Przejście liniowe .................................................................................................................192 Wykres ............................................................................................................................ 192 Funkcja w ActionScript ..................................................................................................... 194 Implementacja przejścia za pomocą funkcji......................................................................... 194 Estetyka ruchu liniowego................................................................................................... 196 Wygładzanie 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 piątego ........................................................................................... 203 Przyspieszenie sinusoidalne ............................................................................................... 204 Przyspieszenie wykładnicze ............................................................................................... 205 Przyspieszenie kołowe....................................................................................................... 206 Wprowadzenie do klasy Tween.......................................................................................... 207 Klasa Motion .......................................................................................................................207 Konstruktor Motion .......................................................................................................... 207 Metody publiczne ............................................................................................................. 209 Metody ustawiania i pobierania .......................................................................................... 213 Metody prywatne.............................................................................................................. 217 Właściwości pobierania i ustawiania................................................................................... 218 Zakańczanie ..................................................................................................................... 219 Klasa Tween........................................................................................................................219 Konstruktor Tween ........................................................................................................... 220 Metody publiczne ............................................................................................................. 221 Metody pobierania i ustawiania .......................................................................................... 223 Właściwości pobierania i ustawiania................................................................................... 224 Zakańczanie ..................................................................................................................... 225 Wnioski ...............................................................................................................................225 Rozdział 8. Fizyka ............................................................................................ 227 Kinematyka .........................................................................................................................227 Poło enie ......................................................................................................................... 227 Przemieszczenie ............................................................................................................... 228 Odległość......................................................................................................................... 229 Prędkość.......................................................................................................................... 229 Szybkość ......................................................................................................................... 231 Przyspieszenie .................................................................................................................. 231 Siła ......................................................................................................................................233 Pierwsze prawo dynamiki Newtona .................................................................................... 233 Siła niezrównowa ona (siła wypadkowa) ............................................................................ 234
  • 8. Spis treści 11 Drugie prawo dynamiki Newtona ....................................................................................... 235 Ruch we Flashu sterowany siłą........................................................................................... 236 Tarcie ..................................................................................................................................237 Tarcie kinetyczne.............................................................................................................. 238 Tarcie statyczne................................................................................................................ 239 Tarcie dla cieczy i gazów................................................................................................... 240 Grawitacja w kosmosie .......................................................................................................241 Grawitacja w pobli u powierzchni......................................................................................244 Elastyczność (sprę ystość)..................................................................................................245 Stan spoczynkowy ............................................................................................................ 246 Prawo Hooke’a................................................................................................................. 246 Stała sprę ystości.............................................................................................................. 246 Kierunek siły sprę ystości ................................................................................................. 247 Implementacja w ActionScript ........................................................................................... 247 Ruch falowy ........................................................................................................................248 Amplituda ........................................................................................................................ 249 Częstotliwość ................................................................................................................... 249 Okres............................................................................................................................... 250 Przesunięcie czasu ............................................................................................................ 251 Offset .............................................................................................................................. 251 Równanie fali ................................................................................................................... 252 Klasa WaveMotion..............................................................................................................252 Konstruktor WaveMotion .................................................................................................. 252 WaveMotion.getPosition() ................................................................................................. 253 Metody ustawiania i pobierania .......................................................................................... 253 Właściwości ustawiania i pobierania................................................................................... 255 U ywanie 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 Przekształcenia kolorów......................................................................................................264 Color.setTransform() ........................................................................................................ 264 MovieClip.setColorTransform()......................................................................................... 265 Color.getTransform() ........................................................................................................ 265 MovieClip.getColorTransform() ........................................................................................ 265
  • 9. 12 Flash MX. Programowanie Powrót do oryginalnego koloru...........................................................................................265 Color.reset() ..................................................................................................................... 265 MovieClip.resetColor()...................................................................................................... 266 Sterowanie jasnością...........................................................................................................266 Color.setBrightness()......................................................................................................... 267 MovieClip.setBrightness() ................................................................................................. 267 Color.getBrightness() ........................................................................................................ 268 MovieClip.getBrightness()................................................................................................. 268 Przesunięcie jasności...........................................................................................................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 Odwrócenie kolorów...........................................................................................................273 Color.invert() ................................................................................................................... 273 MovieClip.invertColor() .................................................................................................... 274 Color.setNegative() ........................................................................................................... 274 MovieClip.setNegativeColor() ........................................................................................... 274 Color.getNegative()........................................................................................................... 274 MovieClip.getNegativeColor() ........................................................................................... 275 Zmiany poszczególnych kolorów .......................................................................................275 setRed() ........................................................................................................................... 275 setGreen() ........................................................................................................................ 275 setBlue() .......................................................................................................................... 276 getRed()........................................................................................................................... 276 getGreen()........................................................................................................................ 276 getBlue().......................................................................................................................... 276 Dodawanie właściwości 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 kształtów..................................................................281 MovieClip.moveTo() ........................................................................................................ 282 MovieClip.lineTo()........................................................................................................... 282
  • 10. Spis treści 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 kształtu ............................................................................................................. 286 Rysowanie typowych kształtów..........................................................................................287 Linie................................................................................................................................ 287 Trójkąty........................................................................................................................... 288 Czworobok ...................................................................................................................... 290 Prostokąty........................................................................................................................ 290 Kwadraty ......................................................................................................................... 293 Kropki ............................................................................................................................. 294 Wieloboki ........................................................................................................................ 295 Wieloboki foremne ........................................................................................................... 296 Elipsy .............................................................................................................................. 297 Okręgi ............................................................................................................................. 298 Znajdowanie poło enia kursora rysowania.........................................................................298 Właściwości MovieClip._xpen i _ypen ............................................................................... 298 Właściwości MovieClip._xpenStart i _ypenStart.................................................................. 299 Inicjalizacja właściwości ................................................................................................... 300 Krzywe Beziera stopnia trzeciego.......................................................................................300 Krzywe Beziera stopnia drugiego a trzeciego....................................................................... 301 Metody rysowania krzywych Beziera stopnia trzeciego ........................................................ 303 Wnioski ...............................................................................................................................305 Część IV Przykłady .............................................................................. 307 Rozdział 11. Nocna aura................................................................................... 309 Rozwój pomysłu..................................................................................................................309 Klasa PhysicsParticle..........................................................................................................310 Konstruktor...................................................................................................................... 310 Metody publiczne ............................................................................................................. 312 Metody pobierania i ustawiania .......................................................................................... 313 Metody prywatne.............................................................................................................. 315 Właściwości pobierania i ustawiania................................................................................... 320 Wykańczanie.................................................................................................................... 320 Klasa Force .........................................................................................................................320 Konstruktor...................................................................................................................... 321 Metody pobierania i ustawiania .......................................................................................... 321 Pozostałe metody.............................................................................................................. 323 Właściwości pobierania i ustawiania................................................................................... 324 Wykańczanie.................................................................................................................... 325 Klasa ElasticForce...............................................................................................................325 Konstruktor...................................................................................................................... 325 Metody ............................................................................................................................ 326
  • 11. 14 Flash MX. Programowanie Właściwości pobierania i ustawiania................................................................................... 328 Zakańczanie ..................................................................................................................... 328 Prosty przykład................................................................................................................. 328 Kod FLA przykładu Aurora Borealis..................................................................................329 Kod głównej listwy czasowej............................................................................................. 329 Komponent aurora ............................................................................................................ 330 Klip filmowy cząsteczki .................................................................................................... 330 Wnioski ...............................................................................................................................334 Rozdział 12. Śnie yca ....................................................................................... 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 przykładu Snowstorm..................................................................................................349 Kod głównej 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 Wymyślanie cyklonu...........................................................................................................370 Rozbijamy zagadnienie .......................................................................................................373 Cząsteczka...........................................................................................................................373 Ście ka.................................................................................................................................373 Path.onEnterFrame()......................................................................................................... 373 Path.init()......................................................................................................................... 374 Oval .....................................................................................................................................375 Oval.init() ........................................................................................................................ 375 Oval.sidewind() ................................................................................................................ 376
  • 12. Spis treści 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
  • 13. Rozdział 8. Fizyka Zrozumienie fizyki to zrozumienie działania otaczającego nas świata. W tym rozdziale omówimy podstawy mechaniki — prędkość, przyspieszenie i siłę — oraz związki między nimi. Poznamy pewne szczególne rodzaje sił, jak tarcie, sprę ystość, grawitacja i sposoby ich obliczania oraz dołączania do dynamicznych animacji. Na końcu zajmiemy się fizyką fali i własną klasą 9CXG/QVKQP, która umo liwi generowanie oscylacji. Kinematyka Mechanika to dział fizyki zajmujący się działaniem sił na obiekty fizyczne i wynikającym z tego ruchem. Istnieją trzy główne obszary, którymi zajmuje się mechanika: statyka, kinetyka i kinematyka. Statyka zajmuje się siłami w równowadze, a kinetyka — przyspie- szeniem powodowanym przez brak równowa enia się sił. Tymczasem kinematyka to czysty ruch, który nie przejmuje się siłami i masą. W tym podrozdziale przyjrzymy się kinematyce, a w dalszej części rozdziału przejdziemy do kinetyki (sił). Poło enie W tym rozdziale skupimy się na kinematyce dwuwymiarowej, czyli z dwoma parametrami: x i y. Z tego powodu poło enie w naszych rozwa aniach będzie dwuwymiarowym wekto- rem zawierającym komponenty x i y. Skorzystamy z klasy 8GEVQT omówionej w rozdziale 4. Obiekt zawierający dwuwymiarowe poło enie wykreujemy, tworząc kopię 8GEVQT za pomo- cą poni szego kodu. RQ Q GPKG LCMQ FYWY[OKCTQY[ YGMVQT RQU PGY 8GEVQT W dalszej części rozdziału będziemy bardzo intensywnie wykorzystywać tę podstawową składnię do tworzenia wektorów dotyczących ró nych aspektów fizyki, na przykład przemieszczenia, prędkości, przyspieszenia i siły. Kinematykę można rozszerzyć do trzech lub więcej wymiarów bez zbytnich problemów. Jeśli nie będziemy mieli kłopotów z implementacją kinematyki w ActionScript za pomocą klasy 8GEVQT, nie powinniśmy też mieć większych problemów z przejściem na klasę 8GEVQTF (patrz rozdział 5.). Specjalnie korzystałem z polimorfizmu (patrz rozdział 2.) przy projektowaniu obydwu klas wektorów, aby ich interfejsy były jak najbardziej podobne.
  • 14. 228 Część III Dynamiczna grafika Przemieszczenie Przemieszczenie to zmiana poło enia. Innymi słowy, przemieszczenie to ró nica między dwoma poło eniami. Gdy poło enia to wektory, przemieszczenie tak e jest wektorem. Wektor przemieszczenia między dwoma poło eniami znajdziemy, odejmując jeden wektor poło enia od drugiego. Rysunek 8.1 przedstawia wektory poło eń i wektor przemiesz- czenia między nimi. Rysunek 8.1. Znajdowanie wektora przemieszczenia d między punktami A i B Mamy dwa punkty: A w (2, 3) i B w (4, 2). Mamy te dwa odpowiadające im wektory: a = [2, 3] i b = [4, 2]. Wektor przemieszczenia d obliczamy jako ró nicę b i a (odejmu- jemy b od a). Rysunek 8.1 przedstawia sytuację graficznie, ale poni ej przedstawiam sposób analityczny. a = [2,3] b = [4,2 ] Niech d będzie przemieszczeniem między b i a. d =b−a d = [4 − 2,2 − 3] d = [2,1] Klasa 8GEVQT powoduje, e przeniesienie tego procesu do ActionScript jest bardzo proste, poniewa określiliśmy ju metodę odejmowania. Poni szy kod przedstawia sposób znajdo- wania wektora przemieszczenia dla dwóch określonych wektorów poło enia. PCLFQYCPKG YGMVQTC RTGOKGUEGPKC RWPMV# PGY 8GEVQT RWPMV$ PGY 8GEVQT RTGO RWPMV$OKPWU0GY RWPMV# VTCEG RTGO Y[ YKGVNK = ? Najpierw tworzymy dwa wektory poło enia, RWPMV# i RWPMV$. Aby znaleźć przemieszczenie z RWPMV# do RWPMV$, odejmujemy pierwszy wektor od drugiego. Korzystając z mo liwości klasy 8GEVQT, wywołujemy metodę OKPWU0GY dla punktu $, by odjąć punkt # i zwrócić ró nicę jako nowy wektor RTGO.
  • 15. Rozdział 8. Fizyka 229 Odległość Choć odległość i przemieszczenie są blisko związane, to jednak oznaczają dwie ró ne rzeczy. Odległość to wartość jednowymiarowa, a przemieszczenie mo e mieć dwa lub więcej wymiarów. Inaczej mówiąc, odległość to skalar, a przemieszczenie to wektor. W powy szym kodzie przemieszczenie między RWPMV# i RWPMV$ wynosi [2, –1]. Gdy poli- czymy odległość, oka e się, e jest to pierwiastek kwadratowy z 5, czyli w przybli eniu 2,236. Mo emy to sprawdzić za pomocą twierdzenia Pitagorasa, na przykład przy u y- ciu funkcji /CVJFKUVCPEG z rozdziału 3. Mo emy te za pomocą poni szego kodu obli- czyć długość wektora przemieszczenia. Uzyskamy tę samą wartość. MQPV[PWCELC RQRTGFPKGIQ RT[M CFW VTCEG FKURIGV.GPIVJ Y[ YKGVNK To nie przypadek. Odległość między dwoma punktami jest zawsze równa długości wekto- ra przemieszczenia między tymi punktami. Jeśli więc mamy wektor przemieszczenia między dwoma punktami i chcemy poznać odległość, wywołujemy dla wektora metodę IGV.GPIVJ . PCLFQYCPKG QFNGI Q EK RTGOKGUEGPKC RTGO PGY 8GEVQT QFNGINQUE RTGOIGV.GPIVJ VTCEG QFNGINQUE Y[ YKGVNK Prędkość Prędkość to zmiana poło enia w czasie. Mo na powiedzieć, e jest to stosunek przemiesz- czenia i czasu. Prędkość to wartość wektorowa, w naszym przypadku będzie dwuwy- miarowa. Gdy tworzymy animację za pomocą skryptu, rzadko chcemy obliczać prędkość poruszania się obiektu, śledząc jego poło enia. Chcemy raczej zdefiniować na początku prędkość i poruszać obiekt zgodnie z nią. Jeśli na przykład gramy w grę Asteroids, nie sterujemy bezpośrednio poło eniem statku. Mamy tylko wpływ na prędkość, która modyfikuje poło- enie. A oto inny przykład: pomyślmy o ró nicy między myszą a joystickiem. Mysz bez- pośrednio steruje poło eniem kursora, ale joystick steruje raczej jego prędkością. W obiek- tach z rzeczywistego świata znacznie łatwiej sterować prędkością ni poło eniem, więc większość urządzeń zdalnego sterowania korzysta z joysticków. Ruch ze stałą prędkością Gdy obiekt posiada stałą prędkość w pionie i w poziomie, porusza się po linii prostej. Poni szy pod przedstawia przykład ruchu klipu filmowego ze stałą prędkością. TWEJ G UVC æ RTúFMQ EKæ RQU PGY 8GEVQT XGN PGY 8GEVQT VJKUQP'PVGT(TCOG HWPEVKQP ] RQURNWU XGN
  • 16. 230 Część III Dynamiczna grafika VJKUAZ RQUZ VJKUA[ RQU[ _ Najpierw deklarujemy dwa obiekty 8GEVQT, RQU i XGN, które reprezentują poło enie i pręd- kość. Początkowe poło enie to (0, 0), a początkowa prędkość to w dół i na prawo. Następnie kreujemy pętlę dla klatek przy u yciu procedury obsługi zdarzenia QP'PVGT(TCOG . W ka - dej klatce dodajemy do poło enia wektor prędkości, korzystając z metody 8GEVQTRNWU . Na końcu zmodyfikowane komponenty Z i [ przepisujemy do właściwości AZ i A[ klipu filmowego. Powyższy przykład używa układu współrzędnych Flasha. Jeśli chcemy korzystać z układu kartezjańskiego, wystarczy zastąpić VJKUA[ RQU[ konstrukcją VJKUA[ RQU[. Odwracamy wartość komponentu [ przed przypisaniem go do A[. Ruch z losową prędkością Po omówieniu stałej prędkości przejdźmy do przykładu ruchu, w którym prędkość nie jest stała. TWEJ NQUQYæ RTúFMQ EKæ RQU PGY 8GEVQT XGN PGY 8GEVQT VJKUQP'PVGT(TCOG HWPEVKQP ] XGNTGUGV TCPFQO TCPFQO RQURNWU XGN VJKUAZ RQUZ VJKUA[ RQU[ _ Struktura jest mniej więcej taka sama jak w poprzednim przykładzie. Najpierw definiu- jemy wektory RQU i XGN (obiekty 8GEVQT). Następnie w procedurze obsługi zdarzenia QP'PVGT(TCOG dodajemy XGN do RQU i renderujemy aktualne poło enie na ekranie. Modyfi- kacja polega tylko na jednym dodatkowym wierszu kodu. XGNTGUGV TCPFQO TCPFQO W ka dej klatce ustawiamy nową prędkość, którą później wykorzystujemy do przesunięcia obiektu. Wartości Z i [ z XGN to wartości losowe z przedziału od –4 do 4. Ruch obiektu staje się chaotyczny. Ruch z prędkością sterowaną myszą Nasz następny przykład obrazuje sposób interaktywnego sterowania prędkością klipu za pomocą myszy. RTúFMQ è UVGTQYCPC O[Uæ RQU PGY 8GEVQT XGN PGY 8GEVQT VJKUQP'PVGT(TCOG HWPEVKQP ] XGNTGUGV VJKUAZOQWUG VJKUA[OQWUG RQURNWU XGN
  • 17. Rozdział 8. Fizyka 231 VJKUAZ RQUZ VJKUA[ RQU[ _ Przykład jest identyczny do poprzedniego poza wierszem: XGNTGUGV VJKUAZOQWUG VJKUA[OQWUG Jako wartości nowej prędkości stosujemy współrzędne myszy zamiast liczb losowych. Poniewa u yte właściwości AZOQWUG i A[OQWUG są liczone względem obiektu, więc porusza się on w kierunku myszy. Szybkość Szybkość i prędkość łączy podobny związek jak odległość i przemieszczenie. Prędkość to wektor (zwykle wielowymiarowy), a szybkość to skalar (zawsze jeden wymiar). Co więcej, szybkość to długość wektora prędkości; nazywana jest te czasem wartością bezwzględną prędkości. Pamiętajmy o tym, e wektor posiada wartość, jak i kierunek. Gdy odrzucimy kierunek, pozostanie tylko wartość — szybkość. Poni ej przedstawiam sposób znajdowania szybkości z wektora prędkości. X PGY 8GEVQT U XIGV.GPIVJ VTCEG U Y[ YKGVNK Podobnie jak wcześniej wywoływaliśmy metodę IGV.GPIVJ do znalezienia odległości z wektora przemieszczenia, tak teraz u ywamy tej samej metody do znalezienia modułu wektora prędkości — szybkości. Przyspieszenie Przyspieszenie to stopień zmian prędkości. Poniewa prędkość to stopień zmian poło enia w czasie, mo emy powiedzieć, e przyspieszenie to podwójny stopień zmian poło enia. Prędkościomierz samochodu podaje szybkość w danym momencie czasu. Gdy samochód przyspiesza, wskaźnik prędkościomierza przechodzi na inną wartość. Im szybciej poru- sza się strzałka, tym większe przyspieszenie. Przyspieszenie to wartość wektorowa, więc posiada moduł i kierunek. Przyjrzyjmy się trzem skryptom, które obrazują wpływ przyspieszenia na dynamiczny ruch. W sposób podobny do trzech wcześniejszych przykładów dotyczących prędkości, sprawdzimy stałe, losowe i sterowane myszą przyspieszenie. Ruch ze stałym przyspieszeniem Poni szy kod wykonuje ruch ze stałym przyspieszeniem. TWEJ G UVC [O RT[URKGUGPKGO RQU PGY 8GEVQT XGN PGY 8GEVQT
  • 18. 232 Część III Dynamiczna grafika CEEGN PGY 8GEVQT VJKUQP'PVGT(TCOG HWPEVKQP ] XGNRNWU CEEGN RQURNWU XGN VJKUAZ RQUZ VJKUA[ RQU[ _ Najpierw tworzymy trzy obiekty 8GEVQT reprezentujące poło enie, prędkość i przyspie- szenie. W procedurze obsługi QP'PVGT(TCOG dodajemy przyspieszenie do prędkości, a prędkość — do poło enia. Następnie renderujemy nową prędkość. To wszystko. Obiekt początkowo nie porusza się, ale później coraz szybciej pędzi na prawo. Mo emy zmodyfikować wartości początkowe wektorów RQU, XGN i CEEGN, aby uzyskać inną animację. Nic nie stoi na przeszkodzie, aby zdefiniować prędkość wskazującą w lewo, jak w poni - szym kodzie. XGN PGY 8GEVQT Spowoduje to początkowy ruch obiektu w lewo, ale po chwili obiekt zatrzyma się i zacznie poruszać się ze stałym przyspieszeniem w prawo. Ruch z losowym przyspieszeniem Nasz następny przykład wykonuje losowe przyspieszenie. TWEJ NQUQY[O RT[URKGUGPKGO RQU PGY 8GEVQT XGN PGY 8GEVQT CEEGN PGY 8GEVQT VJKUQP'PVGT(TCOG HWPEVKQP ] CEEGNTGUGV TCPFQO TCPFQO XGNRNWU CEEGN RQURNWU XGN VJKUAZ RQUZ VJKUA[ RQU[ _ Kod jest podobny do przykładu z losową prędkością, ale teraz zmieniamy wartości CEEGNZ i CEEGN[ na losowe liczby z przedziału od –2 do 2. Skrypt tworzy chaotyczny ruch, ale wygląda on inaczej ni chaotyczny ruch dla prędkości. Przykład ten jest w zasadzie przykładem ruchów Browna, w którym to obiekt doświadcza losowych zmian sił (a co za tym idzie przyspieszenia) z różnych kierunków. Ruchom Browna przyjrzymy się dokładniej w rozdziale 11. Ruch z przyspieszeniem sterowanym myszą Pozostał jeszcze skrypt modyfikujący przyspieszenie na podstawie poło enia myszy. RT[URKGUGPKG UVGTQYCPG O[Uæ RQU PGY 8GEVQT XGN PGY 8GEVQT
  • 19. Rozdział 8. Fizyka 233 CEEGN PGY 8GEVQT VJKUQP'PVGT(TCOG HWPEVKQP ] CEEGNTGUGV VJKUAZOQWUG VJKUA[OQWUG XGNRNWU CEEGN RQURNWU XGN VJKUAZ RQUZ VJKUA[ RQU[ _ Siła Siła to po prostu ciągnięcie lub pchanie w określonym kierunku. Bez siły nic w fizycznym świecie nie mo e się z mienić, więc cały świat byłby się do bólu statyczny. Z pewnej perspektywy mo emy traktować ycie jako proces ciągłej zmiany materii. Pewnie ka dy słyszał o tym, e materia w zasadzie składa się pustej przestrzeni. Atom to jądro i orbitujące wokół niego elektrony. Elektrony od jądra dzieli znaczna odległość, porównywalna z odległościami występującymi w naszym układzie planetarnym. Jak więc obiekty będące w 99,9999% puste, powodują przesunięcie innych obiektów? A jak lina utrzymuje mój cię ar, skoro jej atomy nawet się nie dotykają? W rzeczywistości między elektronami atomów występuje siła elektromagnetyczna, dając wra enie „solidności”, do której jesteśmy przyzwyczajeni. Poza grawitacją wszystkie siły doznawane w naszym mikroskopijnym świecie, czyli tarcie, sprę ystość, magnetyzm, elektrostatyczność, to wynik siły elektromagnetycznej. Pozostałymi dwiema podstawowymi siłami w fizyce, poza grawitacją i elektromagnetyzmem, są słabe i silne siły wiązań atomowych. Ponieważ zachodzą one na poziomie atomów, nie odczuwamy ich bezpośrednio. Siły te są jednak bardzo ważne; gdyby ich nie było, uleglibyśmy natychmiastowej dematerializacji. Siła to wartość wektorowa z modułem i kierunkiem. Wpływa ona na ruch, zmieniając przyspieszenie. Odkrył to w XVII wieku Newton. Newton jest najbardziej znany z od- krycia grawitacji, ale jego trzy zasady dynamiki tak e zasługują na ogromne uznanie. Pierwsze prawo dynamiki Newtona Jedną z podstawowych sił mechaniki jest przyspieszenie — zmiana prędkości — które nie powstaje samo z siebie. Jeśli zmienia się prędkość obiektu, musi pojawić się siła powo- dująca tę zmianę. O tym dokładnie mówi pierwsze prawo dynamiki Newtona. Je eli siły działające na punkt materialny równowa ą się, to w inercyjnym układzie odniesienia ciało porusza się ruchem jednostajnym lub spoczywa. Pierwsze prawo dynamiki nazywane jest te prawem inercji. Inercja to opór, jaki stawia obiekt w przypadku chęci zmiany jego prędkości. Skała stoi w miejscu, dopóki nie zadziała na nią niezrównowa ona siła. Podobnie dzieje się, jeśli skała porusza się, nie zwolni ani nie przyspieszy, gdy nie działa na nią tarcie czy grawitacja.
  • 20. 234 Część III Dynamiczna grafika W kosmosie ciała prawie wcale nie doznają tarcia, więc mogą przebywać znaczne odle- głości bez większej utraty prędkości. W ten sposób mo emy wysyłać sondy do systemu słonecznego, by szpiegować inne planety. Bez inercji podró mierzona milionami kilo- metrów nie byłaby jeszcze mo liwa (wymagałaby ogromnej ilości paliwa). Siła niezrównowa ona (siła wypadkowa) Pierwsze prawo dynamiki Newtona mówi o równowadze sił, a zmiana ruchu następuje tylko przy jej braku. Na ciało w tym samym czasie mo e działać wiele sił z ró nych kierunków. Na przykład w zabawie z przeciąganiem liny dwie dru yny ciągną linę w prze- ciwnych kierunkach. Jeśli obydwie dru yny stosują tę samą siłę, lina nie porusza się, poniewa przyło one do niej siły wzajemnie się znoszą. Gdy siła jest niezrównowa ona, lina przesunie się w kierunku silniejszej dru yny. Ró nica między dwiema siłami to siła wypadkowa. W systemie, w którym kilka sił działa na ciało, obliczamy siłę wypadkową, sumując wszystkie wektory sił. Jeśli siła wypadkowa wynosi zero, obiekt nie zmienia swojej pręd- kości. Gdy siła wypadkowa jest ró na od zera, obiekt przyspiesza w kierunku wskazy- wanym przez siłę wypadkową. W poni szym przykładzie zdefiniowaliśmy trzy siły, a następnie dodaliśmy je do siebie, by obliczyć siłę wypadkową. FGMNCTCELC YGMVQTÎY UK UKNC# PGY 8GEVQT UKNC$ PGY 8GEVQT UKNC% PGY 8GEVQT UWOC UK UKNC9[RCFMQYC PGY 8GEVQT UKNC9[RCFMQYCRNWU UKNC# UKNC9[RCFMQYCRNWU UKNC$ UKNC9[RCFMQYCRNWU UKNC% VTCEG UKNC9[RCFMQYC = ? W tym podejściu tworzymy zerowy wektor siły wypadkowej i dodajemy do niego po kolei trzy wektory sił składowych. Łączna wartość komponentu x wynosi –1 (2 – 3 + 0), a komponentu y — 3 (0 + 2 +1). Mo emy skrócić zapis, u ywając metody 8GEVQTRNWU0GY , która w jednym kroku dodaje dwa wektory i zwraca sumę jako osobny obiekt. UWOC UK UMTÎV UKNC9[RCFMQYC UKNC#RNWU0GY UKNC$ UKNC9[RCFMQYCRNWU UKNC% VTCEG UKNC9[RCFMQYC = ? Wektor UKNC# dodajemy do UKNC$, a wynik przypisujemy do UKNC9[RCFMQYC. Aby zakończyć proces sumowania, dodajemy UKNC% do UKNC9[RCFMQYC. W przypadku gdy musimy dodać do siebie wiele sił, powiedzmy pięć i więcej, bardziej wydajne wydaje się zastosowanie własnej procedury dodawania zamiast 8GEVQTRNWU . Procedura ta może przyjmować tablicę wektorów, przechodzić przez nią w pętli i dodawać komponenty x oraz y do osobnych zmiennych. Na końcu wystarczy wpisać komponenty do nowego wektora i zwrócić go.
  • 21. Rozdział 8. Fizyka 235 Drugie prawo dynamiki Newtona Z pierwszego prawa dynamiki wnioskujemy, e siła wypadkowa powoduje przyspieszenie ruchu obiektu. Wiemy te , jak policzyć siłę wypadkową dla obiektu, dodając siły składowe. Nie wiemy jednak, jakie przyspieszenie spowoduje konkretna siła — jaki jest między tymi wektorami związek? Doświadczenie podpowiada, e popchniecie lekkiego i cię - kiego ciała z tą samą siłą powoduje szybsze poruszanie się l ejszego obiektu. Wygląda na to, e masa ciała ma wpływ na przyspieszenie. Drugie prawo dynamiki Newtona opisuje związek między siłą, masą i przyspieszeniem. Przyspieszenie powodowane przez siłę wypadkową jest wprost proporcjonalne do modułu siły wypadkowej, a odwrotnie proporcjonalne do masy ciała. Kierunek przyspieszenia i siły jest taki sam. Mo emy powiedzieć, e im większa siła wypadkowa, tym większe przyspieszenie, a im większa masa, tym mniejsze przyspieszenie. Drugie prawo dynamiki mo na wyrazić za pomocą poni szego wzoru matematycznego. f = ma Tutaj a to przyspieszenie obiektu, f to działająca niego siła, a m to masa obiektu. Równanie to jest często przekształcane do postaci: a= f m Dzięki tej postaci potrafimy obliczyć przyspieszenie, gdy znamy przyło oną siłę oraz masę obiektu. Wystarczy tylko podzielić siłę przez masę. Przypuśćmy, e siła wypadkowa wynosi [8, 0] (moduł równy osiem i kierunek w prawo), a masa równa jest 2. Przyspie- szenie policzymy w następujący sposób. f = [8,0] m=2 a= f m a = [8,0] 2 a = [4,0] Uzyskaliśmy wektor przyspieszenia o wartości [4, 0] — jego kierunek jest jak przypusz- czaliśmy taki sam jak działającej siły. Załó my teraz, e stosujemy tę samą siłę [8, 0] dla cię szego obiektu, na przykład o masie wynoszącej 4. Przyspieszenie będzie wynosiło: f = [8,0 ] m=4 a= f m
  • 22. 236 Część III Dynamiczna grafika a = [8,0] 4 a = [2,0 ] Przyspieszenie cię szego obiektu wyniesie [2, 0] — połowę przyspieszenia l ejszego obiektu. Teraz bardzo łatwo zauwa yć związek między masą i przyspieszeniem. Gdy masa wzrasta dwa razy, przyspieszenie zmniejsza się dwukrotnie. Ruch we Flashu sterowany siłą Aby uzyskać we Flashu wiarygodny, dynamiczny ruch bazujący na siłach, musimy mieć siłę i na jej podstawie automatycznie obliczać nowe poło enie obiektu. By wykonać to zadanie, skorzystamy z poznanych do tej pory wiadomości na temat prędkości, przyspie- szenia itp. Oto krótkie przypomnienie. Siły działające na obiekt sumujemy, by uzyskać siłę wypadkową. Z siły wypadkowej obliczamy przyspieszenie. Przyspieszenie zmienia prędkość poruszania się obiektu. Prędkość wpływa na poło enie. Kolejność jest nastę- pująca: siły → siła wypadkowa → przyspieszenie → prędkość → poło enie. W ActionScript implementacja tego procesu to sześć oddzielnych kroków. 1. Obliczamy siły działające na obiekt. Wektory sił mo emy policzyć dowolną metodą. W dalszej części rozdziału dowiemy się, jak obliczać siły, takie jak grawitacja czy sprę ystość. Na razie w tym kroku po prostu je zdefiniujemy. FGHKPKELG UK UKNC# PGY 8GEVQT UKNC$ PGY 8GEVQT 2. Dodajemy siły, by obliczyć siłę wypadkową. We wcześniejszej części rozdziału przedstawiłem skrótowy sposób obliczania siły wypadkowej. PCLFQYCPKG UK [ Y[RCFMQYGL UKNC9[RCFMQYC UKNC#RNWU0GY UKNC$ 3. Znajdujemy przyspieszenie dla siły. Pamiętamy równanie na przyspieszenie: a= f m W ActionScript dzielimy wektor siły wypadkowej przez masę obiektu. PCLFWLGO[ RT[URKGUGPKG OCUC QUVC C FGHKPKQYCPC YEG PKGL RT[UR UKNC9[RCFMQYCUECNG0GY OCUC Czasem masa poruszającego się obiektu nie ma wpływu na animację. Mo emy więc zignorować masę i zało yć, e ma ona wartość jednostkową. W takim przypadku równanie na przyspieszenie upraszcza się. a= f m m =1
  • 23. Rozdział 8. Fizyka 237 a= f 1 a= f Gdy masa wynosi 1, przyspieszenie jest równe sile wypadkowej. Z tego powodu w ActionScript mo emy napisać następujące wiersze. PCLFWLGO[ RT[URKGUGPKG RT[UR UKNC9[RCFMQYC W większości tworzonych animacji masa nie jest istotna, więc zakładam, e ma wartość 1 i pomijam krok 3. 4. Dodajemy przyspieszenie do prędkości. Wektor przyspieszenia modyfikuje wektor prędkości. PCLFWLGO[ PQYæ RTúFMQ è RT QUVC C FGHKPKQYCPC YEG PKGL RTRNWU RT[UR 5. Dodajemy prędkość do poło enia. Ten krok jest podobny do poprzedniego, ale tym razem modyfikujemy poło enie. PCLFWLGO[ PQYG RQ Q GPKG RQN QUVC C FGHKPKQYCPC YEG PKGL RQNRNWU RT 6. Umieszczamy obiekt w nowym poło eniu. Ogólnie oznacza to ustawienie właściwości AZ i A[ klipu filmowego na komponenty x i y wektora poło enia. CMVWCNKCELC RQ Q GPKC MNKRW HKNOQYGIQ OEAZ RQNZ OEA[ RQN[ Wspomniałem ju w rozdziale 3., e czasem preferuję tradycyjne współrzędne kartezjańskie, a nie współrzędne ekranu Flasha. Obracam więc oś y, mno ąc komponent dla tej osi przez –1. W [EKG YURÎ TúFP[EJ MCTVGLC UMKEJ OEAZ RQNZ OEA[ RQN[ Powy sze 6. kroków to ogólna procedura generowania dynamicznego ruchu na podstawie sił. Do tej pory poruszaliśmy się w idealnym wszechświecie — nie istniał aden opór. Aby urealnić ruch, musimy wziąć pod uwagę tarcie. Tarcie Tarcie to reakcja na ruch — siła działająca w odwrotnym kierunku ni ruch obiektu. Gdy próbujemy przesunąć sofę po podłodze, dywan rywalizuje z nami za pomocą siły tarcia. Gdy nasza siła przewy szy tarcie, uzyskamy siłę wypadkową zdolną przesunąć sofę.
  • 24. 238 Część III Dynamiczna grafika Pamiętajmy o tym, e tarcie to siła przeciwdziałająca. Nie powoduje spontanicznego przesuwania się obiektów — tarcie pojawia się tylko w odpowiedzi na ruch. Gdy sofa stoi w miejscu, nie działa na nią adne tarcie. Gdy próbujemy ją poruszyć, siła tarcia przeciwdziała ruchowi. Kiedy dwa ciała stałe są ze sobą złączone, pojawiają się dwa główne rodzaje tarcia: statyczne i kinetyczne. Tarcie kinetyczne Tarcie kinetyczne nazywane jest tak e tarciem ślizgowym. Gdy krą ek hokejowy pędzi po lodzie, siła tarcia cały czas go zwalnia. Stopień tej siły jest zwykle stały. Oznacza to, e spowalnianie krą ka tak e jest stałe. Wykres spowolnienia przypomina spowolnienie kwadratowe. Wartość tarcia zale y od tego, jaka jest siła prostopadła (nazywana te siłą normalną) do powierzchni, po której się przesuwamy. Na tym samym lodzie cię szy obiekt będzie miał większe tarcie ni obiekt lekki, poniewa działa na niego większa siła grawitacji. Oto wzór na tarcie kinetyczne w jego typowej postaci. fk = µ k N W tym równaniu fk to siła tarcia kinetycznego, µk to współczynnik tarcia, a N to moduł z siły normalnej łączącej obydwa ciała. Wartość µk (µ wymawiamy jak „mi”) znajduje się typowo w przedziale od 0 do 1. Im wy sza wartość współczynnika, tym większe tarcie dla danej siły dociskającej. Jeśli chcemy u ywać tarcia kinetycznego w animacji Flasha, która nie jest symulacją fizyczną, lepiej od razu przypisać wartość tarcia do fk i nie przejmować się współczyn- nikiem ani siłą dociskającą (normalną). Mo na nawet od razu wyliczyć przyspieszenie tarcia, a nie siłę tarcia. Poprawny, ale dłu szy sposób polega na znalezieniu wartości siły tarcia, a następnie — na wyliczeniu przyspieszenia ze wzoru f = ma. Oto przykładowe obliczenia dla tej metody. f k = 10 a= f m m=5 a = 10 5 a=2 Mo emy zało yć, e przyspieszenie tarcia będzie stałe (nie będzie zale eć od masy obiektu), więc przypiszemy wartość przyspieszenia na stałe. a=2 Gdy mamy przyspieszenie powodowane przez tarcie kinetyczne, proces jego implementacji nie nale y do najprostszych (przynajmniej w porównaniu z uproszczonym tarciem płynów, którym zajmiemy się za chwilę). Poni szy kod ActionScript wykonuje obliczenia dla tar- cia kinetycznego.