Rozdział 20.
Doczytywanie filmów
i biblioteki współdzielone
W tym rozdziale:
Używanie animacji wstępnych w filmach Flasha
Strumieniowe pobieranie zewnętrznych plików .SWF z dźwiękiem
Ładowanie plików .SWF do innych plików .SWF
Dostęp do plików .SWF umieszczonych w Internecie
Ponieważ większość filmów Flasha jest pobierana i oglądana w Internecie, Flash 5 posiada parę zaawansowanych akcji, które dotyczą obsługi pobierania i odtwarzania plików oraz elementów biblioteki. Akcje sprawdzające ilość pobranych klatek oraz wielkość pliku pozwalają twórcy na zatrzymanie odtwarzania filmu, aż do załadowania odpowiedniej ilości danych. Akcje loadMovie oraz unloadMovie pozwalają na podzielenie filmu na mniejsze części, które będą pobierane tylko wtedy, gdy zażąda ich użytkownik.
Zarządzanie sprawnym pobieraniem i wyświetlaniem filmu
Kiedy filmy Flasha są odtwarzane w Internecie, ich dane są przesyłane strumieniowo. Oznacza to, że odtwarzacz wyświetla pewną część filmu w czasie jego pobierania, gdy całość nie znajduje się jeszcze w pamięci podręcznej przeglądarki użytkownika. Podstawową zaletą takiego rozwiązania jest to, że użytkownik może zobaczyć początek filmu, nie czekając na pobranie całości.
Jednak strumieniowe przesyłanie danych posiada nie tylko zalety, ale i potencjalne wady. Po pierwsze, w czasie odtwarzania strumieniowego, film może się zatrzymać w przypadkowym miejscu, gdy dane wymagane do wyświetlenia następnego ujęcia nie zostały jeszcze pobrane. Po drugie, kod ActionScript odwołujący się do jeszcze niezaładowanej części filmu jest ignorowany. Wady te mogą być przyczynami nieprzewidywalnych problemów z odtwarzaniem.
Na szczęście istnieje rozwiązanie. Możesz sterować odtwarzaniem filmu, używając skryptów i wstrzymywać odtwarzanie, aż odpowiednia jego część nie zostanie załadowana. Technika ta zwana jest animacją wstępną. Przeważnie część dotycząca animacji wstępnej powoduje wyświetlenie krótkiego komunikatu, na przykład „Proszę czekać, ładuję...”, w czasie ładowania filmu. Kiedy odpowiednia część filmu zostanie pobrana, skrypt rozpoczyna odtwarzanie filmu. Flash 5 oferuje zarówno proste, jak i bardziej zaawansowane akcje dla tworzenia animacji wstępnych. W tej części rozdziału dowiesz się, jak używać trzech różnych akcji (lub metod) do sprawdzenia ilości już pobranych danych filmu Flasha.
If Frame is Loaded lub ifFrameLoaded — ta akcja była dostępna we Flashu 3. Pozwala na sprawdzenie, czy zostało już załadowane określone ujęcie. Jest to najprostsza metoda sprawdzania stopnia zaawansowania pobrania filmu.
_fremesLoaded oraz _totalFrames — wprowadzone we Flashu 4. Są to właściwości listew czasowych klipów filmowych lub głównej listwy czasowej filmu. Właściwość _framesLoaded zwraca liczbę ujęć załadowanych do pamięci, natomiast _totalFrames zwraca łączną ilość ujęć znajdujących się na danej listwie czasowej.
getBytesLoaded() oraz getBytesTotal(): są to metody wprowadzone do języka ActionScript Flasha 5. Pozwalają z największą dokładnością określić stopień zaawansowania pobierania filmu.
W następnych przykładach dowiesz się, jak użyć każdej z tych akcji do sprawdzania postępów w ładowaniu filmu.
Uwaga! Technicznie rzecz biorąc, filmy Flasha zapisane są w formacie umożliwiającym pobieranie progresywne, podobnie jak oryginalne filmy zapisane w QuickTime 3. Pobieranie progresywne jest jedynym, które umożliwia obejrzenie czegoś przed załadowaniem całego pliku przez przeglądarkę. Strumieniowe formaty plików nie są nigdy w rzeczywistości zapisywane w pamięci podręcznej przeglądarki. Nie możesz zapisać pliku przesyłanego strumieniowo, ale przeważnie możesz zapisać skrót lub łącze do miejsca w Internecie, gdzie znajduje się plik.
Tworzenie prostej animacji wstępnej za pomocą akcji ifFrameLoaded
W tym przykładzie wyjaśnimy, jak utworzyć animację wstępną dla 100-klatkowego filmu, gdzie odtwarzanie zostanie rozpoczęte dopiero po pobraniu wszystkich stu ujęć. Wykonując to ćwiczenie, ustaw edytor skryptów w trybie Normal Mode.
Utwórz nowy film o długości 100 ujęć. Zmień nazwę pierwszej warstwy na actions.
Dodaj nową warstwę o nazwie labels. Na tej warstwie dodaj puste ujęcia kluczowe w klatkach numer 2, 5 oraz 100. Opatrz te ujęcia etykietami, odpowiednio preload_loop (pętla animacji początkowej), begin_movie (początek filmu) oraz minimum_loadpoint (ujęcie, po którego załadowaniu program ma rozpocząć odtwarzanie filmu).
Dodaj jeszcze jedną warstwę i nazwij ją content (zawartość). Utwórz puste ujęcia kluczowe w klatkach numer 5 oraz 100. W każdym z tych ujęć kluczowych umieść duży symbol (wymagający przesłania znacznej ilości danych), na przykład skomplikowany kształt wektorowy lub bitmapę (potrzebujesz czegoś, co będzie symulowało zawartość normalnego filmu, aby zaobserwować działanie strumieniowego przesyłania danych oraz animacji początkowej w trybie testowym filmu) (rysunek 20.1).
Rysunek 20.1. Umieść coś skomplikowanego na głównej listwie czasowej, aby zaobserwować działanie animacji początkowej
W pierwszej klatce warstwy content użyj narzędzia Text do napisania słów Loading... Please Wait (Proszę czekać, ładuję...).
W warstwie actions dodaj puste ujęcia kluczowe w klatkach numer 3, 4 oraz 100.
Otwórz edytor skryptów dla 3. ujęcia, klikając dwukrotnie na listwie czasowej. Kliknij ikonę z plusem znajdującą się w lewym górnym rogu okna i z rozwijanego menu wybierz Basic Actions/If Frame is Loaded. Z rozwijanej listy Type wybierz Frame Label, a z listy Frame opcję minimum_loadpoint.
Z zaznaczoną w skrypcie linią ifFrameLoaded ("minimum_loadpoint"){ kliknij przycisk z plusem i z menu wybierz Basic Actions/Go To. Z listy Type wybierz opcję Frame Label, a potem z listy Frame opcję begin_movie. Następnie uaktywnij opcję Go to and Play na dole okna. Ta akcja, powodująca rozpoczęcie odtwarzania głównego filmu, zostanie wykonana dopiero po pobraniu klatki opatrzonej etykietą minimum_loadpoint.
Akcja ifFrameLoaded sprawdzana jest tylko jeden raz. Jeśli ujęcie określone w akcji ifFrameLoaded zostało już pobrane, wtedy akcje w niej zagnieżdżone zostaną wykonane. Jeśli jednak określone ujęcie nie zostało jeszcze załadowane, wtedy akcje zawarte wewnątrz akcji ifFrameLoaded nie zostaną wykonane, a film będzie po prostu odtwarzany dalej. Jednak w większości przypadków nie chcesz, aby były odtwarzane następne klatki filmu, więc musisz zmusić film do ciągłego sprawdzania akcji ifFrameLoaded, dopóki określone ujęcie nie zostanie załadowane.
Aby zapętlić akcję ifFrameLoaded, otwórz edytor skryptów dla czwartego ujęcia warstwy actions, dwukrotnie klikając go na listwie czasowej. W kategorii Basic Actions kliknij dwukrotnie akcję Go To, by umieścić ją w skrypcie. Z listy rozwijanej Type wybierz opcję Frame Label. Później z listy Frame wybierz opcję preload_loop. Uaktywnij także opcję Go to and Play.
Wreszcie umieść akcję stop() w 100. ujęciu warstwy actions. Jesteś teraz gotowy do przetestowania filmu i zobaczenia animacji początkowej w akcji. Z menu Control wybierz polecenie Test Movie (Ctrl+Enter lub Command+Enter). W trybie testowym będziesz musiał pozmieniać parę opcji, aby zobaczyć symulację pobierania danych z Internetu. Załącz narzędzie Bandwidth Profiler wybierając polecenie View/Bandwidth Profiler. Kliknij pierwszą klatkę listwy czasowej. Następnie z menu View zaznacz opcję Frame by Frame Graph, a z menu Debug wybierz 28.8 (2.3KB/s) (symulacja modemu o prędkości 28.8 kilobitów na sekundę). Aby zobaczyć, jak film będzie odtwarzany w sieci Internet, wybierz polecenie View/Show Streaming. Będziesz widział wskaźnik czasu, który krąży przy akcji ifFrameLoaded i czeka na pobranie filmu. Zielony pasek na listwie czasowej pokazuje, ile filmu zostało już pobrane.
Na CD-ROM-ie! Dla późniejszej nauki ten prosty film z animacją wstępną znajdziesz w katalogu ch20 na CD-ROM-ie pod nazwą preloader_1.fla.
Należy pamiętać o paru sprawach, tworząc animację początkową. Po pierwsze, animacje wstępne nie działają wewnątrz klipów filmowych. Nie możesz zrobić animacji wstępnej dla części klipu filmowego. Jeśli klon klipu filmowego został umieszczony w jakimś ujęciu, to ujęcie to nie zostanie odtworzone, dopóki cały symbol klonu nie będzie pobrany. Po drugie, nie musisz na początku ładować całego filmu, używając animacji wstępnej. W powyższym przykładzie mogłeś umieścić ujęcie kluczowe o etykiecie minimum_loadpoint w dowolnej klatce następującej po klatce 5. Symulując strumieniowe przesyłanie danych w trybie testowym, możesz mniej więcej określić, jaka część filmu musi zostać na początku załadowana, aby przy odtwarzaniu nie wystąpiły przerwy. Możesz także użyć kilku animacji wstępnych: pierwsza będzie ładowała początek filmu, który zostanie wyświetlony i rozpocznie się ładowanie następnych części.
Animacja wstępna z użyciem właściwości _framesLoaded oraz _totalFrames
We Flashu 3 jedynym narzędziem, które umożliwiało tworzenie animacji początkowych, była akcja If Frame is Loaded. Tylko używając wielu animacji wstępnych można było informować użytkownika, w ilu procentach film został już załadowany. Chociaż takie animacje pokazywały pomysłowość ich twórców, nie były zbyt dokładne. Język ActionScript Flasha 4 oferował twórcom precyzyjne narzędzie, za pomocą którego można było określić, ile procentowo klatek filmu zostało przesłanych do użytkownika. Zmienimy teraz mechanizm ładowania początkowego filmu z pliku preloader_1.fla na inny używający właściwości _framesLoaded oraz _totalFrames.
Otwórz plik preloader_1.fla utworzony w poprzedniej sekcji. Jeśli nie wykonywałeś tego ćwiczenia, ten sam plik znajdziesz na CD-ROM-ie.
Z trzeciego ujęcia warstwy actions usuń akcje ifFrameLoaded oraz Go To.
W czwartym ujęciu warstwy actions usuń istniejącą tam akcję i dodaj następujący kod w edytorze skryptów w trybie Expert Mode:
loadedFrames = _root._framesloaded;
totalFrames = _root._totalframes;
if (loadedFrames < totalFrames){
percentageOutput = int((loadedFrames / totalFrames) * 100);
gotoAndPlay("preload_loop");
}
else{
gotoAndPlay("begin_movie");
}
Utwórz nową warstwę o nazwie textField. W tej warstwie dodaj ujęcia kluczowe w klatkach 2. oraz 5. W ujęciu 2. dodaj pole tekstowe, używając narzędzia Text. W panelu Text Options zmień typ pola na Dynamic Text jak na rysunku 20.2. W polu Variable wpisz percentageOutput. Wyłącz opcję Selectable.
Rysunek 20.2. Nie zapomnij zmienić pola tekstowego na pole typu Dynamic Text
Zapisz film jako preloader_2.fla i przetestuj go.
Kiedy wskaźnik czasu dojdzie do 4. klatki, Flash wykona skrypt. Jeśli przekona się, że liczba pobranych klatek jest mniejsza od ogólnej liczby klatek filmu, wskaźnik czasu zostanie przeniesiony do ujęcia kluczowego preload_loop. Wtedy też zaktualizuje zmienną percentageOutput, która zawiera procentową informację o tym, ile klatek zostało załadowanych w odniesieniu do ogólnej liczby klatek. Jeśli jednak liczba załadowanych klatek nie jest mniejsza od ogólnej liczby klatek (innymi słowy, wszystkie zostały pobrane), wtedy wskaźnik czasu przenoszony jest do ujęcia kluczowego begin_movie i program rozpoczyna sekwencyjne odtwarzanie filmu.
Pewną odmianą tej zaawansowanej animacji wstępnej jest pasek wyświetlający procent zaawansowania. Paskiem tym może być mały klip filmowy, który zawiera kształt prostokąta. Po jego ustawieniu na scenie zmieniamy tylko właściwość _xscale klonu klipu filmowego na procent zaawansowania i nasz pasek będzie się rozszerzał w czasie pobierania filmu. Oto kroki, które pomogą Ci zrobić taki pasek.
Dodaj warstwę o nazwie loaderBar. Utwórz ujęcia kluczowe w klatkach 2. oraz 5. W 2. klatce narysuj długi prostokąt tak, jak chcesz, aby wyglądał po zakończeniu ładowania. Zaznacz prostokąt i naciśnij klawisz F8. Symbol klipu filmowego nazwij loaderBar.
Z zaznaczonym na scenie paskiem klonu otwórz panel Instance i nadaj klonowi nazwę loaderBar. Kliknij dwukrotnie klon, aby przejść do trybu edycji symbolu. Zmień położenie prostokąta tak, aby jego lewa krawędź pokrywała się z punktem zerowym (rysunek 20.3).
Rysunek 20.3. Ponieważ chcemy, aby pasek rósł od lewej do prawej, musimy się upewnić, że środek symbolu znajduje się na lewej krawędzi prostokąta
Powróć do głównej listwy czasowej i umieść pasek na środku sceny.
Kliknij dwukrotnie czwarte ujęcie warstwy actions i zmień kod ActionScript na następujący:
loadedFrames = _root._framesloaded;
totalFrames = _root._totalframes;
if (loadedFrames < totalFrames){
percentageOutput = int((loadedFrames / totalFrames) * 100);
_root.loaderBar._xscale = percentageOutput;
gotoAndPlay("preload_loop");
}
else{
gotoAndPlay("begin_movie");
}
Zapisz i przetestuj film Flasha.
Na CD-ROM-ie! Możesz przetestować ukończony film. Znajduje się on w katalogu ch20 na CD-ROM-ie i nosi nazwę preloader_2.fla.
Jednak obydwie animacje wstępne tutaj zastosowane nie są odpowiednie do podawania dokładnej procentowej ilości pobranego pliku. Biorą pod uwagę nie wielkość pliku, a ilość pobranych klatek. Jeśli zawartość filmu jest równomiernie rozłożona na wszystkie ujęcia listwy czasowej, powyższe animacje wstępne będą prawie odpowiadały rzeczywistemu procentowi przesłanych danych.
Jeśli jednak większość grafiki zgrupowana jest tylko w paru ujęciach (jak w tym przykładzie), powyższe procedury wyświetlające procent zaawansowania mogą się wydawać użytkownikowi niezbyt dokładne. Kiedy taki film jest przesyłany strumieniowo, pasek postępu będzie skakał nierównomiernie, niezależnie od szybkości połączenia lub czasu pobierania. W następnym przykładzie przedstawimy nowe metody dostępne we Flashu 5, które dotyczą stopnia zaawansowania przy pobieraniu danych.
Metody getBytesLoaded() oraz getBytesTotal() Flasha 5
Najbardziej dokładną metodą określenia postępów przy strumieniowym pobieraniu filmu jest użycie nowych metod getBytesLoaded() oraz getBytesTotal() dostępnych we Flashu 5. Dzięki nim masz dostęp do ilości bajtów pobieranych przez przeglądarkę lub samodzielny odtwarzacz filmów. Dzięki tym metodom nie musisz się martwić o równomierne rozmieszczanie zawartości filmu na listwie czasowej — możesz teraz wszystko umieszczać tam, gdzie jest Ci wygodniej.
Nadal będziemy pracować z plikiem preloader_2.fla, utworzonym w poprzednim przykładzie. Jeśli chcesz otworzyć niezmodyfikowany plik, użyj pliku preloader_2.fla znajdującego się na CD-ROM-ie.
Kliknij dwukrotnie czwartą klatkę warstwy actions. W edytorze skryptów zmień kod na poniższy. Zwróć szczególną uwagę na nowe nazwy zmiennych:
loadedBytes = _root.getBytesLoaded();
totalBytes = _root.getBytesTotal();
if (loadedBytes < totalBytes){
percentageOutput = int((loadedBytes / totalBytes) * 100);
_root.loaderBar._xscale = percentageOutput;
gotoAndPlay("preload_loop");
}
else{
gotoAndPlay("begin_movie");
}
W tym kroku zmieniliśmy loadedFrames na loadedBytes. Ważniejsze jest jednak to, że zmiennej loadedBytes przypisujemy liczbę bajtów głównej listwy czasowej (_root) pobranych przez odtwarzacz filmu. Podobnie zmieniliśmy totalFrames na totalBytes. W zmiennej tej przechowywana jest teraz wielkość filmu (w bajtach). Upewnij się, że zmieniłeś też nazwy zmiennych w warunku if oraz przy obliczaniu zmiennej percentageOutput.
Zapisz film w pliku preloader_3.fla i przetestuj go. Sprawdź działanie filmu w trybie Show Streaming Mode (Ctrl+Enter lub Command+Enter).
W czasie testu zauważysz, że pasek postępu będzie teraz działał prawidłowo i pokazywał rzeczywistą ilość pobranych danych. Nie musisz się ograniczać tylko do sprawdzania postępu w ładowaniu głównej listwy czasowej, możesz także użyć metod getBytesLoaded() oraz getBytesTotal() dla doładowywanych plików .SWF. Z następnego ćwiczenia eksperta, napisanego przez Gareth Pursehouse, dowiesz się, jak sprawdzać ilość danych pobieranych przez pliki .SWF ładowane do głównego filmu. Sam proces ładowania zewnętrznych plików .SWF omówimy w dalszej części tego rozdziału.
Szare tło!
Ćwiczenie eksperta
Animacja wstępna dla plików .SWF z dźwiękiem
Autor: Gareth Pursehouse
W tym ćwiczeniu zapoznasz się ze sposobem użycia nowych metod getBytesLoaded() oraz getBytesTotal() dla obiektu klipu filmowego. Zostanie tutaj także użyta akcja loadMovie. Dokładniej omawiamy ją w dalszej części tego rozdziału. Użyty tutaj kod ActionScript jest mieszanką składni z Flasha 4 oraz 5. Pliki dla tego ćwiczenia znajdziesz na CD-ROM-ie w katalogu ch20\gareth_pursehouse pod nazwami music_preloader.fla oraz stream.swf.
Musiałeś kiedyś odtwarzać muzykę w filmie Flasha lub sterować dźwiękiem? Niestety nie jest to takie proste, jak przeniesienie piosenki na scenę wraz z utworzonym wcześniej interfejsem lub paskiem kontrolnym, za pomocą którego odwiedzający będą mogli sterować odtwarzaniem dźwięku. Potrzebujesz wskaźnika ładowania i postępu odtwarzania oraz przycisków sterujących procesem odtwarzania. W innym przypadku Twój film może zostać uznany za najgorszy film roku, Ty wylecisz z pracy, a Twoje dzieci nigdy nie dostaną aparatu korekcyjnego. Na szczęście kupiłeś tę książkę, a w niej mamy zamiar pokazać Ci, jak obsługiwać zewnętrzne pliki .SWF z muzyką.
W tym przykładzie skupimy się na nowych metodach obiektu klipu filmowego, jak getBytesTotal() oraz getBytesLoaded(). Nauczysz się tworzenia pętli sprawdzającej właściwości ładowanego pliku .SWF, wyświetlania pasków postępu ładowania oraz odtwarzania i tworzenia przycisków do obsługi odtwarzania, które używają strumieniowej synchronizacji dźwięku.
Ogólne spojrzenie na problem
Otwórz plik music_preloader.fla znajdujący się w katalogu ch20\gareth_pursehouse na CD-ROM-ie. Na górze głównej listwy czasowej zobaczysz trzy warstwy nazwane !song, _song i song. Klony !song oraz _song używają tego samego symbolu klipu filmowego, load checker, znajdującego się w bibliotece. Używamy tego symbolu klipu filmowego do pokazywania zaawansowania ładowania oraz odtwarzania muzyki. Nazwy klonów różnią się pierwszym znakiem (_ lub !), co pozwala określić, który pasek ma być wyświetlany.
Prosty warunek sprawdzający pierwszą literę zmiennej _name pozwala określić, którą procedurę należy uruchomić:
if (substring(_name, 1, 1) eq "_") {
// akcje dotyczące paska odtwarzania
} else if (substring(_name, 1, 1) eq "!") {
// akcje dotyczące paska ładowania
}
Ponieważ przy programowaniu chodzi o to, aby kod był jak najbardziej elastyczny, napisaliśmy procedurę sprawdzającą właściwość _name (nazwę) klonu. Na jej podstawie określamy, czy ma być wyświetlany pasek ładowania, czy pasek odtwarzania.
Po pierwszym znaku _ lub ! w obydwu klonach występuje słowo song. Używamy tego wyrazu także do określenia klonu klipu filmowego, który jest celem akcji loadMovie (za chwilę przekonasz się, o co chodzi).
Klon klipu filmowego wyświetlający pasek zaawansowania odtwarzania będzie nazwany _song, natomiast klon klipu filmowego z paskiem zaawansowania ładowania będzie nazwany !song. Te nazwy będą także kierowały kodem ActionScript, który sprawdza zaawansowanie ładowania lub odtwarzania klonu klipu o nazwie song.
Symbol klipu filmowego load checker, który na scenie ma dwa klony, będzie ciągle sprawdzał zaawansowanie ładowania pliku .SWF, za pomocą klonu song. Ponieważ nie chcemy, aby skrypt wyświetlał informacje o zaawansowaniu przed załadowaniem klipu filmowego, w pierwszej klatce klonu klipu filmowego song (jest to symbol load placeholder z biblioteki) zdefiniujemy zmienną, która będzie wskazywała, że ładowanie jeszcze się nie rozpoczęło:
loading = false;
W symbolu load checker umieścimy warunek if, który będzie sprawdzał tę zmienną:
if (_parent[substring(_name, 2, -1)].loading != false) {
Przy użyciu części nazwy aktualnego klonu możemy dostać się do innego klonu znajdującego się poza klonem zawierającym ten kod. Dzięki temu wprowadzanie zmian w kodzie jest łatwiejsze, więc możesz używać symbolu load checker także do ładowania innych filmów .SWF.
Zaawansowana składnia dotycząca dostępu do obiektów klipów filmowych jest dokładnie opisana w rozdziale 18., „Zarządzanie listwami czasowymi” oraz w rozdziale 19., „Sterowanie klipami filmowymi.”
Tworzenie paska zaawansowania
Aby wyświetlać wyniki obliczeń przeprowadzanych w symbolu load checker, potrzebujemy paru różnych klipów filmowych. Jeden z klipów, nazwaliśmy go msize, będzie tłem dla pasków zaawansowania ładowania oraz odtwarzania. Ten klip filmowy musi mieć dokładnie taką samą wielkość, jak cały pasek zaawansowania, ponieważ jego szerokość używana jest przez procedury odpowiadające za odpowiednie umieszczanie klipu filmowego marker. Z klonem tła paska o nazwie msize umieszczonym w symbolu load checker dodamy zmienną przechowującą szerokość tła paska (w pikselach):
mw = msize._width;
Ta linia kodu znajduje się w pierwszym ujęciu symbolu load checker.
Klip filmowy marker będzie drugim klipem odpowiedzialnym za paski zaawansowania. W tym przykładzie użyliśmy zwykłego prostokąta. Ponieważ będzie on ciągle przesuwany po tle (klipie msize), jego wielkość powinna być tak dobrana, aby nie przeszkadzał żadnej innej grafice.
Akcja loadMovie
Na warstwie loadButton znajduje się klon przycisku z napisem „Load”. Jeśli zaznaczysz go i otworzysz edytor skryptów, zobaczysz następujący kod:
on (release) {
loadMovie (loadfile, "song");
song._visible = 0;
}
Kiedy użytkownik naciśnie przycisk, zostanie wykonana akcja loadMovie. Spowoduje ona załadowanie pliku .SWF o nazwie zawartej w zmiennej loadfile do klonu klipu filmowego song. Zmienna loadfile w naszym przykładzie odpowiada polu tekstowemu z warstwy loadfile z głównej listwy czasowej. Jak możesz się przekonać, w polu tekstowym znajduje się już napis „stream.swf.” Z tego też powodu plik stream.swf zostanie załadowany do klonu klipu filmowego song.
Druga akcja ustawia właściwość _visible klonu song na 0. Powoduje to ukrycie klonu klipu filmowego.
Kiedy plik stream.swf zacznie być ładowany do klonu song, klon !song rozpocznie sprawdzanie i wyświetlanie paska zaawansowania pobierania pliku.
Wyświetlanie stopnia zaawansowania ładowania
Kiedy zostanie wykonana akcja loadMovie, zmienna loading z klonu klipu filmowego song przestanie istnieć. Z tego też powodu warunek if, znajdujący się w drugich ujęciach klonów !song oraz _song, przestanie blokować wykonywanie pozostałych akcji. Klon !song, który obsługuje pasek zaawansowania ładowania, wykona kod zagnieżdżony wewnątrz warunku
} else if (substring(_name, 1, 1) eq "!") {
Pierwsza linia poniżej warunku else...if wpisze do zmiennej check ścieżkę klonu song z głównej listwy czasowej:
check = eval("_parent." + substring(_name, 2, -1));
Teraz użyjemy nowych metod getBytesLoaded() oraz getBytesTotal() dostępnych we Flashu 5. Metoda getBytesLoaded() posłuży do procentowego określenia załadowania pliku .SWF:
loaded = check.getBytesLoaded();
total = check.getBytesTotal();
percentage = int((loaded/total)*100);
currentKB = int(loaded/1024);
totalKB = int(total/1024);
Po określeniu zmiennych loaded oraz total, możemy ustalić, ile procent pliku jest już w pamięci. W tym celu dzielimy liczbę przesłanych bajtów przez ogólną wielkość pliku i mnożymy wynik przez 100, aby uzyskać wartość procentową. Za pomocą funkcji int uzyskujemy wartość całkowitą; część ułamkowa zostaje odrzucona.
Używamy także zmiennej loaded do określenia odpowiednika getBytesLoaded() w kilobajtach. Deklarujemy nową zmienną o nazwie currentKB, dzieląc loaded przez 1024 — jeden kilobajt to 1024 bajty. W podobny sposób określamy zmienną totalKB, która zawiera wielkość pobieranego pliku (w bajtach) podzieloną przez 1024.
Następnie kod ActionScript powoduje wyświetlenie danych w głównym filmie umieszczając zmienne percentage, totalKB oraz currentKB w polu tekstowym disp wewnątrz klipu filmowego !song oraz rozciągając klon klipu filmowego marker do szerokości klonu msize. W czasie ładowania pliku stream.swf do klonu song, klon marker będzie się rozszerzał:
disp = percentage + "% of " + totalKB + "kb loaded. (" + currentKB¬
+ " kb)";
marker._x =0;
marker._width = mw*(percentage/100);
Wyświetlanie stopnia zaawansowania odtwarzania
Kiedy plik stream.swf zostanie w całości załadowany do klonu song, wtedy klon _song zacznie wykonywać swój skrypt w symbolu load checker. Ponieważ na listwie czasowej pliku stream.swf nie ma akcji stop(), rozpocznie się odtwarzanie załadowanego pliku.
Ponieważ w załadowanym pliku jest tylko jeden dźwięk typu Stream (czyli z synchronizacją strumieniową), listwa czasowa musi zawierać tyle ujęć, aby w całości odtworzyć dźwięk. Oznacza to, że możemy sprawdzić położenie wskaźnika czasu. Dzięki właściwościom _totalframes oraz _currentframe możemy dokładnie dowiedzieć się, w którym miejscu znajduje się wskaźnik czasu, a przez to także, która część klipu dźwiękowego jest odtwarzana:
total = check._totalframes;
current = check._currentframe;
percentage = int((current/total)*100);
Dzięki zmiennej percentage będziemy mogli wyświetlić informację o tym, ile procent klipu zostało odtworzone oraz zmieniać położenie klonu klipu filmowego marker w odniesieniu do długości klipu msize. Dzięki temu użytkownik będzie wiedział, jaki fragment ścieżki dźwiękowej jest odtwarzany:
disp = "at " + percentage + "% of " + total + " frames. (frame " +¬ current + ")";
marker._x = (mw-10) * (percentage/100);
marker._width = 10;
Przyciski sterujące odtwarzaniem
Aby sterować odtwarzaniem klipu dźwiękowego w klonie song, tworzymy zmienną, która będzie zawierała informację o tym, czy dźwięk jest odtwarzany, czy zatrzymany.
Najpierw zajmiemy się przyciskami służącymi do przewijania ścieżki dźwiękowej. Podobnie jak w innych programach (na przykład Winamp) lub sprzęcie muzycznym (na przykład odtwarzaczu płyt kompaktowych), przyciski przewijania w przód oraz w tył będą powodowały przewijanie ścieżki dźwiękowej tak długo, dopóki nie zostaną zwolnione. Aby prawidłowo określić działanie przycisku, musimy wiedzieć, czy listwa czasowa klonu ze ścieżką dźwiękową jest odtwarzana. Użyjemy zmiennej play znajdującej się na głównej listwie czasowej (_root). Jeśli zmienna będzie równa false, będziemy wiedzieli, że załączona jest pauza lub odtwarzanie zostało zatrzymane. Jeśli będzie równa true, listwa czasowa jest odtwarzana. Zacznijmy od przycisku przewijania w tył.
Kod tego przycisku jest następujący:
on (press, keyPress "<Left>") {
if (_root.play == false) {
song.gotoAndStop(song._currentframe-5);
} else {
song.gotoAndPlay(song._currentframe-5);
}
}
Jeśli listwa czasowa nie jest odtwarzana, używana jest metoda gotoAndStop. Jeśli listwa czasowa jest odtwarzana, wtedy zastosowana zostaje metoda gotoAndPlay.
Dla przycisku odtwarzania istnieją dwie możliwości: jeśli przycisk zostanie naciśnięty w czasie odtwarzania dźwięku, wtedy ścieżka dźwiękowa będzie odtwarzana od początku lub, jeśli dźwięk jest wstrzymany, wtedy odtwarzanie zostanie wznowione od aktualnej klatki. Przycisk odtwarzania zawiera następujący kod ActionScript:
on (press, keyPress "x") {
if (play == false) {
song.play();
} else {
song.gotoAndPlay(1);
}
play = true;
}
Przycisk pauzy używa natomiast takiego skryptu:
on (press, keyPress "c") {
play = false;
song.stop();
}
Pozostałe przyciski (przewijanie w przód oraz stop) używają podobnego kodu. Zaznacz jakiś klon przycisku, aby w edytorze skryptów zobaczyć przypisany do niego skrypt.
I to jest już koniec ćwiczenia dotyczącego animacji początkowej oraz sterowania strumieniowym odtwarzaniem dźwięku w filmie Flasha. Możesz spróbować dodać akcje, które pozwolą na przeciąganie klonu marker w wybrane miejsce i automatyczną zmianę miejsca odtwarzania.
Przypis do szarego tła!
Gareth Pursehouse mieszka w San Diego w Kalifornii, a jego ulubionym zajęciem jest ćwiczenie Capoeiry, która przez niektórych nazywana jest sztuką walki. Capoeira to mieszanka tańca, muzyki, rytuałów, akrobatyki oraz walki. Wywodzi się z Brazylii, gdzie była rodzajem gry. Nie zdziwimy się, jeśli Gareth podbije ActionScript za pomocą Capoeiry. Zdobył uznanie dzięki jednej z pierwszych Flashowych stron, www.infinovation.com.
Koniec szarego tła!
Ładowanie filmów Flasha
Długie animowane sekwencje wymagają oczywiście animacji wstępnych omówionych w poprzedniej sekcji. Gwarantują one płynne odtwarzanie filmu. Jednak tradycyjne strony internetowe z informacjami wymagają innego zarządzania pobieraniem danych. Przypuśćmy, że tworzysz stronę z trzema częściami: produkty, personel, historia firmy. Każda część zajmuje ponad 100 kB. W normalnym filmie Flasha umieściłbyś te części jedna za drugą na głównej listwie czasowej. Oczywiście ostatnia część na listwie czasowej byłaby pobierana na samym końcu. Wszystko wydaje się prawidłowe, a jednak istnieje jeden problem — co będzie, jeśli użytkownik zechce zobaczyć tylko jedną część, na dodatek tą ładowaną na samym końcu? Będzie musiał zaczekać, aż zostaną pobrane dwie wcześniejsze części, zanim będzie mógł zobaczyć tę, o którą mu chodzi — będzie musiał czekać na załadowanie dwóch pierwszych części, choć wcale nie chce ich oglądać, czyli ładowanie tych dwóch części nie ma sensu. Rozwiązaniem problemu jest zastosowanie akcji loadMovie.
Akcja loadMovie umożliwia załadowanie jednego lub więcej zewnętrznych plików do filmu Flasha (nie ma tutaj znaczenia to, czy jest on oglądany w oknie przeglądarki, czy w samodzielnym odtwarzaczu). Akcja ta może posłużyć do zastąpienia aktualnego filmu innym lub do jednoczesnego wyświetlania kilku filmów. Może także zostać użyta, jak w naszym przykładzie dotyczącym witryny firmy, do ładowania niezależnych plików .SWF przez główny film na żądanie użytkownika (zasada działania jest podobna do stron HTML z zestawem ramek, gdzie do różnych ramek można ładować na żądanie różne strony).
Krótkie omówienie struktury witryny
Istnieją dwa sposoby tworzenia i rozpowszechniania flashowych filmów w sieci Internet: utworzenie kilku małych plików .SWF, przy czym każdy umieszczany jest na osobnej stronie HTML lub utworzenie jednej strony HTML zawierającej główny plik .SWF, który ładuje pozostałą zawartość witryny przez moduł odtwarzający filmy Flasha. Na rysunku 20.4 znajdziesz ilustrację obydwu przypadków.
Rysunek 20.4. Diagram po lewej przedstawia witrynę WWW, używająca wielu stron HTML, w których znajdują się poszczególne pliki .SWF. Diagram po prawej stronie pokazuje witrynę, która używa jednej strony HTML (lub ramek) i posiada jeden główny plik .SWF, ładujący pozostałe pliki .SWF w razie potrzeby
Jeśli zdecydujesz się na umieszczenie filmów Flasha na kilku stronach HTML, odwiedzający witrynę zyskają na tym przez:
skrócenie czasu ładowania każdej strony,
łatwiejsze tworzenie zakładek dla poszczególnych części witryny,
szybkie zmiany przy przechodzeniu pomiędzy częściami witryny.
Jeśli jednak użyjesz jednego głównego filmu Flasha na jednej stronie HTML (lub zestawie ramek), odwiedzający docenią:
krótki czas ładowania każdego pliku .SWF (czas pobierania zależy od wielkości pliku),
pełną integrację zawartości witryny,
kontrolowane przejścia pomiędzy plikami .SWF.
Jakiej metody powinieneś używać przy swoich projektach? Odpowiedź na to pytanie zależy przede wszystkim od rodzaju projektu. Możesz zdecydować się na połączenie obydwu metod, szczególnie przy dużych witrynach, które używają kilku technologii internetowych (QuickTime, Flash, RealPlayer, Windows Media, itd.). W każdym przypadku możesz użyć akcji loadMovie, aby łatwiej zarządzać zawartością flashowej witryny.
Gdzie przechowywane są ładowane filmy?
Zastanawiasz się zapewne, jak program obsługuje ładowane filmy i jaki jest ich związek z oryginalnym filmem. Flash używa nazw poziomów do opisywania miejsca przechowywania filmów. Poziomy są jakby szufladami szafy; każda następna szuflada znajduje się nad poprzednią i może zawierać różne rzeczy. Jeśli jednak jakaś szuflada jest pełna, musisz ją opróżnić, zanim będziesz do niej mógł włożyć coś innego. Na początku najniższy poziom, nazwany _level0, zawiera oryginalny film. Wszystkie filmy ładowane później przez odtwarzacz muszą być ładowane do określonego poziomu. Jeśli film zostanie załadowany do poziomu 1. lub wyższego, pojawi się ponad oryginalnym filmem. Jeśli zostanie załadowany do poziomu zerowego, zastąpi oryginalny film, a wszystkie filmy znajdujące się na wyższych poziomach zostaną usunięte. Nawet gdy załadowany film zastąpi pierwotny film, program zachowa dotychczasową prędkość odtwarzania klatek, wymiary obrazu i kolor tła. Te cechy są na stałe określone przez oryginalny film i nie mogą zostać zmienione.
Wskazówka! Możesz w prosty sposób zmienić kolor tła sceny, gdy ładujesz nowy film. Wystarczy, że umieścić prostokąt o wybranym kolorze na najniższej warstwie ładowanego filmu.
Doczytywanie zewnętrznych plików .SWF do filmu
Nowy film jest importowany do głównej sceny filmu po wykonaniu akcji loadMovie. Oto przepis na utworzenie przycisku, który po naciśnięciu powoduje załadowanie filmu o nazwie movie2.swf.
Umieść klon przycisku na scenie głównego filmu. Otwórz edytor skryptów dla przycisku, zaznaczając klon i naciskając Ctrl+Alt+A (PC) lub Option+Command+A (Mac). Upewnij się, że edytor jest w trybie Normal Mode. Zobacz rysunek 20.5.
Rysunek 20.5. Gdy edytor skryptów znajduje się w trybie normalnym, możesz łatwo zobaczyć opcje dotyczące akcji loadMovie
Naciśnij przycisk z plusem (+) w lewym górnym rogu edytora skryptów i z rozwijanego menu wybierz Basic Actions/Load Movie. W pole URL wpisz movie2.swf (lub nazwę innego zewnętrznego pliku .SWF). W polu tym określasz ścieżkę dostępu do filmu, który ma zostać załadowany. Ścieżka musi być określona względem strony zawierającej główny film, a nie względem samego filmu.
Z rozwijanej listy Location wybierz opcję Level i w pole obok wpisz 1. Wymusi to na Flashu ładowanie pliku movie2.swf do poziomu _level1. Jeśli na tym poziomie znajdował się inny film, zostanie on zastąpiony przez film movie2.swf.
Naciśnij przycisk OK.
Ostrzeżenie! Internet Explorer 4.5 (lub wcześniejszy) dla komputerów Macintosh nieprawidłowo odczytywał ścieżki dostępu. Więcej informacji na ten temat znajdziesz na stronie www.macromedia.com/support/flash/ts/documents/mac_ie_issues.htm.
Uwaga! Kiedy film zostanie załadowany powyżej innego filmu (włączając w to główny), przyciski znajdujące się na filmach z niższych warstw nadal są aktywne, chociaż mogą nie być widoczne. Aby pozbyć się tego niechcianego zachowania, musisz posłać te filmy do pustego ujęcia, gdzie nie występują żadne przyciski. Dodaj po prostu akcję Go To, która powoduje przejście aktualnego filmu do pustego ujęcia, przed akcją loadMovie. Technika ta nazywana jest „parkowaniem” filmu. Jeśli musisz „zaparkować” kilka filmów, powinieneś wiedzieć, jak odbywa się komunikacja między filmami na różnych poziomach. Pokrótce omówimy ten problem.
Początek szarego tła!
_level0 lub _root — jaka jest różnica?
Do tej pory do głównej listwy czasowej odwoływaliśmy się w skryptach przez słowo kluczowe _root. Jeśli nie będziesz korzystał z poziomów we Flashu, wtedy słowo kluczowe _root zawsze będzie dotyczyło głównej listwy czasowej filmu. Gdy jednak używasz poziomów, słowo kluczowe _root dotyczy głównej listwy czasowej poziomu, która wykonuje akcję z tym słowem kluczowym.
Na przykład, jeśli główny film używa odniesienia _root w jakiejś akcji, na przykład:
_root.gotoAndStop(10);
wtedy program przechodzi do klatki numer 10 i zatrzymuje odtwarzanie.
Jeśli załadowany film posiada taką samą akcję na swojej listwie czasowej, to program przechodzi do 10. klatki jego listwy czasowej i zatrzymuje odtwarzanie.
Chociaż działa to dla filmów załadowanych do poziomów, jednak nie działa przy filmach ładowanych do klonów klipów filmowych. Jak przekonasz się w następnych sekcjach, film załadowany do klonu klipu zostaje umieszczony w klonie na najniższym poziomie (zerowym). W takim wypadku _root nadal będzie dotyczyło listwy czasowej głównego filmu (listwy czasowej Scene 1).
Koniec szarego tła!
Jak Flash obsługuje ładowane filmy o różnych wymiarach obrazu?
Film załadowany do poziomu 1. lub wyższego, którego obraz jest mniejszy od filmu z poziomu zerowego, jest umieszczany w lewym górnym rogu sceny. W tej sytuacji elementy filmu załadowanego do pierwszego poziomu zostaną wyświetlone nawet wtedy, gdy oryginalnie znajdują się poza dolną oraz prawą krawędzią filmu z pierwszego poziomu. Aby zabezpieczyć takie obiekty przed wyświetleniem, będziesz musiał utworzyć zasłonę na najwyższej warstwie (ponad wszystkimi innymi warstwami) ładowanego filmu, która zakryje obszar roboczy (przestrzeń poza sceną filmu).
Filmy ładowane do poziomu zerowego mniejsze od oryginalnego filmu z tego poziomu są automatycznie centrowane i powiększane do rozmiaru oryginalnego filmu (sposób, w jaki film zostanie powiększony zależy od ustawień skalowania przy publikacji).
Filmy ładowane do poziomu zerowego większe od oryginalnego filmu z tego poziomu są przycinane na dole i po prawej stronie do wymiarów zdefiniowanych przez pierwotny film.
Umieszczanie, skalowanie oraz obracanie załadowanych plików .SWF
Szczególnie wtedy, gdy filmy są różnych rozmiarów, niezbyt dogodne jest ich automatyczne umieszczanie w lewym górnym rogu sceny. Aby pozwolić Ci na większa swobodę w umieszczaniu, skalowaniu oraz obracaniu załadowanych filmów, Flash umożliwia ładowanie filmów do klonów klipów filmowych. Na razie może Ci się wydawać, że nie ma to większego sensu. Ładowanie filmu do klonu klipu filmowego na początku wydaje się dziwną funkcją, dopóki nie przekonasz się, co dzięki niej możesz zrobić — wtedy staje się nieoceniona. Najłatwiej będzie Ci zrozumieć, co się dzieje, gdy film jest ładowany do klipu filmowego, jeśli pomyślisz o akcji loadMovie, jak o akcji konwertującej ładowany film do klipu filmowego.
Po załadowaniu filmu do klonu klipu filmowego większość właściwości oryginalnego klonu klipu filmowego jest przypisywana do załadowanego filmu.
Listwa czasowa załadowanego filmu całkowicie zastępuje listwę czasową pierwotnego klonu. Wszystko, co znajdowało się wewnątrz pierwotnego klonu klipu (włączając w to skrypty z ujęć kluczowych) zostaje usunięte.
Załadowany film przyjmuje następujące właściwości pierwotnego klonu klipu filmowego:
nazwę,
skalę procentową,
efekty związane z kolorami, włączając w to przeźroczystość,
kąt obrotu,
położenie (współrzędne X i Y),
widzialność (wartość właściwości _visible).
Wszelkie detektory zdarzeń onclipEvent (i zagnieżdżone w nich akcje) przypisane do pierwotnego klonu klipu filmowego nadal są dostępne (wykonywane) po załadowaniu filmu.
Wolimy nazywać klipy filmowe używane do ładowania innych filmów pojemnikami na klipy filmowe. Przeważnie ładujesz filmy do pustych klipów filmowych niezawierających żadnej grafiki oraz skryptów. Ponieważ jednak potrzebujemy jakiegoś fizycznego odniesienia do obszaru zajmowanego w rzeczywistości przez załadowany film na scenie, bardzo pomocne jest dodanie grafiki określającej ten obszar. Z poniższych kroków dowiesz się, jak utworzyć pojemnik na klipy filmowe i jak załadować do niego plik .SWF.
Utwórz nowy symbol klipu filmowego (Ctrl+F8 lub Command+F8), który zawiera kwadrat lub prostokąt. Kształt ten możesz narysować, używając narzędzia Rectangle. Kształt powinien mieć tę samą wielkość, co scena ładowanego filmu (możesz ją odczytać po otwarciu okna Movie Properties).
Umieść kształt w takim miejscu, aby jego lewy górny róg pokrywał się z punktem o współrzędnych 0, 0. Najprościej można to zrobić, zaznaczając kształt i otwierając panel Info. Kliknij kwadracik reprezentujący lewy górny punkt odniesienia dla ramki otaczającej zaznaczenie i w pola X oraz Y wpisz 0. Po wpisaniu każdej liczby naciśnij Enter.
Powróć do głównej listwy czasowej (Scene 1) i umieść klon klipu filmowego na scenie. W panelu Instance nadaj klonowi nazwę movieHolder. Umieść go w miejscu, w którym chcesz, aby ukazał się załadowany film. W tym momencie możesz także przypisać efekty związane z kolorem, ruch lub zmienić wielkość klonu.
Dodaj akcję loadMovie do klonu przycisku lub ujęcia kluczowego.
W polu URL określ ścieżkę do ładowanego filmu oraz jego nazwę. Z rozwijanej listy Location wybierz opcję Target. W polu obok wpisz nazwę movieHolder. W polu tym określasz nazwę klonu klipu filmowego, do którego chcesz załadować film.
Uwaga! Klon musi istnieć w czasie wywołania akcji loadMovie. Klon na scenie można umieścić ręcznie lub za pomocą skryptu, na przykład przy użyciu metody duplicateMovieClip lub attachMovie. Jeśli argumenty podane dla akcji loadMovie są nieprawidłowe, wtedy film nie zostanie załadowany. Flash nie spróbuje nawet pobrać zewnętrznego pliku .SWF, jeśli klon klipu filmowego o podanej nazwie nie istnieje.
Zapisz i przetestuj film. Lewy górny narożnik załadowanego filmu będzie odpowiadał lewemu górnemu narożnikowi pierwotnego klonu klipu filmowego.
Zauważyłeś zapewne, że przez bardzo krótką chwilę można było zauważyć prostokąt oryginalnego klonu przed załadowaniem do niego zewnętrznego pliku .SWF. Aby wyeliminować ten efekt, przejdź do symbolu klipu filmowego pojemnika na filmy i zmień warstwę zawierającą prostokąt na warstwę ścieżki ruchu (Guide Layer). Takie warstwy nie są dodawane do pliku .SWF przy eksporcie.
Szare tło!
Akcja loadMovie a loadMovieNum
Zapewne zauważyłeś, że akcja loadMovie zmienia się na loadMovieNum po wybraniu z listy Location opcji Level. Ponieważ wpisujesz zmienną (która określa położenie celu) w polu Location, Flash musi odróżnić liczbę określającą poziom od nazwy klonu klipu filmowego.
Z tego też powodu po wybraniu dla akcji loadMovie opcji Level z listy Location (w trybie Normal Mode) akcja będzie wyglądała następująco:
loadMovieNum("external_1.swf", 1);
Spowoduje ona załadowanie pliku external_1.swf do poziomu 1.
Jeśli docelowym klipem filmowym będzie klon movieHolder, wtedy akcja będzie wyglądała następująco:
loadMovie("external_1.swf", "movieHolder");
Koniec szarego tła!
Jeśli chcesz dodać jakieś efekty do załadowanego filmu, użyj skryptu do sterowania klonem nowo załadowanego filmu. W następnej sekcji dowiesz się, jak odbywa się komunikacja pomiędzy załadowanymi filmami.
Na CD-ROM-ie! Dla dalszej nauki dołączyliśmy przykłady związane z akcją loadMovie. Znajdziesz je w katalogu ch20\LoadMovie z CD-ROM-u. Otwórz plik movie1.html w przeglądarce, aby zobaczyć filmy w działaniu.
Komunikacja pomiędzy filmami na różnych poziomach
Jeśli jeden lub dwa filmy zostały załadowane do różnych poziomów, możesz chcieć, aby jedna listwa czasowa sterowała drugą w ten sam sposób, w jaki jeden klip filmowy steruje drugim. Aby różne poziomy mogły się między sobą komunikować, wystarczy używać ścieżek adresowych odnoszących się do odpowiednich poziomów. Metoda dostępu do listwy czasowej jednego poziomu z innego poziomu jest identyczna z metodą dostępu do listwy czasowej jednego klonu klipu filmowego z innego klonu. Jest jednak jedna niewielka różnica. Musisz podać nazwę poziomu, do którego chcesz się odnieść, a nie nazwę klipu filmowego. Nazwa każdego poziomu składa się z trzech części: znaku podkreślenia (_), następnie słowa level i na końcu liczby określającej numer poziomu, którego ma dotyczyć dana akcja.
Ta akcja spowoduje przejście filmu na poziomie 1 do klatki 50:
_level1.gotoAndStop(50);
Ta akcja spowoduje przejście głównego filmu do klatki 50:
_level0.gotoAndStop(50);
Masz także dostęp do klipów filmowych znajdujących się na listwach czasowych filmów załadowanych do innych poziomów. Oto przykład:
_level3.products.play();
Spowoduje on wykonanie akcji play() w klipie filmowym products znajdującym się na listwie czasowej filmu na poziomie 3.
Usuwanie załadowanych filmów
Nawet, jeżeli film załadowany do zajętego już poziomu (zawierającego inny film) spowoduje automatyczne usunięcie poprzedniego filmu przed swoim pojawieniem się, przejście może być lekko zaburzone. Aby upewnić się, że przejście będzie płynne lub zmniejszyć ilość pamięci zajmowanej przez odtwarzacz filmów Flasha, możesz jawnie spowodować usunięcie filmu z dowolnego poziomu lub klonu klipu filmowego, używając akcji unloadMovie. Jedynym parametrem tej akcji jest ścieżka do usuwanego filmu (na przykład, _level1, _root.nazwaKlonu).
Szare tło!
Ładowanie plików przez serwery pośredniczące
Jeśli tworzysz filmy, które będą ładowane przez serwery pośredniczące, wtedy musisz zastosować sztuczkę, dzięki której ładowane są zawsze „najświeższe” wersje plików .SWF przy każdym odwiedzeniu witryny przez użytkownika. Czym jest serwer pośredniczący (proxy)? Wraz ze wzrostem ilości szybkich połączeń internetowych (DSL lub poprzez sieci telewizji kablowej), wielu dostawców usług internetowych przepuszcza wszystkie wychodzące zapytania HTTP przez komputer, który buforuje poprzednie zapytania dotyczące tego samego adresu internetowego. Za każdym razem, kiedy wpisujesz do przeglądarki adres internetowy, wykonujesz zapytanie HTTP. Jeśli komputer buforujący, zwany serwerem pośredniczącym lub proxy, znajdzie zapytanie, które było już wcześniej wykonane (w określonym przedziale czasu), przesyła do użytkownika zbuforowaną wcześniej zawartość strony, zamiast pobierać rzeczywistą zawartość z serwera, do którego było kierowane zapytanie.
Podobnie dzieje się, gdy film Flasha wysyła zapytanie HTTP za pomocą akcji loadMovie. Wtedy serwer pośredniczący może przesłać zbuforowany wcześniej plik .SWF, zamiast tego, który aktualnie znajduje się na serwerze. Dlaczego jest to takim problemem? Jeśli często uaktualniasz plik .SWF lub chcesz znać dokładne statystyki dotyczące odwiedzania Twojej witryny i oglądania filmów, chcesz, aby użytkownicy rzeczywiście pobierali plik .SWF znajdujący się na serwerze w trakcie zapytania.
Pozostaje pytanie — jak zmusić serwer pośredniczący do pobrania prawdziwego pliku .SWF, zamiast podania jego zbuforowanej kopii? Serwer proxy zna zawartość swojego bufora dzięki adresom internetowym. Jeśli więc przy każdym nowym zapytaniu będziesz zmieniał nazwę ładowanego filmu, wtedy serwer proxy nie znajdzie takiej nazwy w buforze stron.
Aby zmienić nazwę ładowanego pliku, dodamy po prostu losową liczbę na końcu nazwy filmu wpisywanej w akcji loadMovie. Jednak ta losowa liczba nie będzie w rzeczywistości częścią nazwy pliku. Użyjemy raczej imitacji zapytania kierowanego do serwera na końcu pliku. Przypisz następujący skrypt do klonu przycisku wywołującego akcję loadMovie:
on(release){
randomNum = Math.round(Math.random()*9999999999);
loadmovie("external_1.swf?" + randomNum, "movieHolder");
}
W powyższym skrypcie tworzona jest zmienna randomNum, której przypisuje się losową wartość z przedziału od 0 do 9999999998. Przy każdym naciśnięciu przycisku do końca pliku doklejana jest inna liczba. Serwer pośredniczący zinterpretuje to jako nieznane mu zapytanie HTTP i przekieruje je do prawdziwego serwera zawierającego stronę.
Metoda ta chroni nie tylko przed buforowaniem pliku przez serwer pośredniczący, ale także chroni przed buforowaniem załadowanych filmów przez system pamięci podręcznej przeglądarki na komputerze użytkownika.
Koniec szarego tła!
loadMovie jako metoda lub akcja
Akcje loadMovie i unloadMovie mogą zostać użyte w klipie filmowym zarówno jako metoda, jak i akcja. Co to oznacza? Polecenia we Flashu 5 możesz stosować na dwa sposoby: jako metody obiektu typu Movie Clip (lub innych obiektów języka ActionScript) lub jako samodzielne akcje.
Jako akcje loadMovie oraz unloadMovie rozpoczynają linię kodu. Kiedy używasz ich w ten sposób, obiekt docelowy określany jest w parametrach akcji. W poniższym przykładzie plik external_1.swf jest ładowany do klipu movieHolder:
loadMovie("external_1.swf", "movieHolder");
Jako metody są one pisane po nazwie obiektu, którego dotyczy akcja. W ten sposób docelowy obiekt jest już określony przed nazwą akcji. Poprzedni przykład można więc napisać tak:
movieHolder.loadMovie("external_1.swf");
lub tak
_root.movieHolder.loadMovie("external_1.swf");
Ponieważ odnieśliśmy się do klonu movieHolder jako obiektu, metoda loadMovie wie, gdzie ma zostać załadowany plik external_1.swf.
Szare tło!
Ćwiczenie eksperta
Częsta aktualizacja zawartości przy użyciu akcji ładowania i usuwania filmów
Autor: Derek Franklin
Z tego ćwiczenia dowiesz się, jak losowo ładować filmy do Flasha. Podaje także parę przykładów ciekawego zastosowania akcji loadMovie przy twórczych projektach.
Szybką metodą utraty odwiedzających powracających do twojej witryny jest „upewnienie” ich, że nic na stronie się nie zmienia. Grafika zawsze ta sama, tekst także i już po dwóch wizytach odwiedzający zaczynają czuć, że w tej witrynie tracą czas. Nazwać to można znudzeniem — wszyscy wiemy, że łączenie tego wyrazu z flashową witryną to świętokradztwo, ale czasem tak to po prostu wygląda.
Istnieje wiele powodów, z jakich Flashowi twórcy nie chcą aktualizować lub poprawiać ukończonych projektów. Jednym z nich jest popsucie czegoś, co działa, szczególnie przy witrynach o skomplikowanej strukturze. Nie chcą sobie zadać trudu i ponownie zapoznać się ze strukturą filmu, a przeważnie nie jest to proste zadanie.
Aby rozwiązać problem monotonnej zawartości filmów Flasha, firma Macromedia utworzyła aplikację Generator. Generator „w locie” tworzy dynamiczne filmy Flasha pełne ciągle zmieniającego się tekstu oraz grafiki. Chociaż Generator jest wspaniałym narzędziem pozwalającym na częste aktualizacje Flashowych witryn, to jednak nie jest dla każdego. Wymaga nauczenia się nowych rzeczy, a cena tego programu może być zaporą nie do pokonania dla wielu osób. Na szczęście w samym Flashu istnieje funkcja, która pozwala na tworzenie dynamicznych prezentacji, podobnych do tych uzyskiwanych dzięki Generatorowi, przy niewiele większym nakładzie pracy. Jest to akcja loadMovie, która jest częścią arsenału języka ActionScript Flasha 5. Ponieważ pozwala na tworzenie często uaktualnianej zawartości, można ją nazwać „pseudo-Generatorem.” Ale jak to wszystko działa?
Jak działa akcja loadMovie
Akcja loadMovie pozwala na podzielnie filmu na części przez umieszczenie ich w różnych plikach .SWF, które mogą zostać w każdej chwili załadowane do głównego filmu. Chociaż akcja loadMovie jest przeważnie używana do ładowania plików .SWF będących osobnymi filmami, możesz jej także użyć do załadowania:
przycisków do poruszania się po stronie,
filmu ze ścieżką dźwiękową,
obrazu tła,
innego pojedynczego obrazu,
jakiegokolwiek tekstu,
skryptu języka ActionScript.
Wynika stąd dwojaka korzyść.
Po pierwsze, aktualizacja zawartości staje się znacznie prostsza. Na przykład, możesz utworzyć osobny plik .SWF zawierający tekst, który pojawia się zaraz po załadowaniu witryny. Film możesz zapisać pod nazwą text.swf, a akcję loadMovie, która załaduje ten plik do poziomu 1. (główny film zawsze znajduje się na poziomie 0), dodać do głównej listwy czasowej. Wtedy nie będziesz musiał otwierać pliku z główną sceną, szukać go na listwie czasowej, martwić się, że coś zrobisz nie tak, ponownie eksportować i umieszczać cały film na serwerze, aby zmodyfikować tekst pokazujący się po załadowaniu witryny. Przy użyciu akcji loadMovie wystarczy, że zmodyfikujesz plik text.swf, wyeksportujesz go pod tą samą nazwą i umieścisz w tym samym miejscu na serwerze. Podczas odtwarzania głównego filmu program załaduje zmodyfikowany plik i wyświetlany tekst zostanie uaktualniony. W taki sam sposób możesz uaktualniać grafikę lub nawet ścieżkę dźwiękową. Dzięki podzieleniu głównego filmu na parę modułów jego uaktualnianie lub modyfikacja staje się łatwiejsza.
Po drugie, akcja loadMovie umożliwia tworzenie naprawdę dynamicznie zmieniającego się filmu — nawet przy każdym powrocie odwiedzającego na Twoją witrynę! Uwierz mi, po zastosowaniu tej sztuczki nigdy już tak samo nie spojrzysz na budowę Flashowego projektu.
Wyobraź sobie, jakie wspaniałe wrażenie na odwiedzającym wywrze to, że przy każdym wejściu na witrynę odtwarzana jest ścieżka dźwiękowa wylosowana z 10 różnych melodii; albo, że umieściłeś 24 różne obrazy, które pokazują się w zależności od tego, o której godzinie odwiedzający wszedł na witrynę. Wiem, co sobie teraz myślisz — „Brzmi to wspaniale, ale przy takiej ilości danych użytkownik będzie musiał czekać tydzień na ich załadowanie.” Pomyśl jeszcze raz! Użycie akcji loadMovie w połączeniu z dodatkowym bardzo prostym kodem ActionScript pozwala zdziałać cuda pod względem dynamizmu bez zwiększania czasu pobierania filmu. W zasadzie czas ten będzie taki sam, jak w przypadku, w którym umieściłbyś pojedynczą ścieżkę dźwiękową lub obraz w jednym filmie. Pozwól, że pokażę Ci, jak.
Losowa ścieżka dźwiękowa
Pierwszym krokiem przy tworzeniu filmu odtwarzającego losowo wybraną ścieżkę dźwiękową jest utworzenie dziesięciu plików .SWF (może być ich mniej lub więcej). Każdy plik będzie zawierał jedno ujęcie z zapętloną ścieżką dźwiękową. Wyeksportuj tak utworzone pliki .SWF jako muzyka0.swf, muzyka1.swf, muzyka3.swf, itd. Wszystkie zapisz w tym samym katalogu, w którym zostanie umieszczony plik z głównym filmem. Teraz w głównym filmie umieść poniższy skrypt w miejscu, w którym ma rozpocząć się odtwarzanie muzyki:
randomNum = random();
loadMovie("muzyka" + randomNum + ".swf",1);
Pamiętaj, że powyższy kod wywodzi się z Flasha 4. W zasadzie powinieneś użyć skryptu w wersji zalecanej dla Flasha 5, który wymaga nieco więcej pisania przy generowaniu losowej liczby:
randomNum = Math.round(Math.random()*10);
loadMovie("muzyka" + randomNum + ".swf",1);
W czasie wykonywania skryptu generowana jest losowa liczba z przedziału od 0 do 9 (nie od 0 do 10, jak mogłeś się spodziewać, ponieważ 0 także jest jedną z możliwych do wylosowania liczb) i umieszczana w zmiennej randomNum. Następnie za pomocą wygenerowanej liczby akcja loadMovie powoduje załadowanie filmu ze ścieżką dźwiękową do poziomu 1. Losowanie, która ścieżka będzie ładowana, odbywa się przy każdym wejściu na witrynę. Czas pobierania nie zwiększa się, ponieważ za każdym razem ładowana jest tylko jedna wylosowana ścieżka dźwiękowa.
Umieszczenie muzyki na osobnym poziomie umożliwia utworzenie prostej funkcji załączającej i wyłączającej jej odtwarzanie. Wystarczy tylko do odpowiednich przycisków przypisać polecenia ładowania i usuwania muzyki z danego poziomu.
Obrazy w zależności od aktualnej godziny
Pierwszym krokiem przy tworzeniu filmu, który będzie ładował jeden z 24 obrazów o określonej godzinie, jest utworzenie 24 różnych plików .SWF; każdy powinien zawierać obraz umieszczony w pierwszym ujęciu. (Potrzebne są 24 pliki .SWF, ponieważ tyle jest godzin w dniu). Obraz powinien mieć wielkość pasującą do projektu. Nazwij odpowiednio utworzone pliki, na przykład: godzina0.swf, godzina1.swf, itd. Pliki zapisz w tym samym katalogu, w którym zostanie umieszczony plik .SWF z głównym filmem. Następnie w głównym filmie w odpowiednim ujęciu umieść poniższy skrypt:
myDate = new Date();
currentHour = myDate.gethours();
loadMovie("godzina" + currenthour + ".swf", 1);
Skrypt najpierw tworzy obiekt daty (Date) o nazwie myDate. Następnie przy użyciu metody getHours dla obiektu daty pobiera godzinę z systemu użytkownika i umieszcza ją w zmiennej currentHour (0 = 12 w nocy, 23 = 11 w nocy). Na końcu za pomocą akcji loadMovie, korzystającej ze zmiennej currentHour, ładuje odpowiedni plik .SWF, odpowiadający aktualnej godzinie, do poziomu 1.
Jeśli chcesz, aby załadowany obraz pojawił się w odpowiednim miejscu sceny, dodaj poniższy kod na końcu poprzedniego skryptu:
setProperty (_level1, _x, 100);
setProperty (_level1, _y, 100);
(Powoduje to ustawienie górnego lewego narożnika załadowanego filmu w punkcie oddalonym o 100 pikseli od góry sceny oraz o 100 pikseli od lewej krawędzi sceny).
Oto radość z użycia „pseudo-Generatora”! Wykorzystanie możliwości i elastyczności tego polecenia pozwala na tworzenie osobnych plików .SWF dla różnych części filmu, dzięki nim Twoja witryna zawsze będzie aktualna i dynamiczna. Cokolwiek robisz, będziesz miał mnóstwo zabawy z akcją loadMovie.
Format pliku .SWF używany przez akcję loadMovie stał się jednym z podstawowych formatów plików działających na własnych prawach. Oznacza to, że coraz więcej narzędzi pozwala ci na pracę z poszczególnymi częściami filmu na zasadzie modułów .SWF. Coraz więcej programów obsługuje eksport do formatu .SWF, wyliczamy je niżej.
Macromedia Fireworks. Fireworks 3 pozwala eksportować utworzone w nim bitmapy jako pliki .SWF. Dzięki temu możesz łatwo aktualizować pojedyncze elementy graficzne filmu.
Macromedia FreeHand. FreeHand 9 pozwala na tworzenie grafiki wektorowej, jak i prostych animacji, które mogą być wyeksportowane do formatu .SWF.
Adobe LiveMotion. LiveMotion jest pierwszym produktem Adobe, który dotyczy animacji wektorowej w sieci Internet. Chociaż jego możliwości interaktywne nie mogą się równać z możliwościami Flasha, jego interfejs jest fantastyczny i pozwala na szybkie tworzenie pięknej grafiki oraz animacji, która może zostać wyeksportowana w formacie .SWF.
Adobe Illustrator. Illustrator 9 pozwala na tworzenie grafiki wektorowej, jak i prostych animacji (na tych samych zasadach, co w programie FreeHand), które mogą być wyeksportowane do formatu .SWF.
Swift 3D. Chcesz dodać elementy trójwymiarowe do projektu? Ten program umożliwi Ci tworzenie obiektów 3D i ich animowanie, a później eksport do plików .SWF. Możesz go znaleźć na stronie www.swift3d.com.
SwisH. W tym programie możesz tworzyć wspaniałe efekty z tekstem. SWisH zapewnia wspaniały asortyment efektów, które są elastyczne i bez problemów eksportowane do formatu .SWF. Program możesz znaleźć na stronie www.swishzone.com.
Przypis do szarego tła!
Derek Franklin jest współautorem „Flash 5” Creative Web Animation (Berkeley: Peachpit Press, 2000), jednej z najlepszych książek na temat Flasha. Urodzony w Illinois i wychowany w Bloomington, Indiana, ostatnio znowu powrócił do Bloomington. Wspomina melodię „Footloose” Kenny'ego Logginsa, gdyż to właśnie ją pamięta najlepiej z ostatnich lat spędzonych w szkole średniej. Derek twierdzi, że Flasha znalazł „przez przypadek, naprawdę. Na pierwszy rzut oka (Flash 2) raczej niezbyt mi zaimponował. Ale kiedy zobaczyłem, co ludzie robią przy jego użyciu, nie było już odwrotu”. Twierdzi, że jego ulubionym hobby jest „albo granie na perkusji lub bycie duszą towarzystwa — chcą, abym zawsze był pod ręką”.
Koniec szarego tła!
Dostęp do elementów bibliotek współdzielonych
We Flashu 5 pojawiła się nowa funkcja, która umożliwia zarządzanie elementami filmów — zdolność dołączenia zewnętrznych plików .SWF (i symboli, dźwięków, bitmap oraz czcionek wewnątrz nich) do każdego filmu Flasha, którego używasz na swojej witrynie. Takie zewnętrzne pliki .SWF, nazywane bibliotekami współdzielonymi, różnią się od ładowanych plików .SWF.
Biblioteka współdzielona zawarta w pliku .SWF nie jest ładowana do poziomu lub klonu klipu filmowego. Zamiast tego tworzysz w filmie (pliku .FLA) bibliotekę zawierającą elementy, których chcesz użyć w innych filmach Flasha. Na jego podstawie kreujesz plik .SWF zawierający bibliotekę współdzieloną. Po przypisaniu identyfikatora do każdego elementu biblioteki zapisujesz plik .FLA, publikujesz plik .SWF i zamykasz plik .FLA. Następnie otwierasz inny plik .FLA i, używając polecenia File/Open as Shared Library, otwierasz plik .FLA biblioteki współdzielonej. Otwiera się okno biblioteki (przy czym nazwy elementów są wyszarzone). Możesz teraz przeciągać elementy z tej biblioteki do nowego filmu Flasha.
Uwaga! Chociaż elementy są połączone z zewnętrznym plikiem .SWF, będącym biblioteką współdzieloną, w plikach .FLA filmów będą przechowywane kopie dodanych elementów. Nie są one jednak eksportowane z plikiem .SWF w czasie publikacji filmu.
Po utworzeniu pliku z biblioteką współdzieloną wszystkie zmiany zawartości dokonane w plikach .FLA oraz .SWF tej biblioteki spowodują także zmianę współdzielonych elementów w innych filmach korzystających z tej biblioteki. W następnych sekcjach dowiesz się, jak tworzyć pliki bibliotek współdzielonych i używać ich z innymi filmami Flasha.
Ostrzeżenie! W czasie pisania tego tekstu funkcja współdzielenia bibliotek z Flasha 5 nie zawsze działała prawidłowo. Zaleca się, aby używać tylko niewielkich (chodzi o rozmiar w bajtach) elementów współdzielonych, by upewnić się, że będą one pobierane i dostępne dla filmów, które ich używają. Przy tworzeniu każdej witryny testuj co jakiś czas projekt, aby się nie okazało, że coś nie działa po połączeniu wszystkiego w całość.
Tworzenie biblioteki współdzielonej
Aby współdzielić elementy kilku plików Flasha, musisz utworzyć plik (lub pliki) z współdzieloną biblioteką, który będzie dostępny dla innych filmów. Aby stworzyć bibliotekę współdzieloną, wykonaj poniższe czynności.
Otwórz nowy film Flasha (Ctrl+N lub Command+N).
Aby umieścić grafikę w bibliotece, narysuj kształty i inne elementy (tekst, linie, gradienty, itp.). Skonwertuj wszystko do symboli. Wybierz taki typ symbolu (grafika, przycisk lub klip filmowy), który najlepiej odpowiada zastosowaniu symbolu.
Aby umieścić bitmapy oraz dźwięki w bibliotece, zaimportuj pliki tak, jak to robisz normalnie, czyli poleceniem File/Import (Ctrl+R lub Command+R).
Usuń grafikę znajdującą się na scenie. Wszystkie elementy, które mają być współdzielone, muszą znaleźć się w bibliotece.
Aby umieścić całą czcionkę (lub różne jej kroje) w bibliotece, otwórz bibliotekę (Ctrl+L lub Command+L) i z rozwijanego menu Options (znajdującego się prawym górnym narożniku okna biblioteki) wybierz polecenie New Font. W oknie Font Symbol Properties wpisz nazwę, dzięki której będziesz się odwoływał do tej czcionki, z rozwijanej listy Font wybierz odpowiednią czcionkę. Dzięki opcjom na dole okna możesz określić styl czcionki — pogrubienie (Bold) lub (i) kursywa (Italic) — ale nie jest to wymagane (rysunek 20.6).
Rysunek 20.6. Nadaj dodawanej czcionce odpowiednią nazwę, która będzie opisem jej użycia w filmie
Nadawanie nazw elementom
Po umieszczeniu każdego elementu w bibliotece pliku .FLA, musisz mu nadać unikalną nazwę.
Zaznacz symbol, dźwięk, bitmapę lub czcionkę w bibliotece. Z rozwijanego menu Options wybierz polecenie Linkage.
W oknie Symbol Linkage Properties, pokazanym na rysunku 20.7, zaznacz opcję Export this symbol. Wymusi to eksportowanie tego symbolu przy publikacji pliku .SWF. Następnie w pole Identifier wpisz odpowiednią nazwę. Na końcu naciśnij przycisk OK.
Rysunek 20.7. Każdy element z współdzielonej biblioteki wymaga unikalnej nazwy
Powtórz kroki 1. oraz 2. dla każdego elementu z biblioteki.
Położenie biblioteki współdzielonej
Opcjonalnym ustawieniem dla współdzielonej biblioteki .FLA jest względna lub pełna ścieżka dostępu (jako adres URL) do współdzielonej biblioteki .SWF na serwerze. Adres ten musisz określić tylko wtedy, gdy planujesz umieścić współdzieloną bibliotekę .SWF w innym katalogu na serwerze WWW lub na całkowicie innym serwerze.
Z rozwijanego menu Options okna biblioteki wybierz polecenie Shared Library Properties.
W polu URL wpisz położenie pliku .SWF z biblioteką współdzieloną (lub miejsce, gdzie masz zamiar go umieścić po opublikowaniu). Wpisany adres zostanie umieszczony na początku każdej nazwy współdzielonego elementu w filmach używających elementów z tej biblioteki.
Ostrzeżenie! Pamiętaj, aby określić ten adres przed użyciem pliku .FLA z współdzieloną biblioteką z innymi plikami .FLA. Adres ten jest umieszczany w każdym filmie korzystającym z współdzielonej biblioteki i nie zostanie zaktualizowany, jeśli postanowisz go później zmienić w pliku .FLA przechowującym bibliotekę współdzieloną.
Publikowanie współdzielonej biblioteki do pliku .SWF
Po nadaniu elementom biblioteki w pliku .FLA odpowiednich nazw oraz adresu, pod którym znajdzie się opublikowana biblioteka (co nie zawsze jest konieczne), musisz opublikować plik .FLA, tworząc plik .SWF.
Zapisz film w pliku .FLA. Użyj opisowej nazwy, która pozwoli innym członkom zespołu projektującego witrynę poznać, że jest to plik z współdzieloną biblioteką, na przykład wspBiblioteka.fla.
Opublikuj film do pliku .SWF. Inne formaty publikacji nie są potrzebne. W ustawieniach publikacji (polecenie File/Publish Settings) w zakładce Format zaznacz tylko opcję Flash. Naciśnij OK. Wybierz polecenie File/Publish, aby na podstawie pliku .FLA utworzyć plik .SWF.
Zamknij plik .FLA.
Dołączanie elementów z innych filmów
Po opublikowaniu współdzielonej biblioteki w formacie .SWF, możesz użyć współdzielonych elementów w innych filmach.
Utwórz nowy film lub otwórz już istniejący.
Używając polecenia File/Open as Shared Library, przejdź do katalogu, gdzie zapisałeś plik .FLA z współdzieloną biblioteką. W czasie testowania powinieneś umieścić ten plik w tym samym katalogu, w którym znajdują się pliki .FLA korzystające z współdzielonych elementów. Zaznacz plik .FLA z współdzieloną biblioteką i naciśnij Otwórz. W środowisku edycyjnym pojawi się okno, w którym znajdziesz elementy biblioteki współdzielonej; nazwy elementów będą wyszarzone, co oznacza, że nie możesz ich modyfikować.
Przenieś elementy, które chcesz użyć w filmie, z tej biblioteki na scenę. Chociaż Flash skopiuje zawartość każdego współdzielonego elementu, element będzie ładowany z pliku .SWF zawierającego współdzieloną bibliotekę.
Aby zobaczyć, czy element należy do edytowanego filmu, czy jest pobierany z biblioteki współdzielonej, kliknij prawym przyciskiem myszy (lub Control+kliknięcie na Macintoshu) symbol z biblioteki. Z podręcznego menu wybierz polecenie Linkage. W oknie Symbol Linkage Properties (rysunek 20.8) dowiesz się, czy symbol (lub element) jest importowany z pliku .SWF będącego współdzieloną biblioteką.
Rysunek 20.8. Jeśli współdzielony element jest używany w innym filmie, dzięki oknu Symbol Linkage Properties poznasz nazwę pliku .SWF (oraz ścieżkę dostępu) będącego biblioteką współdzieloną
Ostrzeżenie! Nie próbuj używać polecenia Open as Shared Library, gdy plik .FLA z współdzieloną biblioteką jest otwarty. Podobnie, nie możesz otworzyć pliku .FLA poleceniem File/Open, gdy jest aktualnie używany jako biblioteka współdzielona. Zamknij okno biblioteki współdzielonej, zanim przystąpisz do edycji zawartości pliku .FLA zawierającego tę bibliotekę.
Kiedy zakończysz przeciąganie elementów z biblioteki współdzielonej, zamknij jej okno. Gdy publikujesz nowe filmy korzystające z współdzielonej biblioteki w pliku .SWF, upewnij się, że umieściłeś wszystkie pliki na serwerze w celu przeprowadzenia generalnych testów.
Podsumowanie
Jeśli chcesz być pewien, że duże filmy nie będą się zatrzymywać w czasie odtwarzania w Internecie, stosuj dla takich filmów animacje wstępne.
Animacje wstępne mogą używać trzech różnych sposobów sprawdzenia postępów pobierania filmu (pliku .SWF): ifFrameLoaded, _framesLoaded i _totalFrames oraz getBytesLoaded i getBytesTotal. Najdokładniejsze odwzorowanie procesu pobierania umożliwiają metody getBytesLoaded i getBytesTotal Flasha 5.
Możesz podzielić duży projekt na kilka mniejszych plików, które są ładowane przez główny film tylko w razie potrzeby.
Akcja loadMovie pozwala na ładowanie plików .SWF do poziomów oraz do klonów klipów filmowych.
Flash 5 oferuje nową metodę współdzielenia elementów filmów za pomocą bibliotek współdzielonych. Jest to nowy mechanizm dotyczący ładowania elementów, więc zalecamy przetestowanie każdej biblioteki współdzielonej na serwerze przed udostępnieniem witryny użytkownikom.
Niektóre programy umożliwiają zapisywanie danych przesyłanych strumieniowo. Przeglądarki internetowe zapisują też przeważnie w swojej pamięci podręcznej filmy Flasha (pliki .SWF). Jednak to od budowy strony, z której były pobierane, zależy, czy będzie je można zobaczyć, na przykład w trybie Offline, ponieważ niektóre (liczba ta się ciągle zwiększa) strony korzystają ze skryptów uruchamianych po stronie serwera, a to wymaga ponownego połączenia z oryginalną stroną. (przyp. tłum.)
Polskie wydanie tej książki ukazało się pod tytułem „Flash 5. Sztuka tworzenia” nakładem Wydawnictwa Helion (przyp. red.).
2 Część I ♦ Podstawy obsługi systemu WhizBang (Nagłówek strony)
2 H:\Książki\!Kudlaty\Flash 5. Biblia\7 do skladu\r20-06.doc