W tym rozdziale:
· Zdarzenia i detektory zdarzeń
· Zasady działania języka ActionScript
· Praca w edytorze skryptów
· Poznajemy pierwszych sześć akcji Flasha
· Interaktywność z udziałem detektorów zdarzeń
Interaktywność w filmie Flasha może być rozumiana jako reakcje i odpowiedzi elementów filmu na działania użytkownika i wprowadzane przez niego dane. Użytkownik może się komunikować z filmem na wiele sposobów, zaś Flash dysponuje jeszcze większą liczbą sposobów reagowania. Na czym jednak polega interaktywność i jak działa? Wszystko zaczyna się od akcji i detektorów zdarzeń.
Nawet najbardziej złożone elementy interaktywności we Flashu składają się z dwóch podstawowych części: 1) zachowania (tego co się dzieje) oraz 2) przyczyny zachowania (tego co je wywołało). Oto prosty przykład: Załóżmy, że umieściłeś w filmie zapętloną ścieżkę dźwiękową oraz przycisk, którego kliknięcie powoduje wyłączenie odtwarzanej ścieżki. Zachowaniem jest tutaj wyłączenie odtwarzania ścieżki dźwiękowej, zaś jego przyczyną jest kliknięcie przycisku przez użytkownika za pomocą myszy. We Flashu zachowania są nazywane akcjami (Action). Pierwszym krokiem w nauce tworzenia interaktywnych filmów jest zapoznanie się z listą dostępnych akcji. Same akcje nie mogą jednak działać bez wywołujących je operacji. Taką operacją może być na przykład oddziaływanie kursora myszy na przycisk, może nią być wciśnięcie klawisza na klawiaturze lub przejście do określonego ujęcia kluczowego w filmie. Wszelkie operacje powodujące zadziałanie akcji (takie jak kliknięcie przycisku w powyższym przykładzie) nazywamy zdarzeniami. Mechanizmy wykrywające zdarzenia określonego typu i przekazujące Flashowi zlecenia wykonania zwianych z nimi akcji, nazywamy detektorami zdarzeń.
Ten związek przyczynowo-skutkowy wydaje się oczywisty, lecz jest to bardzo ważne zagadnienie. W przypadku tworzenia podstawowych elementów interaktywnych, różnica pomiędzy akcją i przyczyną wywołującą akcję jest wyłącznie praktycznym szczegółem. Biorąc jednak pod uwagę nowy język skryptowy Flasha 5 i związane z nim możliwości programowania, zrozumienie związku pomiędzy akcjami i wywołującymi je zdarzeniami może być kluczem do tworzenia w filmach bardziej wyrafinowanych zachowań za pomocą tradycyjnych technik programowania.
Nie obawiaj się — wszystkimi opisywanymi tu zagadnieniami zajmiemy się po kolei. Pierwszym krokiem będzie poznanie nowego edytora skryptów, pojawiającego się w programie pod dwiema nazwami — Frame Actions (edytor skryptów ujęć) i Object Actions (edytor skryptów obiektów). Następnie przyjrzymy się kategorii akcji Basic Actions (akcje podstawowe). W dalszej części zobaczymy, jak uruchamiać te akcje za pomocą trzech rodzajów detektorów zdarzeń — wykrywających oddziaływania z przyciskami na obrazie, przejścia do ujęć kluczowych i wciśnięcia klawiszy na klawiaturze.
Każdy program do tworzenia materiałów interaktywnych zawiera język, który realizuje komunikację poszczególnych elementów projektu. Jak wiele jest języków, w których porozumiewają się ludzie na kuli ziemskiej, tak wiele jest dziś języków programowania. Firma Macromedia zadbała, by język programowania Flasha był bardziej przydatny dla zawodowych programistów, dlatego we Flashu 5 język ActionScript został upodobniony do języka JavaScript, podstawowego elementu internetowych stron HTML i DHTML. Teraz skupimy się na korzystaniu z podstawowych elementów języka ActionScript.
(((odnośnik))) Bardziej zaawansowane techniki tworzenia skryptów poznamy w rozdziałach do 19. do 26.
We Flahu 5 wprowadzono nowe narzędzie, służące do umieszczania skryptów w filmach Flasha — edytor skryptów. W odróżnieniu od poprzednich wersji Flasha, nie musisz teraz dwukrotnie klikać ujęć i przycisków, by wyświetlić ich skrypty. Nie musisz też wybierać poszczególnych akcji z rozwijanych menu — możesz wpisywać akcje bezpośrednio z klawiatury w oknie skryptu! Aby otworzyć edytor skryptów, wybierz polecenie Window/Actions (klawisze Ctrl+Alt+A lub Option+Command+A). Jeśli na listwie czasowej jest zaznaczone ujęcie kluczowe, edytor skryptów pojawia się pod nazwą Frame Actions (rysunek 17.1); w tej postaci umożliwia on edycję skryptu ujęcia. Jeśli z kolei na obrazie jest zaznaczony przycisk lub klip filmowy[1], edytor tekstu pojawia się pod nazwą Object Actions; w tej postaci umożliwia on edycję skryptu obiektu. Jedyna różnica pomiędzy obiema wersjami edytora skryptów polega na tym, że wersja Object Actions może automatycznie umieszczać w skryptach detektory zdarzeń. Po za tą różnicą obie wersje edytora możemy traktować jako to samo narzędzie.
Rysunek 17.1. W edytorze skryptów możesz dodawać akcje do skryptu, usuwać je i modyfikować
Większość akcji posiada parametry, wyświetlane w dolnej części edytora skryptów. Ich wartości są ustawiane przez twórcę skryptu. Obszar edytora, w którym są wyświetlane parametry akcji możesz ukryć, klikając ikonę strzałki w prawym dolnym narożniku edytora. Możesz również ukryć lewe okno edytora — tak zwany przybornik akcji, wyświetlający akcje i inne elementy języka ActionScript, podzielone na kategorie. W tym celu kliknij ikonę strzałki znajdującą się pomiędzy oknami edytora.
(((uwaga))) W tej książce nie rozróżniamy paneli Frame Actions i Object Actions. Dla obydwu paneli używamy prostej nazwy „edytor skryptów”.
Edytor skryptów umożliwia pracę w jednym z dwóch trybów — Normal Mode i Expert Mode. Domyślnie jest wybrany tryb Normal Mode (klawisze Ctrl+N lub Command+N, gdy jest aktywny edytor skryptów). W tym trybie lewe okno edytora zawiera sześć kategorii akcji. Akcje możesz umieszczać w skrypcie przez rozwinięcie określonej kategorii i dwukrotne kliknięcie lub przeciągnięcie akcji do okna skryptu (prawego okna edytora). W tym rozdziale będziemy korzystali tylko z pierwszej kategorii akcji, Basic Actions. W trybie Expert Mode (klawisze Ctrl+E lub Command+E, gdy jest aktywny edytor skryptów) możesz wpisywać akcje w skrypcie bezpośrednio z klawiatury; możesz też kopiować je, wycinać i wklejać w oknie skryptu. Aby zmienić tryb pracy edytora skryptów, kliknij ikonę strzałki w prawym górnym narożniku edytora i z menu, które się pojawi, wybierz polecenie Normal Mode lub Expert Mode (rysunek 17.2).
Rysunek 17.2. Rozwiń menu edytora skryptów, by zmienić tryb pracy edytora
Akcje możesz dodawać do skryptu przez przeciągnięcie ich z lewego okna edytora (tak zwanego przybornika akcji) do prawego okna (tak zwanego okna skryptu); możesz też kliknąć ikonę ze znakiem + (plus) w lewym górnym narożniku edytora, by wybrać akcję z rozwijanego menu, lub klikając dwukrotnie akcję w przyborniku akcji. Aby usunąć akcję, zaznacz ją w skrypcie i naciśnij klawisz Delete na klawiaturze. Możesz też zaznaczyć w skrypcie linię zawierającą akcję i kliknąć ikonę ze znakiem – (minus) w lewym górnym narożniku edytora.
Akcje kategorii Basic Actions są poukładane w kolejności zgodnej z pełnionymi przez nie funkcjami. Pierwsza grupa składa się z akcji Go To, Play i Stop, które służą do sterowania odtwarzaniem filmu. Następna grupa to akcje Toggle High Quality i Stop All Sounds, które umożliwiają odpowiednio globalne ustawienie jakości obrazu i zatrzymanie wszystkich dźwięków. Trzecia grupa to akcje Get URL, FSCommand, Load Movie i Unload Movie, które służą do komunikacji filmu z przeglądarką, serwerem sieciowym lub samodzielnym odtwarzaczem. Czwarta grupa to akcje Tell Target i If Frame Is Loaded, dotyczące odpowiednio komunikacji pomiędzy klipami filmowymi i sprawdzania postępów wczytywania filmów.
(((uwaga))) W powyższym zestawieniu pomijamy akcję On Mouse Event kategorii Basic Actions, ponieważ nie funkcjonuje ona jako akcja sama w sobie, lecz pełni funkcję detektora zdarzeń przycisków.
Pozostałe kategorie akcji zawierają zaawansowane akcje i inne elementy języka ActionScript. Omówimy je w następnych rozdziałach.
(((początek szarego tła)))
W miarę rozwoju języka ActionScript, starsze akcje muszą współistnieć z nowszymi i lepszymi akcjami (podobnie jest z metodami, które omówimy później). Choć odtwarzacz Flash 5 Player nadal obsługuje wszystkie dotychczasowe akcje języka ActionScript, niektóre z tych akcji zostały oznaczone przez firmę Macromedia jako wycofywane. Gdy w oknie Publish Settings na zakładce Flash wybierzesz format publikacyjny Flash 5 (parametr Version), niektóre akcje w edytorze akcji, takie jak tellTarget czy ifFrameLoaded zostaną podświetlone na zielono (we wszystkich kategoriach oprócz Basic Actions), jak pokazano na poniższym rysunku. Tych akcji nie należy stosować w nowotworzonych skryptach, ponieważ w przyszłych wersjach Flasha nie będą one obsługiwane. Korzystanie z nich nie jest zresztą konieczne, ponieważ nowe akcje Flasha 5 zapewniają lepsze rozwiązania tych samych zadań — jak na przykład adresowanie klipów filmowych czy sprawdzanie pobrania określonego ujęcia.
Rysunek: Akcje podświetlone na zielono nie powinny być stosowane w skryptach. Choć odtwarzacz Flasha 5 obsługuje te akcje, nie będą one obsługiwane w przyszłych wersjach Flasha
Gdy w oknie Publish Settings na zakładce Flash w polu Version wybierzesz jako format publikacyjny jedną z poprzednich wersji Flasha, program poinformuje cię, które akcje nie są obsługiwane przez wybraną wersję. Akcje niekompatybilne z wybraną wersją Flasha są podświetlane na żółto, jak na poniższym rysunku.
Rysunek: Jako format publikacyjny dla filmu Flasha wybrano format Flash 4. Ta wersja Flasha nie obsługuje między innymi akcji for…in oraz function, dlatego w edytorze skryptów są one podświetlone na żółto
Wreszcie, Flash poinformuje cie, gdy w pojedynczym ujęciu kluczowym lub obiekcie umieścisz akcje, które sobie przeczą. Na przykład, jeśli w skrypcie ujęcia lub przycisku umieścisz obok siebie dwie akcje Go To, Flash podświetli akcję wywołującą konflikt na czerwono, jak na poniższym rysunku. Podświetlenie na czerwono pojawia się tylko w trybie Normal Mode.
Rysunek: Akcje podświetlone na czerwono są sprzeczne z wcześniejszymi akcjami tego samego skryptu. Musisz je usunąć lub skorygować, jeśli film ma działać poprawnie
(((koniec szarego tła)))
Teraz, gdy zdobyłeś ogólne pojęcie na temat możliwości akcji, przyjrzyjmy się szczegółowo sześciu pierwszym akcjom z listy (pozostałe akcje omówimy w następnych rozdziałach). W tym miejscu opiszemy jedynie funkcje pełnione przez każdą z akcji, nie będziemy zaś poruszali kwestii związanych z dodawaniem akcji do skryptów. Informacje na ten temat zamieścimy w następnym podrozdziale, „Uruchamianie akcji za pomocą detektorów zdarzeń”.
Akcje w przyborniku są przypadkowo ułożone w kolejności mniej więcej pokrywającej się z ich stopniem złożoności. Omówmy je zgodnie z tą kolejnością.
Akcja Go To powoduje przejście z aktualnego ujęcia filmu do ujęcia docelowego, określonego przez parametr tej akcji. Akcja Go To jest dostępna w dwóch odmianach:
· Go to and Stop. Akcja przeskakuje do ujęcia docelowego po czym zatrzymuje odtwarzanie filmu. Akcja ta jest często używana w interfejsach takich jak paski narzędziowe, gdzie użytkownik klika przyciski by zobaczyć zawartość poszczególnych obszarów filmu.
· Go to and Play. Akcja przeskakuje do ujęcia docelowego po czym wykonuje akcję Play, odtwarzając dalszy ciąg filmu. Akcja ta, podobnie jak akcja Go to and Stop, może być stosowana w interfejsach w stylu pasków narzędziowych, umożliwia jednak wyświetlanie animowanych sekwencji wprowadzających do poszczególnych obszarów filmu. Akcja Go to and Play jest chętnie stosowana również w animacjach przygodowych, gdzie użytkownik kieruje bohaterem prowadząc go przez różne wersje scenariusza. Zwróć uwagę, że domyślnym wariantem akcji Go To jest wersja Go to and Play. Aby utworzyć akcję Go to and Stop, po wybraniu akcji Go To wyłącz opcję Go to and Play w dolnej części edytora skryptów.
Akcja Go To w obu odmianach służy do wykonania przejścia do określonego ujęcia filmu Flasha. Parametry akcji Go To określają docelową scenę oraz docelowe ujęcie w tej scenie.
Aby przejść do ujęcia zawartego w innej scenie niż aktualna, użyj parametru Scene. Lista parametru Scene zawiera nazwy wszystkich scen filmu. Ponadto zawiera ona zabudowane opcje <current scene> (aktualna scena — ustawienie domyślne), <next scene> (następna scena) oraz <previous scene> (poprzednia scena). Parametr Scene wraz z parametrami Type (sposób adresowania) i Frame (ujęcie docelowe) określa położenie ujęcia docelowego w filmie.
Rysunek 17.3. Ustawianie parametru Scene akcji Go To
Istnieje pięć sposobów adresowania ujęcia docelowego w akcji Go To. Sposób adresowania ujęcia wybierasz za pomocą parametru Type. Po wybraniu sposobu adresowania, w polu Frame wpisz adres ujęcia (numer, nazwę lub wyrażenie), do którego ma przejść akcja Go To (rysunek 17.4).
Rysunek 17.4. Po wybraniu sposobu adresowania w polu Type, w polu Frame wpisz adres ujęcia docelowego
Oto poszczególne metody adresowania ujęcia docelowego:
· Frame Number. W tym przypadku adresem ujęcia docelowego jest numer ujęcia, wpisywany w polu Frame. Ujęcie numer 1 jest pierwszym ujęciem filmu lub sceny. Numeracja ujęć rozciąga się na wszystkie sceny, zatem jeśli film składa się z dwóch scen i każda z nich zawiera po 25 ujęć, akcja Go To z numerem ujęcia 50 wykona przejście do ujęcia 25. drugiej sceny.
(((ostrzeżenie))) Adresowanie ujęć w akcji Go To za pomocą numerów ujęć może prowadzić do poważnych problemów podczas modyfikowania filmu. Wstawienie nowych ujęć na początku lub w środku filmu powoduje przesunięcie numeracji dalszych ujęć. Po przenumerowaniu ujęć konieczne jest zweryfikowanie wszystkich akcji Go To wykonujących przejścia do ujęć o konkretnych numerach, ponieważ pod tymi numerami mogą się kryć zupełnie inne ujęcia.
W większości przypadków
DO SKŁADU> To ostrzeżenie składa się z dwóch akapitów.
lepszym rozwiązaniem jest adresowanie ujęć za pomocą etykiet (opcja Frame Label). W przeciwieństwie do adresowania za pomocą numerów, podczas wstawiania nowych ujęć etykiety przesuwają się wraz z ujęciami, czyli konkretna etykieta zawsze wskazuje konkretne ujęcie. Przejście do etykiety za pomocą akcji Go To działa więc poprawnie nawet po wstawieniu lub usunięciu kilku ujęć na początku filmu.
· Frame Label. Poszczególne ujęcia kluczowe filmu można opatrzyć etykietami, korzystając z pola Label panelu Frame. Po opatrzeniu ujęcia kluczowego etykietą, możesz adresować to ujęcie przez odnoszenie się do jego etykiety. Aby zaadresować ujęcie docelowe akcji Go To za pomocą etykiety, w polu parametru Type wybierz opcję Frame Label. Następnie w polu Frame wpisz nazwę tej etykiety; jeśli określone ujęcie filmu jest już opatrzone odpowiednią etykietą, możesz w polu Frame wybrać tę nazwę z rozwijanej listy etykiet, automatycznie generowanej przez Flasha (rysunek 17.5).
Rysunek 17.5. Flash automatycznie generuje w polu Frame listę etykiet zawartych w filmie
(((uwaga))) Automatycznie generowana lista etykiet, jaka pojawia się w polu Frame, zawiera wszystkie etykiety zawarte w aktualnej listwie czasowej. Jeśli aktualną listwą czasową jest główna listwa czasowa, na liście znajdują się etykiety zawarte we wszystkich scenach filmu, lecz nie zawiera ona etykiet zawartych w klipach filmowych. Aby zaadresować etykietę wewnątrz klipu filmowego, możesz zagnieździć akcję Go To wewnątrz akcji Tell Target i ręcznie wpisać ścieżkę adresową. Jednakże Flash 5 oferuje nową, doskonalszą i wygodniejszą metodę adresowania klipów filmowych i ich etykiet ujęć. Więcej informacji na ten temat znajdziesz w rozdziale 18., „Zarządzanie listwami czasowymi”.
· Expression. W tym przypadku adres ujęcia jest obliczany na podstawie wyrażenia wpisanego w polu Frame. Umożliwia to dynamiczne adresowanie ujęć w akcji Go To. Wyrażenia omówimy w rozdziale 21., „Planowanie struktury kodu”.
· Next Frame. Gdy wybierzesz tę opcję, akcja Go To przejdzie do następnego ujęcia listwy czasowej względem aktualnego. Akcja ta, w połączeniu z akcją Previous Frame może posłużyć do przygotowania prezentacji w postaci serii slajdów, w której każde ujęcie kluczowe zawiera jeden „slajd”.
· Previous Frame. Gdy wybierzesz tę opcję, docelowym ujęciem akcji Go To stanie się poprzednie ujęcie na listwie czasowej względem aktualnego.
Ta prosta akcja pełni jedną z podstawowych funkcji we Flashu. Uruchamia ona odtwarzanie filmu lub klipu filmowego. Po wykonaniu tej akcji Flash zaczyna wyświetlać kolejne ujęcia listwy czasowej. Prędkość wyświetlania klatek jest wyrażana w jednostkach fps (klatki na sekundę). Prędkość wyświetlania klatek może być ustalona w przedziale od 0,01 do 120 (co oznacza, że akcja Play może powodować bardzo powolne wyświetlanie kolejnych klatek filmu, w tempie jednego ujęcia na sto sekund, aż do bardzo szybkiego wyświetlania, w tempie 120 ujęć na sekundę, biorąc oczywiście pod uwagę możliwości obliczeniowe komputera). Domyślnie ustawiona jest prędkość wyświetlania klatek 12 fps[2]. Po uruchomieniu akcji Play ujęcia są wyświetlane jedno za drugim, aż inna akcja przerwie potok ujęć lub zostanie osiągnięty koniec listwy czasowej filmu bądź klipu filmowego. Po osiągnięciu końca listwy czasowej filmu, film albo zostanie powtórzony (odtworzony od pierwszego ujęcia w pierwszej scenie), albo zatrzyma się na ostatnim ujęciu. (Zachowanie filmu po osiągnięciu końca listwy czasowej zależy od parametru Loop w oknie Publish Settings, opisanym w rozdziale 40., „Publikowanie filmów Flasha”). Jeśli zostanie osiągnięty koniec listwy czasowej klipu filmowego, klip zostanie odtworzony od początku (aby temu zapobiec, umieść akcję Stop w ostatnim ujęciu klipu filmowego).
(((ostrzeżenie))) Pojedyncza akcja Play zawsze dotyczy pojedynczej listwy czasowej, bez względu na to, czy jest to listwa czasowa głównego filmu czy też umieszczonego w nim klipu filmowego. Na przykład, akcja Play wykonana wewnątrz klipu filmowego nie rozpocznie odtwarzania głównego filmu. Podobnie akcja Go To wykonana na głównej listwie czasowej nie rozszerzy swego działania na klip filmowy umieszczony na tej listwie czasowej. Aby odnieść akcję Play do konkretnej listwy czasowej (innej niż aktualna lista czasowa), trzeba ją specjalnie zaadresować. Jeśli akcja nie jest zaadresowana, odnosi się do macierzystej listwy czasowej, czyli tej, na której się znajduje. Adresowanie nie dotyczy jednak animacji zawartych w klonach symboli graficznych (symboli typu Graphic). Animacja zawarta w klonie symbolu graficznego jest sterowana przez akcje odnoszące się do listwy czasowej, na której jest umieszczony ten klon; Flash ignoruje akcje umieszczone na listwach czasowych symboli graficznych.
Akcja Stop, jak się można domyślić, zatrzymuje odtwarzanie filmu...
PabloPCK