r17-05, ## Documents ##, flash5biblia


Rozdział 17.
Akcje i detektory zdarzeń

W tym rozdziale:

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ń.

Poznajemy akcje i detektory 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.

Co to jest ActionScript?

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.

Edytor skryptów

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, 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.

0x01 graphic

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”.

Tryby Normal Mode i Expert Mode

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

0x01 graphic

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

Akcje wycofywane i akcje niekompatybilne

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.

0x01 graphic

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.

0x01 graphic

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.

0x01 graphic

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

Sześć pierwszych akcji

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

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:

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.

0x01 graphic

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

0x01 graphic

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:

(((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[Author:MB] 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.

0x01 graphic

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”.

Akcja Play

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

Akcja Stop, jak się można domyślić, zatrzymuje odtwarzanie filmu lub klipu filmowego. Akcja Stop często jest powiązana z przyciskami pozwalającymi użytkownikowi sterować odtwarzaniem filmu; nierzadko jest też umieszczana w ostatnim ujęciu animowanej sekwencji.

(((wskazówka))) Klony klipów filmowych umieszczone na dowolnej listwie czasowej są odtwarzane automatycznie. Jeśli nie chcesz, aby były one odtwarzane w chwili pojawienia się na obrazie, pamiętaj o umieszczeniu akcji Stop w pierwszym ujęciu klipu filmowego.

Akcja Toggle High Quality

Oto prosta akcja, która zmienia jakość obrazu wyświetlanego przez Flasha z niskiej (Low) na wysoką (High) lub z wysokiej na niską. Jeśli ustawiona jest wysoka jakość (High Quality) krawędzie wyświetlanych linii i tekstu są wygładzane, czyli poddawane anti-aliasingowi (rozmywaniu kolorów pikseli na krawędziach). Niską jakość (Low Quality) stosujemy czasem w sytuacjach, gdy film jest odtwarzany na wolniejszym komputerze — dzięki temu animacje mogą być odtwarzane szybciej. Niską i wysoką jakość obrazu możesz porównać na rysunku 17.6. Akcja Toggle High Quality jest oznaczona we Flashu 5 jako akcja wycofywana. Można ją zastąpić nową właściwością _quality --> [Author:MB] . Wszystkie ustawienia dotyczące jakości obrazu są globalne, co oznacza że dotyczą wszystkich listew czasowych niezależnie od miejsca ustawiania jakości.

0x01 graphic

Rysunek 17.6. Porównanie niskiej jakości obrazu (lewa ilustracja) z obrazem wysokiej jakości (prawa ilustracja). Zwróć uwagę, że wygładzanie poprawia również jakość tekstu

(((wskazówka))) Akcję Toggle High Quality najczęściej stosujemy w samodzielnych filmach Flasha. (Na stronach internetowych jakość filmu można zmieniać za pomocą atrybutów HTML). Jeśli jakość nie jest jednoznacznie określona jako High (wysoka), odtwarzacz automatycznie dobiera jakość w zależności od tego, jak bardzo poszczególne ujęcia filmu obciążają procesor w danym komputerze. Efekt zmieniającej się jakości jest nieco drażniący, większość projektantów decyduje się na — często wolniejszą lecz dającą ładniejsze efekty — wysoką jakość (High Quality).

Akcja Stop All Sounds

Ta prosta, lecz ważna funkcja powoduje natychmiastowe przerwanie odtwarzania wszyst­kich aktualnie odtwarzanych dźwięków. Zwróćmy uwagę, że nie powoduje ona trwałego wyłączenia dźwięków, jedynie przerywa odtwarzanie dźwięków aktualnie trwających. Jest ona czasem stosowana jako szybka i mało elegancka metoda tworzenia przycisków wyłączających zapętlone ścieżki dźwiękowe odtwarzane w tle. Za pomocą akcji Stop All Sounds nie można kontrolować, czy większa liczba dźwięków jest odtwarzana, czy też została wyciszona. Informacje na temat dokładniejszej kontroli odtwarzania dźwię­ków znajdziesz w rozdziałach 18., „Zarządzanie listwami czasowymi” i 19., „Sterowanie klipami filmowymi”.

Akcja Get URL

Czy chciałbyś otworzyć stronę internetową z poziomu filmu Flasha? Nie ma problemu. Do tego właśnie służy akcja Get URL. Akcja ta pozwala tworzyć we Flashu konwencjo­nalne hiperłącza. Jest ona niemal identycznym odpowiednikiem znacznika Anchor języka HTML, z tym że pozwala również przesyłać elementy formularzy. Ak­cja Get URL może służyć do łączenia się ze standardową stroną internetową, z witryną FTP, z innym filmem Flasha, z programem wykonywalnym, ze skryptem CGI lub ja­kim­kol­wiek elementem dostępnym w Internecie bądź lokalnym systemie plików. Akcja Get URL posiada trzy parametry, znane wszystkim projektantom sieciowym (pierwszy parametr, URL, jest niezbędny do działania akcji):

http://www.mojastrona.com/

ftp://ftp.mojastrona.com/pub/dokumenty.zip

menu.html

/cgi-bin/processform.cgi

Akcja Get URL Flasha 4 i Flasha 5 może się łączyć z dokumentami internetowymi z poziomu samodzielnego odtwarzacza Flasha. Wywołanie akcji Get URL w samodzielnym odtwarzaczu powoduje otwarcie zewnętrznej przeglądarki sieciowej, która wczytuje i wyświetla dokument spod podanego adresu URL (zobacz rysunek 17.7).

0x01 graphic

Rysunek 17.7. Akcja getURL i jej parametry

(((uwaga))) Oknom ramek, podobnie jako oknom JavaScript, można przypisywać nazwy. Opatrzone nazwami okna można adresować, wpisując nazwę okna w polu Window. Na przykład, gdy utworzyłeś ramkę, korzystając z definicji <FRAME NAME="main"…>, możesz z poziomu Flasha wczytać dokument spod adresu URL i umieścić go w ramce „main”.

(((wskazówka))) Akcja Get URL działa w środowisku testowym Flasha. Zarówno samodzielne odtwarzacze, jak i środowisko testowe (otwierane za pomocą polecenia Control/Test Movie) umożliwia otwieranie zewnętrznych i lokalnych dokumentów o podanych w filmie adresach URL.

W tym podrozdziale skupiliśmy się na akcjach kategorii Basic Actions. Być może zauważyłeś, że nazewnictwo akcji stosowane w tej kategorii nie pokrywa się z zapisem akcji w skryptach. W tabeli 17.1 zebraliśmy nazwy omówionych akcji kategorii Basic Actions i odpowiadającą im notację w skryptach. W dalszej części książki, gdy będziemy tworzyć bardziej zaawansowane skrypty, niezbędna będzie znajomość poprawnego zapisu akcji w skryptach. W części V, „Programowanie w języku ActionScript”, dowiesz się, jak tworzyć skrypty samodzielnie, bez wydatnej pomocy edytora skryptów (jednym z elementów tej pomocy jest właśnie kategoria akcji Basic Actions — występuje ona tylko w trybie Normal Mode, nie występuje zaś w bardziej zaawansowanym trybie Expert Mode).

Tabela 17.1.
Akcje kategorii Basic Actions i odpowiadający im zapis akcji w skryptach

Nazwa akcji (Basic Actions)

Zapis akcji w skryptach

Argumenty

Go To

(opcja Go to and Play niezaznaczona)

gotoAndStop(argumenty);

Ujęcie docelowe (etykieta ujęcia, jego numer lub wyrażenie)

Go To

(opcja Go to and Play zaznaczona)

gotoAndStop(argumenty);

Ujęcie docelowe (etykieta ujęcia, jego numer lub wyrażenie)

Go To

(opcja Next Frame)

nextFrame();

Brak

Go To

(opcja Previous Frame)

prevFrame();

Brak

Go To

(opcja <next scene>)

nextScene();

Brak

Go To

(opcja <previous scene>)

prevScene();

Brak

Play

play();

Brak

Stop

stop();

Brak

Toggle High Quality

toggleHighQuality();

Brak

Stop All Sounds

stopAllSounds();

Brak

Get URL

getURL(argumenty);

Adres URL, docelowa ramka lub okno, metoda przesyłania zmiennych

Uruchamianie akcji za pomocą detektorów zdarzeń

Poznane sześć akcji z kategorii Basic ActionsGo To, Play, Stop, Toggle High Quality, Stop All Sounds i Get URL — wystarcza do utworzenia interesującego interaktywnego filmu Flasha. Lecz akcje te nie są w stanie samodzielnie zbudować interaktywności. Konieczne jest określenie sytuacji, w jakich mają one być wykonywane. Do tego celu służą detektory zdarzeń. Detektory zdarzeń określają warunki, jakie muszą wystąpić, by została uruchomiona akcja (lub blok akcji). Na przykład możesz sprawić, by kliknięcie przy­cisku za pomocą myszy powodowało uruchomienie akcji Play lub by program zatrzymał odtwarzanie filmu po osiągnięciu określonego ujęcia na listwie czasowej. Two­rzenie interaktywności w filmach polega na ustaleniu, jakie zdarzenia mają być wy­krywane (może to być kliknięcie myszy, wciśnięcie klawisza na klawiaturze bądź inne zdarzenie) i utworzeniu odpowiedniego detektora zdarzenia oraz wyszczególnie­niu akcji, które powinny być wykonane po zajściu określonego zdarzenia.

Zanim przystąpimy do szczegółowego omówienia poszczególnych detektorów zdarzeń, zobaczmy jak detektor zdarzenia współdziała z akcją, tworząc skrypt obsługujący działanie przycisku.

Akcja i detektor zdarzenia w skrypcie przycisku

Przyjmijmy, że utworzyłeś krótki zapętlony film przedstawiający obracający się szkielet sześcianu. Zamierzasz umieścić w filmie przycisk, służący do zatrzymywania animacji obracającego się sześcianu. Oto co powinieneś zrobić.

(((cd-rom))) W tym ćwiczeniu możesz posłużyć się plikiem rotatingCube.fla, zapisanym w katalogu ch17 na naszym CD-ROM-ie. Gotowa wersja ćwiczenia jest zapisana w pliku rotatingCube_complete.fla.

  1. Otwórz swój film Flasha (plik .FLA) i utwórz w nim nową warstwę o nazwie button.

  2. Umieść na tej warstwie przycisk. (Możesz otworzyć standardową bibliotekę przycisków Flasha, wybierając polecenie Window/Common Libraries/Buttons i użyć na przykład przycisku VCR Stop z folderu (circle) VCR Button Set).

  3. Otwórz panel Instance dla przycisku (rysunek 17.8) — zaznacz klon przycisku na obrazie i wybierz polecenie Modify/Instance (klawisze Ctrl+I lub Command+I). Jeśli panel Instance był już otwarty, wybranie tego polecenia spowoduje jego zamknięcie. W takim przypadku po prostu ponownie wybierz to samo polecenie, by ponownie otworzyć panel. Gdy przycisk jest zaznaczony, sprawdź czy w polu Behavior jest ustawiona opcja Button. Jeśli jest ustawiona inna opcja, zmień ją na opcję Button.

0x01 graphic

Rysunek 17.8. Panel Instance i przycisk zaznaczony na obrazie

(((wskazówka))) Zaznaczanie i modyfikowanie przycisków może być utrudnione, jeśli są one uaktywnione w środowisku edycyjnym Flasha. Aby nie utrudniać sobie edycji przycisków, nie włączaj opcji Control/Enable Simple Buttons.

  1. Otwórz edytor skryptów (klawisze Ctrl+Alt+A lub Option+Command+A) i rozwiń kategorię Basic Actions. W lewym oknie pojawi się lista podstawowych akcji Flasha.

  2. Kliknij dwukrotnie akcję On Mouse Event lub przeciągnij ją do prawego okna (okna skryptu). W dolnej części edytora skryptów pojawi się zestaw parametrów akcji On Mouse Event. Zestaw ten zawiera wszystkie zdarzenia wykrywane przez ten detektor — są to zdarzenia przycisków (oraz jedno zdarzenie polegające na wciśnięciu klawisza na klawiaturze).

  3. Domyślnie w polu Event jest włączona opcja Release (rysunek 17.9). Zdarzenie release jest jednym ze zdarzeń związanych z kliknięciem przycisku za pomocą myszy (drugim zdarzeniem związanym z kliknięciem jest zdarzenie press; zdarzenia te dokładnie omówimy w dalszej części rozdziału, w sekcji „Detektory zdarzeń we Flashu”). Zwróć uwagę, że nazwa zdarzenia zaznaczonego w polu Event pojawia się jako argument detektora on() w skrypcie. W ten sposób powstaje detektor, który reaguje na określone zdarzenie, uruchamiając zagnieżdżoną w nim akcję lub blok akcji. Pozostaje nam tylko określić, jaka akcja powinna zostać wykonana po wykryciu zdarzenia release. Innymi słowy, musimy zagnieździć akcję wewnątrz detektora on (release), umieszczając ją pomiędzy jego nawiasami klamrowymi.

0x01 graphic

Rysunek 17.9. Skrypt zawiera detektor zdarzenia release

  1. Wypróbujmy inną metodę umieszczania akcji w skrypcie. Zaznacz górną linię skryptu, on (release) {. Następnie kliknij ikonę ze znakiem + (plus) w lewym górnym narożniku edytora skryptów, by rozwinąć menu z akcjami. Wybierz akcję Stop z kategorii Basic Actions. Program umieści akcję stop pomiędzy klamrami detektora on (release). Skrypt powinien wyglądać tak:

on (release){

stop();

}

Akcja Stop, reprezentowana w skrypcie przez zapis stop(); (rysunek 17.10), mieści się pomiędzy klamrami detektora on(release), które oznaczają początek i koniec bloku akcji, wykonywanego po wykryciu zdarzenia release (pomiędzy klamrami można umieścić dowolną liczbę akcji). Każda akcja skryptu kończy się znakiem średnika ;.

0x01 graphic

Rysunek 17.10. Ten skrypt przycisku sprawia, że przycisk po kliknięciu zatrzymuje odtwarzanie głównego filmu

(((wskazówka))) W tym przykładzie detektor zdarzenia umieściliśmy w skrypcie przed dodaniem akcji. Pomogło nam to zilustrować rolę każdego z opisanych elementów. Jednak podczas rzeczywistego tworzenia skryptów możesz także dodawać akcje bez uprzedniego definiowania detektora zdarzenia — w takim wypadku, gdy akcje są definiowane dla przycisków, Flash automatycznie umieszcza w skrypcie detektor zdarzenia release.

Nasz film zawiera teraz przycisk, który służy do zatrzymywania odtwarzania filmu. Wybierz polecenie Control/Test Movie, by sprawdzić czy przycisk działa poprawnie. Tworząc wszelkie interaktywne elementy filmu, będziemy stosowali takie same zasady jak w powyższym przykładzie — wybierzemy zdarzenie, które będzie uruchamiało akcję (lub blok akcji) a następnie umieścimy tę akcję wewnątrz detektora zdarzenia.

W pierwszej części rozdziału poznałeś sześć podstawowych akcji. Teraz omówimy detektory zdarzeń, które mogą posłużyć do uruchamiania tych akcji.

Detektory zdarzeń we Flashu

We Flashu wyróżniamy trzy podstawowe detektory zdarzeń. Wykrywają one oddziaływania myszy na przyciski (manipulację przyciskami), wciśnięcia klawiszy na klawiaturze oraz wejście do określonego ujęcia kluczowego na listwie czasowej.

(((uwaga))) We Flashu 5 wprowadzono nowe detektory zdarzeń, takie jak onClipEvent (detektor zdarzeń klipów filmowych) oraz XML.loaded i XMLSocket.onConnect (związane z obsługą języka XML). Nowa wersja Flasha oferuje również obiekt Key i jego metody (na przykład Key.isDown i Key.isToggled), umożliwiające wykrywanie wciśniętych klawiszy na klawiaturze. Elementy te omówimy w dalszych rozdziałach.

Manipulacja przyciskami

Detektor reagujący na oddziaływanie użytkownika na przyciski — detektor On Mouse Event — bada położenie i ruch kursora myszy. Gdy kursor myszy znajdzie się nad aktywnym obszarem przycisku (zdefiniowanym przez jego ujęcie Hit), zmienia się z symbolu strzałki na symbol rączki. W tym czasie przycisk przyjmuje stan Over (kursor nad przyciskiem). Gdy kursor myszy nie znajduje się nad obszarem przycisku, mówimy że znajduje się poza obszarem przycisku. Gdy kursor myszy jest przesuwany poza obszarem przycisku i jednocześnie jest wciśnięty klawisz myszy, mówimy o przeciąganiu.

(((nowość))) Detektory zdarzeń i skrypty przycisków są przypisywane klonom przycisków na obrazie, nie są zaś umieszczane w czterech specyficznych ujęciach na listwach czasowych przycisków. Flash 5 nie umożliwia umieszczania skryptów na listwie czasowej przycisku.

Oto zdarzenia wykrywane przez detektor On Mouse Event, związane z oddziaływaniem myszy na przyciski w dokumencie Flasha.

Zdarzenie Press

Pojedyncze kliknięcie myszy można podzielić na dwie operacje: wciś­nięcie klawisza myszy (press) oraz jego zwolnienie (release). Zdarzenie press zacho­dzi wówczas, gdy kursor myszy znajduje się nad obszarem Hit przycisku i zostaje wyk­ryte wciśnięcie klawisza myszy. Zdarzenie press jest przydatne w przyciskach związanych ze stylem, takich jak przełączniki. Stosowanie zdarzenia press nie jest jednak zalecane w przypadku ważnych ope­racji wykonywanych przez użytkownika (takich jak nieodwracalne decyzje i główne operacje nawigacyjne), ponieważ zdarzenie to nie daje użytkownikowi możliwości cof­nięcia swojej decyzji.

Zdarzenie Release

Zdarzenie release zachodzi wówczas, gdy kursor myszy znajduje nad obszarem Hit przycisku i zostaje wykryte najpierw wciśnięcie, a następnie zwolnienie klawisza myszy. Dokładniej, zdarzenie to zachodzi dopiero w chwili zwolnienia tego klawisza. Zdarzenie release jest standardowym zdarzeniem związanym z kliknięciem myszy i jest Flash umieszcza je jako domyślny parametr detektora On Mouse Event.

Zdarzenie Release Outside

Zdarzenie to zachodzi po wykryciu następującej sekwencji operacji: kursor myszy zosta­je umieszczony nad obszarem Hit przycisku; użytkownik wciska klawisz myszy; kursor myszy zostaje przeciągnięty poza obszar Hit przycisku; użytkownik zwalnia klawisz myszy (zdarzenie zachodzi w chwili zwolnienia klawisza). Zdarzenie releaseOutside można interpretować jako rezygnację z kliknięcia przycisku — możemy sprawić, by również w takim przypadku film Flasha zareagował w określony sposób na działania użytkownika.

Zdarzenie Roll Over

Zdarzenie rollOver zachodzi wówczas, gdy kursor myszy zostanie umieszczony nad obszarem Hit przycisku, bez wciskania klawisza myszy.

(((odnośnik))) Detektor zdarzenia rollOver nie powinien być używany do zmiany wyglądu przycisku po umieszczeniu nad nim kursora (takiej jak efekt „aktywacji” — na przykład rozświetlenia czy powiększenia przycisku). Tego typu wizualne zmiany realizujemy za pomocą ujęcia Over przycisku, o czym pisaliśmy w rozdziale 9., „Biblioteka Flasha — symbole i klony”. Detektor rollOver służy wyłącznie do uruchamiania akcji.

Zdarzenie Roll Out

Zdarzenie rollOut zachodzi wówczas, gdy kursor myszy znajdujący się nad obszarem Hit przycisku zostaje przesunięty poza ten obszar, bez wciskania klawisza myszy.

Zdarzenie Drag Over

Zdarzenie to zachodzi po wykryciu następującej sekwencji operacji: klawisz myszy jest wciśnięty w czasie, gdy kursor myszy znajduje się nad obszarem Hit przycisku; kursor myszy zostaje przeciągnięty poza obszar Hit przycisku (klawisz myszy wciąż wciśnięty); kursor myszy powraca nad obszar Hit przycisku (klawisz myszy wciąż wciśnięty; zdarzenie zachodzi w chwili ponownego umieszczenia kursora nad przyciskiem). Zdarze­nie to jest stosowane raczej rzadko, może jednak służyć do tworzenia specjalnych funkcji interaktywnych, takich jak ukryte funkcje w grach.

Zdarzenie Drag Out

Zdarzenie to zachodzi po wykryciu następującej sekwencji operacji: klawisz myszy zostaje wciśnięty w czasie, gdy kursor myszy znajduje się nad obszarem Hit przycisku; kursor myszy zostaje przeciągnięty poza obszar Hit przycisku (klawisz myszy nadal wciśnięty; zdarzenie zachodzi w chwili przeciągnięcia kursora poza obszar przycisku). Zdarzenie to najczęściej służy do rozpoczynania przeciągania elementu interaktywnego.

Obsługa klawiatury — zdarzenie Key Press

Detektor On Mouse Event oprócz zdarzeń związanych z oddziaływaniem myszy na przyciski wykrywa również zdarzenia polegające na wciśnięciu określonego klawisza na klawiaturze. Implementacja detektora zdarzenia keyPress może być nieco myląca — aby wykrywać to zdarzenie, musisz umieścić na obrazie przycisk, w ujęciu w którym chcesz wykrywać wciśnięcie klawisza na klawiaturze. Następnie przypisujesz temu przyciskowi skrypt z detektorem On Mouse Event, jako parametr Event wybierasz opcję Key Press. Wreszcie w polu tekstowym Key Press wpisujesz klawisz, którego wciśnięcie chcesz wykrywać.

(((wskazówka))) Jeśli używasz przycisku wyłącznie w celu umieszczenia detektora zdarzenia keyPress w filmie i nie chcesz, by sam przycisk był widoczny na obrazie, upewnij się, że wszystkie ujęcia przycisku są puste (skorzystaj z trybu edycji symboli).

Detektor zdarzenia keyPress, wprowadzony we Flashu 4, otwiera wiele możliwości w filmach Flasha. Filmy mogą zawierać narzędzia nawigacji oparte na klawiaturze, przyciski w filmie mogą posiadać skróty klawiszowe zwiększające wygodę użytkowania, zaś gry mogą zawierać obiekty sterowane za pomocą klawiatury (takie jak statki kosmiczne czy postacie animowane). Pamiętaj jednak o pewnych ograniczeniach dotyczących klawiatury, specyficznych dla detektora On Mouse Event. Jeśli planujesz utworzyć ambitny projekt intensywnie korzystający z klawiatury, rozpocznij od przejrzenia poniższej listy potencjalnych problemów:

(((uwaga))) Aby możliwe było funkcjonowanie klawiszy w filmie Flasha, użytkownik musi kliknąć w dowolnym miejscu filmu przynajmniej jeden raz.

(((uwaga))) We Flashu 5 wprowadzono nowy obiekt Key, którego metody dają znacznie większe możliwości wykrywania wciśnięć klawiszy, niż detektor on(keyPress). Obiekt Key jest omówiony w instrukcji „Macromedia ActionScript Reference Guide” (dostarczanej wraz z Flashem) na stronach 279 - 288.

Ujęcia kluczowe

Gdy ujęcie kluczowe zawiera skrypt, skrypt ten jest wykonywany w chwili osiągnięcia tego ujęcia kluczowego (a dokładnie w chwili wejścia do niego). Dlatego wejście do ujęcia kluczowego traktujemy jako zdarzenie, uruchamiające ewentualny skrypt w nim. Zdarzenie to zachodzi za każdym razem, gdy program wchodzi do ujęcia kluczowego, niezależnie od tego czy jest to wynikiem naturalnej kolejności odtwarzania ujęć, czy też wynikiem przejścia z innego ujęcia filmu po wykonaniu akcji Go To. Możesz na przykład umieścić w ujęciu kluczowym akcję Stop, aby zatrzymać odtwarzanie filmu w chwili wejścia do tego ujęcia kluczowego.

Niektóre aplikacje multimedialne rozróżniają dwa różne zdarzenia związane z ujęciami kluczowymi — jedno z nich polega na wejściu do ujęcia kluczowego, zaś drugie na wyjściu, czyli opuszczeniu ujęcia kluczowego. We Flashu dostępne jest tylko jeden rodzaj zdarzeń związanych z ujęciami kluczowymi — wejście do ujęcia kluczowego. Dlatego w skryptach ujęć nie jest konieczne umieszczanie żadnych dodatkowych detektorów zdarzeń, by skrypty te zostały wykonane. Skrypt jest wykonywany w chwili wejścia do ujęcia kluczowego, ponieważ wiadomo, że w tej chwili zaszło wymagane zdarzenie. Jak wspomnieliśmy wcześniej, we Flashu 5 wprowadzono nowy detektor onClipEvent, który wykrywa zdarzenia związane z klipami filmowymi. Jedna z wersji tego detektora — onClipEvent(enterFrame) — również jest związana z osiąganiem ujęć listwy czasowej. Ten nowy detektor omówimy w rozdziale 19., „Sterowanie klipami filmowymi”.

(((wskazówka))) Złożone filmy mogą zawierać nawet setki akcji i skryptów umieszczonych w ujęciach kluczowych. Aby uniknąć konfliktów pomiędzy poszczególnymi skryptami ujęć, jest wysoce wskazane, aby utworzyć oddzielną warstwę przeznaczoną wyłącznie na skrypty ujęć. Nadaj takiej warstwie znaczącą nazwę, taką jak actions (lub skrypty) i umieść ją na szczycie stosu warstw, aby ułatwić sobie dostęp do niej. Pamiętaj, by nie umieszczać na niej żadnych elementów graficznych, klonów symboli ani tekstu. Podobnie możesz utworzyć oddzielną warstwę, której jedynym zadaniem będzie przechowywanie etykiet ujęć.

Podsumowanie

--> A dokładniej klon przycisku lub klon klipu filmowego. W dalszej części tekstu wielokrotnie będziemy używać terminu „przycisk” zamiast dłuższego „klon przycisku” oraz „klip filmowy” zamiast dłuższego „klon klipu filmowego”, jeśli tylko nie będzie to prowadziło do dwuznaczności. Pamiętajmy jednak, że na obrazie zawsze znajdują się klony symboli, zaś same symbole znajdują się w bibliotece (przyp. tłum.).

Sama akcja Play nie umożliwia zmiany prędkości odtwarzania klatek. Do tego celu służy parametr Frame Rate w oknie Movie Properties (przyp. tłum.).

Zdarzenie to polega na tym, że użytkownik umieszcza kursor myszy nad przyciskiem, wciska klawisz myszy na następnie go zwalnia. Zdarzenie release zachodzi w chwili zwolnienia klawisza myszy (przyp. tłum.).

2 Część I Podstawy obsługi systemu WhizBang (Nagłówek strony)

2 Dokument3

DO SKŁADU> To ostrzeżenie składa się z dwóch akapitów.

DO KOREKTY MERYTORYCZNEJ> Lecz nie właściwością _highquality, która też jest wycofywana.

DO KOREKTY MERYTORYCZNEJ> W plikach w katalogu ch25 nie znalazłem żadnego pliku, który zawierałby obiekt Key. Usuwam środkowe zdanie, które odsyła do tych plików.



Wyszukiwarka