Część 2.
Zrozumieć ActionScript
Części składowe języka HTML
Jeśli posługiwałeś się już językiem JavaScript, to z pewnością zauważysz pewne podobieństwa pomiędzy tymi dwoma językami. W zasadzie ActionScript bazuje na języku JavaScript, który jest popularnym, zorientowanym obiektowo językiem programowania, używanym do projektowania interaktywnych witryn internetowych. Jednak skrypty JavaScript z założenia kontrolują pracę przeglądarek, natomiast ActionScript wpływa na zachowanie poszczególnych elementów filmu Flasha, przez co istnieje kilka różnic pomiędzy tymi językami. Jednak podstawowa składnia, sposób zarządzania obiektami i funkcjami w obu przypadkach pozostają jednakowe. Nawet jeśli nigdy jeszcze nie zetknąłeś się z językiem JavaScript, śledząc ten rozdział, przekonasz się, że programowanie we Flashu jest łatwe. Zapoznasz się z logiką obiektów, a także dowiesz się, jak paleta akcji pomaga zautomatyzować proces programowania, dając ci większą elastyczność w tworzeniu coraz bardziej zaawansowanych skryptów. |
Sercem języka ActionScript są obiekty oraz klasy. Obiektami mogą być dowolne typy danych, np. dźwięk, klip filmowy, łańcuch znaków lub wartości liczbowe, które tworzysz we Flashu i wykorzystujesz do kontrolowania filmu. Dla przykładu, obiekt daty jest używany do podawania informacji o czasie i dacie, a obiekt tablicowy służy do manipulowania danymi zgromadzonymi w określonym porządku. Wszystkie tworzone przez ciebie obiekty należą do większej grupy zbiorczej, zwanej klasą. We Flashu zaimplementowano szereg klas możliwych do wykorzystania w twoich filmach. Owe predefiniowane klasy także określane są mianem obiektów, jednak mają nazwy pisane wielką literą. Na przykład obiekt Kolor jest klasą, na podstawie której tworzy się różnokolorowe obiekty. Nauka programowania w ActionScript sprowadza się do zrozumienia działania poszczególnych obiektów oraz ich klas, a następnie wykorzystania ich do wzajemnej interakcji oraz interakcji z użytkownikiem. W realnym świecie znane nam są takie obiekty, jak krowa, drzewo czy osoba (rys. 3.1). Obiekty we Flashu mogą przyjmować różne postaci - od widzialnych przedmiotów, w rodzaju wirującej kuli, do bardziej abstrakcyjnych koncepcji, np. daty, fragmentów danych lub odczytywania informacji wprowadzanych z klawiatury. Niezależnie jednak od ich materialności czy abstrakcyjności, obiekty Flasha są wszechstronne, ponieważ kiedy już raz je utworzysz, można używać ich w różnych kontekstach. Zanim jednak będziesz mógł użyć obiektów, musisz nauczyć się je identyfikować, a robi się to, po prostu nazywając je - jak w realnym świecie. Załóżmy więc, że masz przed sobą troje ludzi: Adama, Betty i Zeke'a. Wszyscy oni stanowią obiekty, które odróżniają imiona. Wszyscy też należą do jednej większej grupy znanej jako ludzie. Można powiedzieć, że Adam, Betty i Zeke są klonami klasy ludzi (rys. 3.2). W języku ActionScript, klony oraz obiekty są synonimami i nazwy te są używane w tej książce zamiennie. |
Rys. 3.1. Obiektami w realnym świecie mogą być np. krowa, drzewo czy osoba
Rys. 3.2. Adam, Betty i Zeke to trzy obiekty klasy ludzi. Oczywiście we Flashu nie ma takiej klasy (co nie znaczy, że nie można jej stworzyć), jednak ta analogia pozwala pojąć znaczenie obiektów
|
Rys. 3.3. Adam, Betty i Zeke są obiektami ludzkimi z różnymi właściwościami. Właściwości odróżniają obiekty tej samej klasy
Wskazówka
|
Metody i właściwości Każdy obiekt w danej klasie (np. Zeke z klasy ludzie) wyróżnia spośród innych obiektów w tej klasie nie tylko jego nazwa. Każdy człowiek jest inny pod względem wielu cech, które czynią go niepowtarzalnym, np. wzrostu, wagi, płci czy koloru włosów. W obiektowo zorientowanych językach programowania mówimy, że obiekty i klasy mają właściwości. Wzrost, waga płeć i kolor włosów, są właściwościami klasy ludzi (rys. 3.3). We Flashu, każda z predefiniowanych klas posiada swój zestaw właściwości pozwalających zindywidualizować poszczególne obiekty. I tak klasa String ma tylko jedną właściwość, nazywaną lenght, która określa ilość znaków zawartych w danym obiekcie, czyli łańcuchu znaków. Klasa MovieClip (klip filmowy) natomiast ma wiele właściwości, np. _height (wysokość), _width (szerokość) i _rotation (kąt obrotu), które wskazują na wymiary i orientację konkretnego obiektu-klipu filmowego. Definiując i zmieniając właściwości obiektów, kontrolujesz ich postać . Ponadto ludzie mogą wykonywać różne czynności. Zeke może biegać, spać lub rozmawiać. W żargonie obiektowym mówimy, że obiekt posiada metody, które na niego wpływają . Każda z predefiniowanych klas ma swój własny zestaw metod. Przykładowo, klasa Sound (dźwięk) posiada metodę setVolume, pozwalającą ustalić poziom dźwięku, a klasa Date (data) metodę getDay, która zwraca dzień tygodnia. Kiedy używamy metody obiektu, mówimy, że ta metoda została wywołana, ewentualnie obiekt wywołuje metodę. Zrozumienie związków pomiędzy obiektami, klasami, właściwościami i metodami jest ważne. Definiowanie obiektów, tak aby metody i właściwości jednego oddziaływały na metody i właściwości drugiego, jest sposobem, w jaki we Flashu tworzymy interaktywne elementy . Kluczem do rozwijania zasobu słownictwa języka ActionScript jest poznanie właściwości i metod poszczególnych klas. |
Podobnie jak w przypadku każdego innego języka obcego, jeśli chcesz układać słowa w zdania, musisz poznać reguły gramatyki. W języku ActionScript też istnieją określone konwencje, pozwalające układać obiekty, właściwości i metody w wyrażenia, a te z kolei w funkcje i skrypty. Poszczególne obiekty, właściwości i metody łączy się za pomocą kropek, opisując w ten sposób konkretny obiekt lub proces. Oto przykład: Zeke.weight = 188; Betty.weight = 135; Pierwsze wyrażenie przyporządkowuje wartość 188 wadze (weight) Zeke'a. Drugie wyrażenie przyporządkowuje wartość 135 wadze Betty. Kropka oddziela nazwę obiektu od właściwości (weight) (rys. 3.4). Betty.shirt.color = gray; To wyrażenie wskazuje, że obiekt Betty jest połączony z obiektem shirt (koszula). Z kolei obiekt shirt posiada właściwość color (barwa), której przyporządkowano wartość gray (szary). Zwróć uwagę, że w składni ActionScript używa się wielu kropek do ustalania hierarchii obiektów. Kiedy mamy do czynienia z kilkoma obiektami połączonymi w taki sposób, zwykle łatwiej jest czytać wyrażenie od tyłu. Można więc zinterpretować to tak: „Szary jest kolorem bluzki Betty”. Zeke.run (); To wyrażenie oznacza, że obiekt Zeke wywołuje metodę run. Nawiasy stojące za słowem run wskazują, że jest to metoda, a nie właściwość. Możesz nazywać taką konstrukcję następująco: rzeczownik-kropka-czasownik (rys. 3.5). Metody często będą posiadały argumenty, podawane w nawiasach i decydujące o sposobie wykonania metody. Na przykład: Zeke.run (fast); Adam.run (slow);
|
Rys. 3.4. Hipotetyczna właściwość weight opisuje Betty i Zeke'a. We Flashu, właściwości obiektów mogą być ustalane i modyfikowane za pomocą języka ActionScript
Rys. 3.5. Zastosowanie kropki powoduje, że obiekty wywołują metody. Tak jak hipotetyczna metoda run mogłaby sprawić, że obiekt Adam zacznie biegać, tak prawdziwa metoda Flasha hide(), zastosowana do obiektu Mouse, powoduje, że wskaźnik myszy staje się niewidoczny
|
|
W obu wyrażeniach obiekty Zeke i Adam wywołują metodę run (bieg), jednak w każdym przypadku metoda posiada inny argument, co oznacza, że czynność biegania będzie wyglądać w różny sposób: Zeke będzie biegł szybko, podczas gdy Adam - powoli. Każda metoda będzie korzystać z własnego zestawu argumentów. Rozważ na przykład podstawową akcję Flasha gotoAndPlay("Scene 1",20) (gotoAndPlay jest metodą należącą do klasy MovieClip jak też niezależną akcją Flasha). Argumenty w nawiasach (”Scene1”,20) odnoszą się do konkretnej sceny i numeru klatki, tak więc odtwarzacz przeskoczy do sceny 1 i klatki 20, a następnie rozpocznie odtwarzanie filmu. Wskazówka
|
Zastosowanie kropki umożliwia tworzenie zależności pomiędzy obiektami, właściwościami i metodami. Dodatkowe znaki interpunkcyjne pozwalają na więcej kombinacji z pojedynczymi wyrażeniami. Średnik Średnika używa się do zaznaczenia końca jednego wyrażenia i początku następnego. Znak ten spełnia podobną funkcję, co kropka w zdaniu: oddziela dwie idee, jedną od drugiej. Oto przykład: stopAllSounds (); play (); Średniki oddzielają wyrażenia, tak więc najpierw wyłączany jest dźwięk, a potem rozpoczyna się odtwarzanie filmu. Każdy skrypt jest wykonywany w kolejności od góry do dołu, podobnie jak zestaw instrukcji czy przepis kuchenny. Wskazówka
|
Klamry Klamry są kolejnym znakiem interpunkcyjnym często stosowanym w kodzie ActionScript. Służą do grupowania poszczególnych skryptów w bloki. Na przykład, kiedy przyporządkowujesz akcje przyciskom, akcje te są zapisywane w klamrach wyrażenia on (release). on (release) { stopAllSounds (); play (); } W powyższym przykładzie obie akcje, stopAllSounds oraz play, są wykonywane po zwolnieniu klawisza myszki. Zwróć uwagę na sposób rozmieszczenia klamer w kolejnych liniach, ułatwiających odczytanie powiązanych ze sobą wyrażeń języka ActionScript. Ważne jest, aby po klamrze zamykającej blok akcji on (jak również po onClipEvent) nie stawiać średnika, ponieważ Flash zinterpretuje to jako błąd.
|
Rys. 3.6. Ikonowe menu w prawym dolnym rogu dokumentu Flasha otwiera paletę akcji dzięki przyciskowi Show Actions
Rys. 3.7. Paleta akcji w trybie Normal
|
Paleta akcji Paleta akcji to okno dialogowe Flasha, dające dostęp do predefiniowanych klas i obiektów ActionScript, oraz ułatwiające pisanie własnych skryptów. Akcje tworzy się, usuwa i edytuje w jednym z dwóch trybów, Normal lub Expert, w zależności od stopnia zaawansowania. Paleta akcji pozwala na pewną automatyzację procesu pisania skryptów, np. wstawiając automatycznie znaki interpunkcyjne w rodzaju średników czy klamer. We Flashu nazwa palety akcji jest widoczna w rzeczywistości jako Object Actions lub Frame Actions, w zależności od rodzaju elementu, który jest aktualnie zaznaczony. Jednak zawartość palety nie zmienia się, tak więc w tekście odwołujemy się do niego zawsze jako do palety akcji. W celu wywołania palety akcji:
lub W ikonowym menu w prawym dolnym rogu okna kliknij przycisk Show Actions (rys. 3.6). W zależności od aktualnego zaznaczenia, pojawi się paleta Frame Actions lub Object Actions. lub Kliknij podwójnie ujęcie kluczowe, lub przytrzymując wciśnięty klawisz Alt, kliknij podwójnie klon na scenie. W efekcie pojawi się paleta Frame Actions lub Object Actions, pozwalając na przypisanie ujęciu kluczowemu lub klonowi odpowiedniego skryptu (rys. 3.7).
|
Tryb Normal palety akcji udostępnia trzy sekcje okna i kilka sposobów wpisywania wyrażeń języka ActionScript. Tryb Expert Ten tryb przeznaczony jest dla doświadczonych programistów, którzy nie potrzebują pomocy udostępnianej w trybie Normal. Tryb Expert umożliwia swobodne wpisywanie kodu, podobnie jak wpisywanie tekstu w edytorze (rys. 3.8). Wskazówki
|
Rys. 3.8. Paleta akcji w trybie Expert
|
Rys. 3.9. Menu opcji na palecie akcji umożliwia wybór pomiędzy trybami Normal i Expert
Rys. 3.10. W zakładce General okna dialogowego Preferences można zmienić domyślny tryb pracy palety akcji |
W celu wybrania trybu
Wskazówka
|
Tabela 3.1. Różnice pomiędzy trybami Expert Mode i Normal Mode
Cecha |
Tryb Normal Mode |
Tryb Expert Mode |
Bezpośrednie wprowadzanie tekstu |
Nie |
Tak |
Blok określania parametrów |
Tak |
Nie |
Kategoria Basic Actions na liście narzędzi |
Tak |
Nie |
Przycisk „minus” |
Tak |
Nieaktywny; zaznacz wyrażenie i naciśnij klawisz Delete |
Przyciski „w górę” i „w dół” |
Tak |
Nieaktywne; do zmiany rozmieszczenia wyrażeń użyj poleceń Copy, Cut i Paste |
|
lub
lub
lub
|
Rys. 3.11. Dodaj akcję, wybierając wyrażenie z listy narzędzi
Rys. 3.12. Dodaj akcję, przeciągając wyrażenie do listy akcji po prawej. Wygląd wskaźnika zmienia się na chwilę, pokazując miejsce, w którym zamierzasz upuścić akcję
Rys. 3.13. Dodaj akcję, wybierając ją z menu rozwijanego przycisku „plus”
|
Rys. 3.14. Przesuń wyrażenie stopAllSounds () za pomocą przycisków-strzałek (u góry) - lub przeciągając je w nowe miejsce (u dołu). Gruba pozioma linia wskazuje miejsce, w którym znajdzie się wyrażenie po upuszczeniu
Rys. 3.15. Blok edycji parametrów pozwala na zmianę parametrów zaznaczonej akcji. Akcja Go To posiada dwa pola parametrów, menu rozwijane oraz pole wyboru, które wszystkie razem wpływają na sposób działania akcji. Wprowadzenie wartości 10 w polu Frame i zaznaczenie pola Go to and Play zmieni wyrażenie na liście akcji i spowoduje przeniesienie punktu rozpoczęcia odtwarzania do klatki 10
|
W celu edycji akcji
Wskazówki
|
|
Rys. 3.16. Zmiana rozmiaru okien palety akcji przez przeciągnięcie (u góry) lub kliknięcie pionowego paska podziału. Okno skryptu może zostać rozszerzone (w środku) lub powiększone do szerokości palety (u dołu)
Rys. 3.17. Paleta akcji z widocznym blokiem edycji parametrów
|
Kategorie akcji |
|
|
|
Skoro wiesz już, czym są obiekty, a także jak posługiwać się paletą akcji, zaczniemy pisać skrypt z użyciem właśnie obiektów, jak również wywoływania metod lub deklarowania i przyporządkowywania właściwości. Flash udostępnia predefiniowane klasy, nazywane „obiektami”. Tak naprawdę są więc dwie definicje obiektów. Array, Boolean, Color i wszystkie inne obiekty wyświetlane w kategorii Objects na liście narzędzi są określane mianem obiektów, ponieważ stanowią predefiniowane klasy. Obiektami w ogólnym znaczeniu są też ciągle pojedyncze klony danej klasy. Zatem obiekt Array powinien być właściwie nazywany klasą Array, a z niej samej można utworzyć obiekt. W tekście odwołujemy się do pojęcia predefiniowanych klas, pisząc o obiektach i podając ich nazwy pisane wielką literą, jako że tak właśnie zostały uszeregowane na liście narzędzi palety akcji. Klasy te posiadają metody oraz właściwości, pozwalające kontrolować różne aspekty filmów Flasha, np. klipy filmowe, dźwięk, dane, czas czy funkcje matematyczne. Możesz także tworzyć własne klasy poprzez łączenie kilku predefiniowanych klas i akcji z funkcjami (zobacz - rozdział 11. „Sterowanie przepływem informacji”). Predefiniowane klasy Predefiniowane klasy znajdują się w kategorii Objects palety akcji (rys. 3.18). Żeby móc posłużyć się klasą, najpierw musisz stworzyć jej klon, nadając mu nazwę. Robi się to podobnie, jak w przypadku tworzenia klonu symbolu. Musisz utworzyć klon klasy, jeśli chcesz ją wykorzystać w skrypcie, a robi się to przez nadanie jej nazwy. Do nadania klonowi klasy unikalnej nazwy używa się akcji set variable. Adam = new Human (); myColor = new Color ();
|
Rys. 3.18. Predefiniowane klasy Flasha służą do kontrolowania różnych aspektów danych
|
|
Powyższe wyrażenia służą do utworzenia nowych obiektów, którymi później można manipulować. Operator new umieszczony przed nazwą klasy, jak widać w przykładzie powyżej, jest nazywany funkcją konstruktora (constructor function). Funkcja new stanowi specjalny rodzaj funkcji, używany do tworzenia nowych klonów klas. Kolejny krok polega na wywołaniu metody obiektu, ewentualnie zadeklarowaniu i przyporządkowaniu nowych właściwości. Metodę możesz wywołać wybierając akcję evaluate i wpisując wyrażenie z kropką: myColor.setRGB(0x00CC33) Powyższe wyrażenie wywołuje metodę setRGB, która zmienia kolor skojarzony z obiektem myColor. Wskazówka
Mouse.hide(); Math.sin(argument); Żeby dowiedzieć się, czy dany obiekt potrzebuje funkcji konstruktora, wystarczy spojrzeć do kategorii Objects na liście narzędzi. Te, które jej nie posiadają, nie wyświetlą jej wśród swoich metod i właściwości.
|
Poniższe ćwiczenia demonstrują sposób tworzenia klonu obiektu Date i wprowadzania zmiennej podającej aktualną datę. W celu utworzenia obiektu:
Z listy narzędzi lub menu przycisku „plus” wybierz Actions/set variable. W oknie skryptu pojawi się nowe wyrażenie, a w bloku edycji parametrów ujrzysz puste pola (rys. 3.19).
|
Rys. 3.19. Akcja set variable wymaga zadeklarowania zmiennej i podania wartości
Rys. 3.20. Wpisz myDate jako nazwę obiektu
Rys. 3.21. Funkcja konstruktora new Date posiada następujące argumenty: year (rok), month (miesiąc), date (data), hour (godzina), min (minuta), sec (sekunda), ms (milisekunda)
Rys. 3.22. Funkcja konstruktora new Date, bez dodatkowych argumentów, nie przypisuje określonych właściwości obiektowi myDate
Rys. 3.23. Pełne wyrażenie tworzy z obiektu typu Date nowy obiekt, nazwany myDate |
Rys. 3.24. Wprowadź mydisplay jako nazwę zmiennej i nie zaznaczaj pola Expression
Rys. 3.25. W zmiennej mydisplay przechowywana jest informacja, odczytywana przez metodę getDate z obiektu myDate
|
W celu wywołania metody obiektu:
Pole wyboru Expression Zaznaczenie pola Expression powoduje usunięcie cudzysłowów z pola Value (lub Variable) i tym samym zamianę tzw. łańcucha znakowego na wyrażenie. Łańcuch znakowy jest zawsze zamknięty w cudzysłowie i reprezentuje określony zbiór znaków - cyfr, liter lub symboli - inaczej można powiedzieć, że łańcuch znakowy to tekst. Natomiast wyrażenie jest wzorem (czy raczej formułą), który może zawierać zmienne, funkcje oraz cyfry, liczby i operatory. Zanim zostanie określone, co reprezentuje dane wyrażenie, Flash musi je najpierw zinterpretować, tj. podstawić za zmienne i funkcje odpowiednie wartości, a także wykonać na całości działania zgodne z logiką użytych operatorów. Na przykład, łańcuch znakowy ”3+2” stanowi tylko grupę trzech znaków, 3+2. Z drugiej strony, wyrażenie 3+2 oznacza 5. Więcej na temat wyrażeń i zmiennych dowiesz się z części V, „Przetwarzanie informacji”. |
Pole dynamicznego tekstu wyświetla wartość zmiennej w czasie odtwarzania filmu. Więcej o dynamicznym tekście dowiesz się z rozdziału 10.
Wskazówka
|
Rys. 3.26. Pole tekstowe po lewej zostało zamienione na pole dynamicznego tekstu (Dynamic Text) za pomocą zmiennej mydisplay
Symbole i klasy Symbole nie są klasami. Nie są nawet obiektami. To prawda, że klip filmowy jest jednocześnie symbolem i obiektem, ale to jedyny wyjątek, i chyba też źródło całego zamieszania. Grafiki, przyciski, dźwięki, bitmapy i klipy wideo QuickTime - to wszystko symbole pojawiające się w bibliotece. Jednak nie są to obiekty ani klasy, a to dlatego, że nie posiadają metod i właściwości, które można kontrolować za pomocą języka ActionScript. Tymczasem przyciski wykonują określone działania nie dlatego, że posiadają metody, ale dlatego, że ty przyporządkowujesz konkretne skrypty ich klonom. Istnieje jednak pewna analogia pomiędzy klasami i symbolami. Symbole stanowią zawartość biblioteki (utworzoną lub zaimportowaną), którą można wielokrotnie wykorzystywać. W swoich filmach używasz jedynie klonów lub kopii poszczególnych symboli. W przypadku klas, jak mogłeś się przekonać, też używa się tylko klonów, tworzonych na ich podstawie na potrzeby projektu.
|
Rys. 3.27. Komentarze towarzyszące kolejnym fragmentom skryptu pomagają uwypuklić ich znaczenie
Rys. 3.28. Podwójny ukośnik sygnalizuje wprowadzanie komentarza w polu definiowania etykiety ujęcia (Label)
|
Stosowanie komentarzy Podczas tworzenia złożonych skryptów powinieneś pamiętać o dołączaniu objaśnień (komentarzy), które pozwolą tobie i współtwórcom projektu pamiętać o zadaniach poszczególnych fragmentów kodu. Komentarze pomagają zachować porządek w czasie prac nad poszczególnymi częściami skryptu (rys. 3.27). W celu dołączenia komentarza:
//To jest komentarz, który mieści się w jednej linijce /* To jest tekst komentarza, który nie mieści się w jednej linijce, więc trzeba użyć otwarcia i zamknięcia bloku komentarza */ Komentarze są zaznaczane innym niż reszta skryptu kolorem, więc łatwo je zlokalizować. Wskazówki
|
|
|
Rozdział 3.
86
85
Posługiwanie się językiem ActionScript
3
Posługiwanie się
językiem ActionScript
Właściwości
Klasa ludzi
Klasa ludzi
Wzrost
Waga
Płeć
Kolor włosów
Przyciski „plus” i „minus” dodają lub usuwają ze skryptu akcje
Waga Betty = 135
Blok edycji parametrów
Lista narzędzi zawierająca akcje zorganizowane w kategorie
Używanie obiektów
Przycisk Show Actions
Używanie obiektów
Paleta akcji
Zwija blok edycji parametrów
Pionowy pasek podziału przy całkowicie rozciągniętym oknie skryptu
Pionowy pasek podziału
Przeciąganie pionowego paska podziału
Paleta akcji
Paleta akcji
Paleta akcji
Pisanie według reguł składni
Metody i właściwości
Posługiwanie się językiem ActionScript
Waga Zeke = 188
Menu rozwijane opcji
Przyciski strzałek pozwalają zmieniać układ wyrażeń
Okno skryptu
Ikona zmiany rozmiaru palety
Stosowanie komentarzy
Obiekty i klasy
Pisanie według reguł składni
Więcej o interpunkcji
Paleta akcji
Paleta akcji
Paleta akcji
Używanie obiektów
Używanie obiektów
Używanie obiektów
Adam
Betty
Zeke
Adam
Wzrost = 69
Waga = 140
Płeć = M
Kolor włosów = czarne
Betty
Wzrost = 68
Waga = 135
Płeć = K
Kolor włosów = czarne
Zeke
Wzrost = 66
Waga = 188
Płeć = M
Kolor włosów = brązowe
Adam.run ()
Mouse.hide ()