Części składowe języka HTML
|
Niezależne listwy czasowe symbolów klipów filmowych umożliwiają tworzenie skomplikowanych schematów nawigacyjnych (rys. 5.1). W czasie odtwarzania zawartości głównej listwy czasowej, mogą być jednocześnie odtwarzane filmy z pozostałych listew czasowych, oddziałując na siebie i określając, które klatki mają być odtwarzane lub też kiedy przerwać odtwarzanie. Tak naprawdę, powszechna jest praktyka wprowadzania do sceny wielu klipów filmowych oddziałujących między sobą, podczas gdy listwa czasowa głównego filmu zawiera tylko jedną klatkę, niezbędną do zadziałania całości. Oczywiście, nawigowanie pomiędzy poszczególnymi listwami czasowymi odbywa się przy udziale języka ActionScript. Podstawowe akcje, używane do nawigowania wzdłuż głównej listwy czasowej (Go To, Stop i Play), mogą być także używane do nawigowania listwą czasową dowolnego klipu filmowego. Jest to możliwe z uwagi na to, że klipy filmowe stanowią część predefiniowanych we Flashu klas klipów filmowych, umożliwiając ci pracę z klipami filmowymi jako obiektami. To, że klip filmowy jest jednocześnie symbolem oraz obiektem, czyni go unikalnym w sposobie funkcjonowania i tworzenia. Jako klon symbolu, klip filmowy może być wykorzystany w pętlach animacji i animowanych przyciskach. Kiedy jest obiektem, możesz wywoływać jego metody, potrzebne do kontrolowania, odtwarzania lub szacowania właściwości wpływających na sposób pojawiania się klipu. Klipy filmowe tworzy się i przechowuje w bibliotece - podobnie jak inne symbole. Jednak używanie ich jako obiektów wymaga przygotowania ich klonów. Po jednokrotnym utworzeniu klonu, obiekt klipu filmowego staje się dostępny dla wszystkich metod i właściwości klasy klipów filmowych.
|
Rys. 5.1. Film może zawierać wiele listew czasowych oddziałujących na siebie nawzajem. Powyższy przykład przedstawia scenę Scene 1 jako główną listwę czasową. Składają się na nią dwa klipy filmowe: jeden z nich zawiera drugi. Strzałki prezentują tylko kilka z możliwych kierunków komunikacji
|
Rys. 5.2. Tworzenie klonu symbolu klipu filmowego oraz tworzenie klonu obiektu Date
Rys. 5.3. Ustawienia w palecie Instance dla klipu filmowego. Nazwa tego obiektu klipu filmowego to myCircle
|
Nazywanie klonów Tworzenie klonu twojego symbolu klipu filmowego zawiera się w dwóch krokach: umieszczenie klonu na scenie, a następnie nadanie mu nazwy. Daje to taki sam efekt, jaki inne obiekty Flasha osiągają przy pomocy funkcji konstruktora (rys. 5.2). Otrzymujemy więc nazwany obiekt lub klon, stworzony na podstawie klasy. Można go później używać przez wywołanie jego metod lub szacowanie jego właściwości.
W celu
Od teraz klon klipu filmowego może być identyfikowany w środowisku ActionScript za pomocą utworzonej nazwy.
|
|
Rys. 5.4. Nazwa symbolu klipu filmowego pojawia się w bibliotece, podczas gdy nazwa klipu widnieje na palecie Instance
|
Ścieżka dostępu jest w zasadzie nazwą obiektu, ewentualnie grupą nazw obiektów oddzielonych kropkami, co pozwala Flashowi określić, gdzie znajduje się wskazany obiekt. Przejście do edycji listwy czasowej klipu filmowego wymaga podania ścieżki dostępu do tego klipu oraz podstawowej akcji. Ścieżka dostępu wskazuje na miejsce, w którym należy szukać klonu klipu filmowego, natomiast akcja decyduje o tym, co Flash ma z owym klonem zrobić. Podstawowe akcje kontrolujące proces odtwarzania to Go To, Play i Stop.
|
Na przykład, jeśli nadałeś dla klonu klipu filmowego nazwę bigClock, to napisanie wyrażenia języka ActionScript bigClock.gotoAndStop(37) spowoduje przejście do klatki 37. klonu klipu filmowego bigClock i zatrzymanie odtwarzania. W przykładzie tym ścieżką dostępu jest bigClock, a akcją gotoAndStop. W bloku edycji parametrów palety akcji znajduje się ikona przycisku o nazwie Insert a target path, otwierająca okno dialogowe Insert Target Path, a to z kolei pozwala wprowadzić ścieżkę dostępu (rys. 5.5). W oknie tym ukazuje się drzewo hierarchiczne wszystkich klonów klipów filmowych. Wystarczy wybrać pożądany klip, a pojawi się właściwa dla niego ścieżka dostępu.
|
Rys. 5.5. Okno dialogowe Insert Target Path umożliwia wybranie ścieżki dostępu przez kliknięcie ikony klipu filmowego widocznego w hierarchii
|
Przycisk na głównej listwie czasowej będzie kontrolował listwę czasową klipu filmowego.
|
Rys. 5.6. Klony przycisku i klipu filmowego na głównej listwie czasowej
Rys. 5.7. Użyj wyrażenia evaluate dla określenia ścieżki dostępu do klipu oraz odpowiedniej dla niego akcji
Rys. 5.8. Okno dialogowe Insert Target Path. Wybór klipu filmowego widocznego w oknie hierarchii powoduje podstawienie ścieżki dostępu w polu Target
|
Rys. 5.9. Pole Expression palety akcji
Rys. 5.10. Akcja gotoAndStop(37) stanowi metodę obiektu klipu filmowego o nazwie bigClock. Wyrażenie to powoduje przejście do klatki 37. na listwie czasowej klipu bigClock i zatrzymanie odtwarzania
Rys. 5.11. Umieść klon klipu filmowego smallClock wewnątrz klipu bigClockMC. Osadzonemu klonowi klipu filmowego nadaj nazwę smallClock, a klonowi klipu - widocznego na scenie - nazwę bigClock. Teraz bigClock jest rodzicem, a smallClock - dzieckiem
|
Możliwe jest także umieszczanie jednego klipu filmowego w drugim. W takim układzie jeden z nich pełni rolę obiektu-rodzica, a drugi jest obiektem-dzieckiem. Jakiekolwiek zmiany dokonane na obiekcie-rodzicu będą miały wpływ jednocześnie na obiekt-dziecko. Jeśli chciałbyś kontrolować listwę czasową klipu filmowego-dziecka z poziomu głównej listwy czasowej, w ścieżce dostępu muszą znaleźć się nazwy zarówno dziecka, jak i rodzica.
W celu utworzenia ścieżki dostępu
|
|
Rys. 5.12. Drzewo hierarchii obiektów w oknie dialogowym Insert Target Path. Hierarchia ta ukazuje relacje rodzic-dziecko
Rys. 5.13. Kliknięcie przycisku (u góry) powoduje skok do klatki 5. klipu filmowego-dziecka smallClock i zatrzymanie odtwarzania, podczas gdy odtwarzanie klipu filmowego-rodzica bigClock jest cały czas kontynuowane
|
|
Względne i bezwzględne ścieżki dostępu W oknie dialogowym Flasha Insert Target Path możesz wybierać pomiędzy dwiema opcjami: Relative (względnie) oraz Absolute (bezwzględnie). W poprzednim przykładzie, metoda bigClock.smallClock. gotoAndStop(5) pochodziła od przycisku rezydującego w głównej listwie czasowej. Kiedy Flash wykonuje tę akcję, próbuje odnaleźć w tej listwie obiekt o nazwie bigClock, zawierający w sobie inny obiekt, nazwany smallClock. Jest to przykład ścieżki korzystającej z trybu Relative. Wszystko jest względne w stosunku do miejsca, w którym rezyduje wyrażenie akcji - w tym przypadku jest to główna listwa czasowa. Alternatywną metodą wstawiania ścieżki dostępu jest użycie trybu Absolute, w którym nie istnieje żadne ujęcie odniesienia. Można przyjąć, że względne (Relative) ścieżki dostępu są jak wytyczne podawane z punktu widzenia twojej bieżącej lokacji, w rodzaju „idź dwa bloki dalej, a potem skręć w lewo”. Natomiast bezwzględne (Absolute) ścieżki dostępu działają niezależnie od miejsca, w którym się znajdujesz, przypominając wskazówkę „udaj się na ul. Chopina 6”. W jakim celu umożliwiono ci wybór pomiędzy tymi dwoma trybami? Otóż, gdybyś chciał wskazać ścieżkę dostępu do listwy czasowej znajdującej się na wyższym poziomie względem listwy, nad którą aktualnie pracujesz, musisz posłużyć się trybem Absolute. Wyobraź sobie na przykład, że chciałbyś, aby jakiś klip filmowy kontrolował główną listwę czasową, tą, w której rezyduje. Tryb Relative udostępniłby ci jedynie listwy czasowe zawierające się w aktywnej w tym momencie listwie. Dopiero w trybie Absolute widziałbyś wszystkie dostępne listwy czasowe, niezależnie od poziomu, na jakim się aktualnie znajdujesz. Tryb Absolute daje ci niejako widok z lotu ptaka jednocześnie na wszystkie klipy filmowe obecne na scenie. |
W trybie Relative bieżąca listwa czasowa nosi nazwę this. Wszystkie inne listwy czasowe są względne wobec this. W trybie Absolute, listwa czasowa głównego filmu jest nazywana _root, a wszystkie inne listwy są zorganizowane względem listwy czasowej _root (rys. 5.14).
W celu utworzenia ścieżki dostępu
|
Rys. 5.14. Ścieżki dostępu w trybach Absolute oraz Relative. Powyższy przykład ukazuje przycisk oraz klip filmowy smallClock, zawarte w klipie filmowym bigClock. Kiedy przypisujemy ścieżkę dostępu do przycisku, this w trybie Relative odnosi się do bigClock w trybie Absolute
Rys. 5.15. Umieść klon przycisku wewnątrz klipu filmowego bigClock. Klon klipu filmowego (o nazwie bigClock) znajduje się na scenie
Rys. 5.16. Pole Expression na palecie akcji
|
Rys. 5.17. Przycisk wewnątrz klipu filmowego bigClock powoduje przeskok do klatki 2. na listwie _root lub głównej listwie czasowej
Rys. 5.18. Dwa klipy filmowe (z przyciskiem wewnątrz jednego z nich) umieszczone na scenie
Rys. 5.19. Akcja przypisana do tego przycisku jest wykonywana względem klipu filmowego secondClock rezydującego w listwie czasowej _root |
W celu utworzenia ścieżki dostępu
Przycisku tego użyjesz do kontrolowania drugiego klipu filmowego (rys. 5.18).
W polu Expression palety akcji pojawi się ścieżka dostępu _root.secondClock.
Kiedy klikniesz i zwolnisz przycisk, Flash odszuka listwę czasową _root, a następnie przejdzie do obiektu o nazwie secondClock i wykona przypisaną mu akcję (rys. 5.19).
|
Przycisku tego użyjesz do kontrolowania listwy czasowej klipu filmowego (rys. 5.20).
lub Kliknij przycisk Insert a target path, a otworzy się okno dialogowe Insert Target Path. Wybierz tryb Absolute i zaznacz ścieżkę dostępu _root. lub Nie wybieraj akcji evaluate w punkcie 3. Zamiast tego, po prostu wybierz którąkolwiek z podstawowych akcji - Go To, Stop lub Play (rys. 5.21). Wskazówka
|
Rys. 5.20. Umieść przycisk wewnątrz klipu filmowego bigClockMC. Klon klipu filmowego (o nazwie bigClock) znajduje się na scenie
Rys. 5.21. Trzy sposoby na utworzenie ścieżki dostępu do listwy czasowej klipu bigClock - z poziomu tego właśnie klipu filmowego
|
Rys. 5.22. Umieść przycisk wewnątrz klipu filmowego smallClock. Klon klipu filmowego smallClockMC (o nazwie smallClock) znajduje się wewnątrz klipu bigClockMC. Klon klipu filmowego bigClockMC (o nazwie bigClock) znajduje się na scenie
Rys. 5.23. Przycisk wewnątrz klipu filmowego smallClock tworzy ścieżkę dostępu do klipu filmowego bigClock za pomocą wyrażenia określającego względność _parent
|
Używanie terminu _parent Chociaż niewidoczny w oknie dialogowym Insert Target Path, termin określający względność _parent może być przez ciebie używany do tworzenia ścieżek dostępu do klipu filmowego, usytuowanego o jeden poziom wyżej w stosunku do bieżącej listwy czasowej.
W celu utworzenia ścieżki dostępu
Kiedy klikniesz i zwolnisz przycisk, Flash odszuka listwę czasową bieżącego obiektu (rodzica) i wykona określoną tam akcję (rys. 5.23). W tabeli 5.1 oraz na rys. 5. 24 znajdziesz podsumowanie sposobów na tworzenie względnych i bezwzględnych ścieżek dostępu do różnych klipów filmowych.
|
Po co w ogóle używać ścieżek względnych? Bezwzględne ścieżki dostępu wydają się tworzyć bezpieczniejsze konstrukcje, ponieważ jasno identyfikują obiekt niezależnie od tego, na jakim poziomie projektu się znajdujesz. Są jednak co najmniej dwa przypadki, kiedy ścieżki względne bywają użyteczne. Po pierwsze, kiedy tworzysz klip filmowy z akcjami oddziałującymi na inne klipy filmowe względne w stosunku do pierwszego klipu, możesz przemieszczać całą grupę i ciągle zachowywać działające ścieżki dostępu, używające terminów określających względność. W takiej sytuacji znacznie łatwiej jest pracować ze złożonymi schematami nawigacji, jako że możliwe staje się kopiowanie, wklejanie i przemieszczanie poszczególnych fragmentów bez przepisywania ścieżek dostępu. Przykładem zastosowania może być zarządzanie witryną sieciową zawierającą łącza do innych stron. Jeśli miałeś zamiar utworzyć bezwzględne ścieżki dostępu do łączy zawierających twoje CV, a następnie przenieść twoją stronę domową na inny serwer, to musiałbyś przepisać ścieżki dla poszczególnych łączy. Bardziej praktyczną metodą jest utworzenie łączy na stronie domowej za pomocą względnych ścieżek dostępu. Drugi przypadek ma miejsce wówczas, gdy dynamicznie tworzysz klipy filmowe. Wkrótce nauczysz się, jak tworzyć obiekty klipów filmowych na bazie istniejących klipów i nadawać im nazwy „w locie” za pomocą języka ActionScript. W takich sytuacjach klipy filmowe nie pozostają statyczne i względne ścieżki dostępu potrzebne są do tego, żeby je wszystkie ogarnąć. |
Rys. 5.24. Ilustracja filmu zawierającego kilka różnych klipów filmowych. Główna listwa czasowa (Scene 1) zawiera klipy filmowe Square oraz Circle. Klip Triangle znajduje się w klipie filmowym Circle. Nazwy te reprezentują klony. Tabela 5.1 przedstawia względne i bezwzględne ścieżki dostępu, utworzone z poziomu klipu filmowego Circle (czyli klipu, na którego poziomie aktualnie się znajdujesz)
Tabela 5.1. Względne i bezwzględne ścieżki dostępu |
||
|
Dostęp do... Ścieżka Ścieżka (z poziomu bezwzględna względna Circle) (Absolute) (Relative) |
||
|
Scene 1 |
_root |
_parent |
|
Square |
_root.Square |
_parent. Square |
|
Circle |
_root.Circle |
This |
|
Triangle |
_root.Circle. Triangle |
Triangle |
|
|
Rys. 5.25. Zagnieżdżone wyrażenia typu with stanowią odpowiednik złożonych ścieżek dostępu tworzonych w oparciu o wyrażenia evaluate
|
Używanie akcji with Jeszcze inny sposób tworzenia ścieżek dostępu do klipów filmowych polega na wykorzystaniu akcji with. Akcja ta, w odróżnieniu od evaluate, umożliwia wprowadzenie kilku akcji w miejsce jednej, które to obiekt będzie wykonywał. Wyrażenie zawierające akcję with może wyglądać np. tak: with (bigClock) { gotoAndStop (5) } Zastosowanie akcji with - jak wyżej - powoduje tymczasowe ustawienie ścieżki dostępu do obiektu bigClock, tak więc wyrażenie gotoAndStop ujęte w klamrach odnosi się do tego akurat obiektu. Po wykonaniu akcji with, jakiekolwiek pojawiające się później wyrażenie odnosi się już do bieżącego klipu filmowego. Wyrażenie with może również zostać zagnieżdżone i oddziaływać na kilka obiektów jednocześnie. Oto przykład: with (myFace) { with (myEyes) { gotoAndStop (2); } with (myMouth) { gotoAndStop (2); } } Takie zagnieżdżone wyrażenie daje taki sam efekt jak poniższe wyrażenia wykorzystujące akcję evaluate (rys. 5.25): myFace.myEyes.gotoAndStop(2); myFace.myMouth.gotoAndStop(2);
|
W celu wprowadzenia
|
Rys. 5.26. Akcja with widoczna w oknie palety akcji. Pole Object zawiera ścieżkę dostępu do obiektu myFace
|
Rys. 5.31. Opcje wyboru składni dostępne są u dołu okna dialogowego Insert Target Path
Tabela 5.2. Odpowiedniki oznaczeń w składni używającej ukośnika oraz w składni z kropką |
Ukośnik zamiast kropki Jak dotąd, w konstruowaniu ścieżek dostępu używałeś kropki do oddzielania zagnieżdżonych obiektów klipów filmowych. Jednak Flash umożliwia oprócz tego wprowadzanie ścieżek dostępu z ukośnikiem podstawianym w miejsce kropki. Taka składnia (z ukośnikiem) funkcjonowała w poprzednich wersjach programu, dlatego też może stanowić wygodną alternatywę dla użytkowników związanych od dawna z Flashem. W oknie dialogowym Insert Target Path możesz zdecydować, czy chcesz używać ukośnika, czy też kropki (rys. 5.31). Ukośnika używa się w sposób podobny do tego, jak komputer przedstawia organizację katalogów na dysku - z ukośnikiem właśnie, jako znakiem oddzielającym kolejne katalogi. I tak jak w przypadku komputerowych katalogów, możesz przebiegać hierarchię listew czasowych w górę lub w dół za pomocą kropek. Pojedyncza kropka wskazuje na bieżącą listwę czasową, dwie kropki - następną listwę powyżej bieżącej. Pojedynczy ukośnik pokazuje główną listwę czasową (root). Zwróć uwagę, jak w składni z ukośnikiem używa się kropek do wskazywania ścieżek względnych - widać, jak bardzo mylące może się okazać jednoczesne używanie składni z kropką oraz składni z ukośnikiem. Na szczęście Flash nie pozwala na łączenie tych dwóch składni, ponieważ zapisane w ten sposób wyrażenia byłyby niezrozumiałe. Jeśli wprowadzasz wyrażenie evaluate, wywołujące metodę Go To obiektu, w przypadku składni używającej kropki wyglądałoby to tak: Parent.Child.gotoAndStop(5); Jednak w składni używającej ukośnika funkcjonalność wyrażenia ginie, jako że nie ma sensu zapis: Parent/Child.gotoAndStop(5);
|
|
Kropka Ukośnik |
|
|
. |
/ |
|
_root |
/ |
|
this |
. |
|
_parent |
.. |
|
. |
: (separator zmiennych) |
|
|
|
|
|
|
Akcja Tell Target, podobnie jak składnia z ukośnikiem, stanowi spadek po wcześniejszych wersjach Flasha. Właściwie była to bardzo potężna w działaniu akcja, jednak nowe możliwości wywoływania metod i szacowania właściwości obiektów za pomocą składni z kropką czynią akcję Tell Target zbędną. Chociaż więc możesz wywołać akcję Tell Target z palety akcji, program traktuje ją jako odrzuconą. Odrzucone akcje nie są polecane z powodu ich niezgodności z nową składnią oraz wyrażeniami języka ActionScript. Wszystkie odrzucone akcje możesz obejrzeć w menu Options na palecie akcji (rys. 5.32). Najlepiej będzie unikać składni używającej ukośnika oraz akcji Tell Target z powodu ich silnych związków z przeszłością, a zamiast tego skoncentrować się na korzystaniu z akcji evaluate, with oraz na posługiwaniu się składnią opartą na kropce.
|
Rys. 5.32. Wybranie Show Deprecated Syntax z menu Options na palecie akcji podświetla w oknie narzędzi palety wszystkie akcje, które stanowią pozostałości poprzednich wersji Flasha, a ich dłuższe używanie nie jest polecane
|
Rys. 5.33. Klip filmowy w roli pojemnika. Ten klip zawiera akcję stop w pierwszym ujęciu kluczowym. Pozostałe - oznaczone etykietą - ujęcia kluczowe mogą przechowywać przyciski, grafikę, animacje i każdy inny rodzaj informacji charakterystyczny dla Flasha. Do tego rodzaju informacji można łatwo dotrzeć, podając ścieżkę dostępu i przeskakując do żądanego ujęcia
Rys. 5.34. Klip filmowy w formie menu rozwijanego zawiera jednocześnie dwa stany menu - rozwinięte i zwinięte
|
Klipy filmowe jako pojemniki Z tego,co dotychczas zaprezentowaliśmy w tym rozdziale, miałeś okazję nauczyć się, w jaki sposób nazywać twoje obiekty klipów filmowych, jak tworzyć do nich ścieżki dostępu oraz nawigować po ich listwach czasowych z poziomu dowolnej innej listwy czasowej twojego filmu. Ale jakie znaczenie ma ta zdolność kontrolowania listwy czasowej klipu filmowego dla prawdziwej interaktywności tworzonych projektów Flasha? Kluczem do rozwiązania tej kwestii jest potraktowanie klipów filmowych jako pojemników do przechowywania różnych elementów - animacji, przycisków, dźwięku, nawet danych. Przemieszczając się po listwie czasowej klipu filmowego do przodu i do tyłu, czy też odtwarzając poszczególne jej partie, zyskujesz dostęp do dowolnych spośród wymienionych elementów i to niezależnie od tego, co aktualnie dzieje się na scenie. W starszych wersjach Flasha używanie klipów filmowych w tym znaczeniu było jedynym sposobem na symulowanie zmiennych, liczników i innych rodzajów znaków-wypełniaczy. Chociaż więc rozbudowany we Flashu 5 język ActionScript oferuje nowoczesne zamienniki tych starych technik, ciągle efektywne jest posługiwanie się klipami filmowymi jako pojemnikami, szczególnie pojemnikami na grafikę i animację (rys. 5.33). Na przykład, powszechnym sposobem wykorzystania klipów filmowych jest wprowadzenie na ich listwy czasowe odmiennych stanów, które przechodzą jeden w drugi. W rozdziale 4. budowałeś rozwijane menu, które zachowują się właśnie w taki sposób. W ogóle menu rozwijane jest właściwie takim obiektem klipu filmowego, zmieniającym swój stan między rozwiniętym i zwiniętym. Przyciski zawarte w klipie filmowym kontrolują, który z dwóch stanów możesz aktualnie oglądać, a jednocześnie umożliwiają nawigację poza listwą czasową klipu filmowego (rys. 5.34).
|
W celu utworzenia przycisku wyboru:
Akcja stop zabezpiecza klip filmowy przed odtwarzaniem bez końca.
on (release) { gotoAndStop (on); }
on (release) { gotoAndStop (off); }
|
Rys. 5.35. Klip filmowy przycisku wyboru zawiera akcję stop w pierwszym ujęciu kluczowym i dwa zmieniające się stany. Przycisk w stanie off (u góry) powoduje przejście do stanu on (u dołu) i odwrotnie
|
Rys. 5.36. Klip filmowy z pustym pierwszym ujęciem kluczowym będzie niewidoczny na scenie. Klip ten zawiera akcję Stop w warstwie Layer 2 i grafikę w warstwie Layer 1, startującą w klatce 2
Rys. 5.37. Klon klipu filmowego z pustym pierwszym ujęciem kluczowym pojawia się w postaci pustego kółeczka
|
Wszystko, co robisz, tworząc niewidzialny przycisk, ma także zastosowanie wobec klipu filmowego. To znaczy, pierwsze widoczne dla użytkownika ujęcie kluczowe pozostawia się puste, dzięki czemu klon jest początkowo niewidoczny na scenie. Jeśli pierwsze ujęcie kluczowe klipu filmowego jest puste i zawiera akcję kontrolującą ujęcia stop, zatrzymującą odtwarzanie w tym miejscu, możesz decydować o tym, w którym momencie wyświetlić inne ujęcia z listwy czasowej tego klipu filmowego. Przykładowo, mógłbyś stworzyć klip filmowy przedstawiający eksplozję, ale zostawiając puste pierwsze ujęcie kluczowe. Umieść ten klip filmowy nad ilustracją łodzi podwodnej i w odpowiednim czasie przejdź do kolejnego ujęcia, żeby odsłonić eksplozję. Zauważ, że istnieją jeszcze inne sposoby na wykorzystanie języka ActionScript do ukrywania i odsłaniania zawartości klipu filmowego, a poznasz je w następnych rozdziałach. Jednak pamiętanie zarówno o metodzie prostej (bazującej na ujęciach, jak zilustrowano wyżej), jak i zaawansowanej (bazującej bezpośrednio na skrypcie) pomoże ci podjąć nowe wyzwania związane z tworzeniem animacji i budowaniem interaktywności.
W celu utworzenia
Klon pojawi się na scenie w postaci pustego kółeczka (rys. 5.37). Reprezentuje ono punkt środkowy klonu, dzięki czemu możliwe staje się precyzyjne umieszczenie klonu w wybranym miejscu. |
Jeden ze sposobów, w jaki obiekt klipu filmowego komunikuje się w środowisku Flasha, polega na wykorzystaniu jego własnego manipulatora zdarzeń, zwanego Clip Event (zdarzenie klipu filmowego). Miałeś już sposobność zobaczyć, jak zdarzenia myszy, zdarzenia klawiaturowe i obiekt Key wykrywają użycie myszy lub klawiatury. Zdarzenie klipu filmowego jest wyjątkowe pod tym względem, że obejmuje nie tylko reakcje czynione za pomocą myszy czy klawiatury, ale i kilka mniej oczywistych zdarzeń, w rodzaju wczytywania i usuwania klipu filmowego, odtwarzania poszczególnych klatek klipu filmowego i wczytywania do klipu dodatkowych danych z zewnątrz (rys. 5.38). Związek między tymi zdarzeniami polega na tym, że wszystkie one są przypisane do klonu klipu filmowego. Akcje wykonywane przez zdarzenia klipu filmowego są związane z tym klonem, dopóki nie ustali się inaczej. Zdarzenia klipu filmowego są używane w różnych wariacjach podstawowego kontekstu ich zastosowania. Na przykład, Mouse up, Mouse down, Key up i Key down po prostu wykrywają moment, w którym występują te podstawowe zdarzenia (odpowiednio: wciśnięcie - zwolnienie klawisza myszy, wciśnięcie - zwolnienie klawisza na klawiaturze). Jako że powyższe zdarzenia są przypisane do klipu filmowego, a nie do przycisku, nie istnieje strefa aktywna (Hit), a zdarzenia Mouse down oraz Mouse up są wykrywane w każdym punkcie sceny. Podobnie zdarzenia Key up i Key down nie zawierają specyficznej informacji o tym, który klawisz miałby być wciśnięty, więc dowolny klawisz może wyzwolić zdarzenia. Zwykle jednak zdarzenia klipu filmowego są używane w połączeniu z drugim zestawem wyrażeń ActionScript, służącym do maksymalnego wyzyskiwania zdarzeń lub dokonywania dodatkowych manipulacji informacją związaną ze zdarzeniem. |
Rys. 5.38. Opcje zdarzenia klipu filmowego dostępne dla akcji onClipEvent
|
Rys. 5.39. Zdarzenie klipu filmowego Mouse up
|
Zdarzenia Key up i Key down w kombinacji z wyrażeniami warunkowymi, sprawdzającymi, który klawisz naciśnięto (za pomocą obiektu Key), przynoszą lepsze efekty w detekcji naciśniętego klawisza, niż którekolwiek z nich - zastosowane pojedynczo. W poprzednim rozdziale, na przykład, utworzyłeś wyrażenie warunkowe z obiektem Key, ale musiałeś jednocześnie stworzyć pętlę w głównej listwie czasowej, aby wyrażenie było nieustannie sprawdzane. Po przypisaniu zdarzenia Key up lub Key down do klipu filmowego nie będziesz więcej potrzebował pętli. Zdarzenie EnterFrame jest wyzwalane zgodnie z daną prędkością odtwarzania (FPS) filmu. Tak więc, jeśli wynosi ona 12 klatek na sekundę, zdarzenie to jest wyzwalane 12 razy w ciągu sekundy. Warto zwrócić uwagę, że wyrażenia przypisane do zdarzenia EnterFrame Flash będzie wykonywał nieustannie. Skoro klipy filmowe naturalnie się zapętlają, to i wyrażenia przypisane do zdarzenia EnterFrame będą wykonywane nieprzerwanie. Także zdarzenie Mouse move jest używane w związku z dodatkowymi wyrażeniami, umożliwiając śledzenie położenia kursora. Kiedy tylko mysz zostanie przesunięta, zaktualizowana zostanie jej pozycja. Nauczysz się wykorzystywać te i inne zdarzenia klipu filmowego w kolejnych rozdziałach, podejmujących zagadnienia związane z kontrolowaniem właściwości klipów filmowych i wprowadzaniem do Flasha różnych elementów z zewnątrz. W celu wykrycia podstawowego zdarzenia zwolnienia klawisza myszy:
|
Jak tylko zwolnisz klawisz myszy (w którymkolwiek miejscu na scenie), wykryte zostanie zdarzenie klipu filmowego Mouse up i Flash wykona akcję określoną w wyrażeniu evaluate. Wskazówka
W celu użycia zdarzeń Key up
Key.getCode()==Key.SPACE Pierwszy fragment wyrażenia wywołuje metodę getCode() obiektu Key, zwracającą ostatnio wciśnięty klawisz. Ostatni fragment wyrażenia stanowi właściwość obiektu Key, specyfikującą klawisz spacji. Podwójny znak równości (=) oznacza sprawdzenie równości. |
Rys. 5.40. Pole Expression dla wyrażenia evaluate
Rys. 5.41. Zdarzenie klipu filmowego Key up
|
Rys. 5.42. Akcja nextFrame() pojawia się w głównej listwie czasowej, kiedy wystąpi zdarzenie Key up i warunek if okaże się prawdziwy
Rys. 5.43. Zdarzenie klipu filmowego EnterFrame
Rys. 5.44. Akcja nextFrame() występuje w głównej listwie czasowej kiedy spełniony zostaje warunek w wyrażeniu if
Wskazówka
|
W celu utworzenia pętli akcji
Key.getCode()==Key.SPACE Jest to takie samo wyrażenie warunkowe, jakie skonstruowałeś w poprzednim ćwiczeniu. Jednak w tym przypadku Flash nie czeka ze sprawdzeniem warunku na pojawienie się zdarzenia Key up lub Key down. Tutaj warunek jest sprawdzany przy każdym odtworzeniu klatki klipu filmowego.
|
Cały wysiłek włożony w przygotowanie złożonych elementów interaktywnych, działających na wielu listwach czasowych, pójdzie na marne, jeśli odbiorca filmu będzie musiał czekać zbyt długo na jego wczytanie do okna witryny sieciowej lub wręcz zrezygnuje z jej oglądania. Można tego uniknąć dzięki przygotowaniu krótkich animacji zajmujących uwagę użytkownika i niedopuszczających do odtworzenia głównego filmu Flasha do momentu, kiedy do komputera użytkownika zostanie przekazana z sieci wystarczająca ilość danych. Oznacza to, że odtwarzanie jest opóźniane, dopóki nie będą gotowe wszystkie klatki filmu. Dopiero wtedy rozpoczyna się odtwarzanie od pierwszego ujęcia. W czasie oczekiwania na ukończenie ładowania filmu powszechnie stosowanym urozmaiceniem są animacje wstępne (preloaders) lub inne króciutkie, zapętlone animacje, przykuwające uwagę odbiorców. Takie animacje wstępne muszą mieć niewielkie rozmiary, z uwagi na to, iż mają się wczytywać niemal natychmiast, a także powinny być komunikatywne, pozwalając ocenić odbiorcom, na co czekają, ewentualnie - jak długo to ma potrwać. Istnieją dwa sposoby tworzenia wyrażeń warunkowych wewnątrz animacji wstępnych, pozwalających sprawdzić ilość wczytanych klatek. Pierwszy z nich opiera się na akcji ifFrameLoaded. Chociaż jest to jedna z odrzuconych akcji, łatwo zrobić z niej użytek, ponieważ wystarczy tylko określić pożądaną liczbę klatek w jednym prostym wyrażeniu. Wadą akcji ifFrameLoaded jest to, że nie podaje ona informacji o tym, ile klatek zostało wczytanych w stosunku do całkowitej liczby klatek twojego filmu. Dla uzyskania takiej informacji używa się właściwości _framesloaded i _totalframes. Kiedy te dwie właściwości są porównywane w wyrażeniu warunkowym z akcją if, można przygotować animację wstępną, mierzącą ilość wczytanych klatek i wyświetlającą pasek postępu. |
|
Rys. 5.45. Zasada funkcjonowania animacji wstępnej. Klip filmowy jest odtwarzany, dopóki nie będzie dostępna wystarczająca ilość klatek. Dopiero wtedy rozpoczyna się odtwarzanie ujęć z głównej listwy czasowej
Rys. 5.46. Ten wstępny klip filmowy zawiera animację gościa przytupującego sobie nogą i wyświetla wyjaśniający tekst. Animacja będzie odtwarzana w pętli |
W przypadku obu typów animacji wstępnych strategia jest taka sama. Taka animacja to z reguły klip filmowy rezydujący w pierwszym ujęciu na głównej listwie czasowej. Omawiane ujęcie zawiera akcję stop, zabezpieczającą film przed odtworzeniem. Zdarzenie klipu filmowego EnterFrame sprawdza, czy określone ujęcia z głównej listwy czasowej zostały już wczytane. Jeśli warunek jest spełniony, Flash przechodzi do odtwarzania ujęć z głównej listwy czasowej. W przypadku, gdy warunek nie zostanie spełniony, w dalszym ciągu odtwarzana będzie animacja zawarta w klipie filmowym (rys. 5.45).
W celu utworzenia
|
_root.gotoAndPlay(2) Wpisanie _root jest konieczne z uwagi na fakt, że zdarzenie klipu filmowego przypisane jest do listwy czasowej klipu filmowego, nie do listwy czasowej głównego filmu.
|
Rys. 5.47. Główna listwa czasowa zawiera animację wstępną w pierwszym ujęciu, a także resztę filmu pojawiającego się później
Rys. 5.48. Żeby warunek ifFrameLoaded został spełniony, klatka 10. musi zostać wczytana do końca. Skoro Flash wczytuje ujęcia sekwencyjnie, to znaczy, że najpierw muszą być wczytane klatki od 1. do 9.
Rys. 5.49. Okno narzędzia Bandwidth Profiler pokazuje pojedyncze klatki powodujące przerwy w odtwarzaniu, gdyż ilość danych przekracza ustawioną przepustowość połączenia. Dodatkowe jasne i ciemne słupki reprezentują różne ujęcia |
Rys. 5.50. Okno narzędzia Bandwidth Profiler po wybraniu Show Streaming
|
Flash umożliwia zasymulowanie określonej przepustowości połączenia (rys. 5.50). Zielony pasek u góry jest wskaźnikiem postępu. Trójkątny znacznik wskazuje punkt początkowy odtwarzania - znajduje się on w klatce 1. do momentu, kiedy wskaźnik postępu minie klatkę podaną przez ciebie w parametrze ifFrameLoaded. Dopiero wtedy nastąpi skok do klatki 2. i rozpocznie się odtwarzanie filmu. Wskazówka
|
Narzędzie Bandwidth Profiler |
|
Bandwidth Profiler jest bardzo poręcznym narzędziem, pozwalającym ocenić sposób przepływu danych w twoich filmach Flasha oraz szybkość wczytywania do okna witryny sieciowej. W trybie Test Movie wybierz View/Bandwidth Profiler (lub wciśnij Ctrl+B), aby uzyskać taką informację. W lewym segmencie okna podawane są informacje o filmie, np. rozmiar sceny, prędkość odtwarzania, rozmiar pliku, całkowity czas trwania filmu oraz animacji wstępnej (w klatkach i sekundach). Znajdziesz tam także ustawienia przepustowości, symulujące rzeczywistą szybkość transferu dla ustawionej wartości. Wartość tę można zmienić w menu Debug, wybierając prawdopodobną prędkość modemu odbiorcy filmu. Wybrać można np. pomiędzy wartościami 28,8 i 56 kb. Wykres po prawej stronie okna narzędzia Bandwidth Profiler pokazuje, jaką ilość danych zawiera każda z klatek w twoim filmie. |
Wykres ten można wyświetlić na dwa sposoby: w trybie Streaming Graph (View/Streaming Graph) lub w trybie Frame By Frame Graph (View/Frame By Frame Graph). Pierwszy tryb prezentuje przebieg ładowania filmu na stronę metodą strumieniową, drugi pozwala zobaczyć ilość danych w poszczególnych klatkach. W trybie Streaming Graph możesz określić, które z ujęć będą prawdopodobną przyczyną opóźnień w odtwarzaniu. Wystarczy, że spojrzysz na słupki przekraczające ustawioną wartość przepustowości. Żeby poznać rzeczywistą szybkość transmisji twojego filmu, wybierz View/Show Streaming. Flash zasymuluje odtwarzanie filmu na witrynie sieciowej przy zadanej szybkości połączenia. Zielony poziomy pasek w górze okna pokazuje klatki, które zostały już wczytane, podczas gdy ikona trójkąta oznacza aktualnie odtwarzaną klatkę. |
_root._framesloaded >= _root._totalframes Pierwszy człon wyrażenia zwraca ilość klatek już wczytanych do głównej listwy czasowej. Drugi człon zwraca całkowitą liczbę ujęć w głównej listwie czasowej. Znak „większe niż” (>) oraz znak równości (=), występujące razem, oznaczają „większe lub równe niż”.
_root.gotoAndPlay(2)
|
Rys. 5.51. Ten klip filmowy zawiera animację wypełniającego się paska oraz wyjaśniający tekst umieszczony powyżej
|
Rys. 5.52. Kompletny kod ActionScript dla tej nieco bardziej skomplikowanej animacji wstępnej
Rys. 5.53. Narzędzie Bandwidth Profiler po wybraniu Show Streaming. Zwróć uwagę, jak postęp w ładowaniu (5 z 10 klatek zostało całkowicie wczytanych) wpływa na proporcje pokazywane na wskaźniku (około 50 procent) w czasie jego animacji (klip filmowy animacji wstępnej)
|
this.gotoAndStop (Math.floor ((_root._framesloaded/ _root._totalframes)* this._totalframes)) To wyrażenie wygląda dość skomplikowanie, ale okaże się proste, kiedy już raz je odczytasz. Oblicza ono ilość klatek załadowanych do głównej listwy czasowej, a następnie przeskakuje do odpowiedniej klatki na listwie czasowej animacji wstępnej. Spróbujmy przeanalizować kod. Po pierwsze, wewnętrzne wyrażenie _root._framesloaded/_root. _totalframes podaje ilość wczytanych klatek. Ta linia zostaje pomnożona przez wyrażenie this._totalframes, które określa ilość klatek w animacji wstępnej. Dalej używamy metody floor obiektu Math, zamieniającej dowolną wartość na liczbę całkowitą (i zaokrąglającej w dół). Wkrótce nauczysz się więcej o obiekcie Math; na razie wystarczy wiedzieć, że umożliwia on wykonywanie obliczeń matematycznych. Kiedy więc Flash ma już liczbę całkowitą (czyli taką, która nie zawiera ułamków lub części dziesiętnych), używa jej jako numeru ujęcia w wyrażeniu this.gotoAndStop (rys. 5.52).
|
|
|
Rozdział 5.
148
147
Zarządzanie zasobami Flasha
5
Zarządzanie
zasobami Flasha
Nazwa klonu klipu filmowego
Obiekt Date
Obiekt klipu filmowego
Paleta akcji
Nazwa symbolu klipu filmowego
Klon przycisku
Klip filmowy smallClock (wewnątrz klipu bigClock)
Kliknij tę ikonę trójkąta...
... drzewko zostanie rozwinięte
Klip filmowy bigClock
Tryb Relative
Tryb Absolute
To jest klatka 2
Rys. 5.30. Ostateczna postać zagnieżdżonych wyrażeń z akcją with
Rys. 5.28. Akcja with (myEyes) została zagnieżdżona w akcji with (myFace)
Klip filmowy myMouth (wewnątrz klipu myFace)
Klip filmowy myEyes (wewnątrz klipu myFace)
Klip filmowy myFace
Rys. 5.27. Akcja gotoAndStop(2), jak również wszystkie inne akcje ujęte w wewnętrznych klamrach odnoszą się do obiektu myFace
Puste pierwsze ujęcie kluczowe
Akcja Stop
Ikona przycisku Insert a target path
Okno dialogowe Insert Target Path
Drzewo hierarchii plików
Dostępne listwy czasowe
Pole określania ścieżki dostępu
Klon klipu filmowego o nazwie bigClock
Przycisk
Klip filmowy secondClock
Klip Filmowy bigClock
Przycisk (wewnątrz klipu bigClock)
Rys. 5.29. Zaznaczenie zamykającej klamry daje pewność, że twoje następne wyrażenie zostanie wstawione wewnątrz akcji with (myFace), a nie akcji with (myEyes)
Klon klipu filmowego
Akcja stop
W czasie odtwarzania animacji wstępnej jednocześnie sprawdzany jest postęp we wczytywaniu
Po wczytaniu wszystkich klatek rozpoczyna się ich odtwarzanie, a klon animacji wstępnej jest usuwany z głównej listwy czasowej
Akcja stop
Klip filmowy animacji wstępnej
Ujęcia filmu, które zostaną wczytane
Przepustowość połączenia
Powoduje przerwy w odtwarzaniu
Klatka 10.
Aktualnie odtwarzane ujęcie
Wskaźnik postępu ładowania
Wskaźnik postępu ładowania
Zarządzanie zasobami Flasha
Nazywanie klonów
Ścieżki dostępu
Ścieżki dostępu
Ścieżki względne i bezwzględne
Ścieżki względne i bezwzględne
Ścieżki względne i bezwzględne
Używanie akcji with
Ukośnik i akcja Tell Target
Klipy filmowe jako pojemniki
Klipy filmowe jako pojemniki
Manipulatory klipów filmowych
Manipulatory klipów filmowych
Animacje wstępne
Animacje wstępne
Animacje wstępne
Nawigowanie klipów filmowych
Nazywanie klonów
Ścieżki dostępu
Ścieżki dostępu
Ścieżki względne i bezwzględne
Ścieżki względne i bezwzględne
Ścieżki względne i bezwzględne
Używanie akcji with
Ukośnik i akcja Tell Target
Klipy filmowe jako pojemniki
Manipulatory klipów filmowych
Manipulatory klipów filmowych
Animacje wstępne
Animacje wstępne
Animacje wstępne
Animacje wstępne