You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>Spis</strong> <strong>tresci</strong><br />
<strong>Spis</strong> <strong>tresci</strong><br />
Czesc 1.<br />
Rozdzial 1.<br />
Wstep....................................................................................................9<br />
Dla kogo jest przeznaczona ta ksiazka................................................10<br />
Korzysci z przeczytania ksiazki ..........................................................10<br />
Co nowego we Flashu 5 ......................................................................13<br />
Zaawansowane techniki animacji...........................15<br />
Zlozone projekty...............................................................................17<br />
Wykorzystanie automatycznego tworzenia animacji ruchu ................18<br />
Wykorzystanie automatycznego tworzenia animacji ksztaltu.............28<br />
Animowanie masek .............................................................................34<br />
Rozdzial 2. Praca z wideo i grafika 3D .............................................................45<br />
Integracja Flasha i QuickTime ............................................................46<br />
Rotoskopia...........................................................................................54<br />
Symulowanie wideo ............................................................................57<br />
Symulowanie grafiki 3D .....................................................................63<br />
Czesc 2. Zrozumiec ActionScript .........................................67<br />
Rozdzial 3.<br />
Poslugiwanie sie jezykiem ActionScript......................................69<br />
Obiekty i klasy.....................................................................................70<br />
Metody i wlasciwosci..........................................................................71<br />
Pisanie wedlug regul skladni ...............................................................72<br />
Wiecej o interpunkcji ..........................................................................74<br />
Paleta akcji ..........................................................................................75<br />
Uzywanie obiektów.............................................................................82<br />
Stosowanie komentarzy.......................................................................87<br />
Czesc 3. Zarzadzanie czasem i informacja ...........................89<br />
Rozdzial 4.<br />
Zaawansowane przyciski<br />
i interakcja z uzytkownikiem.........................................................91<br />
Niewidzialne przyciski........................................................................92<br />
Animowane przyciski..........................................................................95<br />
Animowane przyciski i symbol klipu filmowego ...............................97<br />
Zlozone przyciski..............................................................................101<br />
Manipulatory zdarzen........................................................................105<br />
Sposoby funkcjonowania przycisków...............................................108<br />
Informacje wprowadzane z klawiatury .............................................111<br />
Obiekt Key ........................................................................................114<br />
Rozdzial 5. Zarzadzanie zasobami Flasha...................................................... 117<br />
Nawigowanie po listwach czasowych klipów filmowych ................118<br />
Nazywanie klonów............................................................................119<br />
Sciezki dostepu..................................................................................121<br />
Wzgledne i bezwzgledne sciezki dostepu.........................................125<br />
<strong>Spis</strong> <strong>tresci</strong><br />
5
<strong>Spis</strong> <strong>tresci</strong><br />
Uzywanie akcji with w tworzeniu sciezek dostepu...........................131<br />
Ukosnik zamiast kropki i akcja Tell Target ......................................133<br />
Klipy filmowe jako pojemniki ..........................................................135<br />
Manipulatory zdarzen klipów filmowych.........................................138<br />
Animacje wstepne.............................................................................142<br />
Rozdzial 6. Zarzadzanie zasobami zewnetrznymi ........................................ 149<br />
Komunikacja za posrednictwem przegladarki internetowej .............150<br />
Dolaczanie filmów z zewnatrz ..........................................................168<br />
Wspólpraca z narzedziem Generator.................................................179<br />
Projektory i akcja FSCommand ........................................................181<br />
Komunikacja z drukarka ...................................................................185<br />
Czesc 4.<br />
Przeksztalcanie grafiki i dzwieku.........................191<br />
<strong>Spis</strong> <strong>tresci</strong><br />
Rozdzial 7. Kontrolowanie klipów filmowych ............................................. 193<br />
Przeciaganie klipu filmowego ...........................................................194<br />
Ustawianie wlasciwosci klipu filmowego .........................................199<br />
Zmiana koloru klipu filmowego ........................................................204<br />
Zmiana kolejnosci ulozenia klipów filmowych ................................209<br />
Wykrywanie upuszczonych klipów filmowych................................212<br />
Detekcja kolizji klipów filmowych...................................................216<br />
Wyznaczanie krawedzi obszarów klipów filmowych.......................219<br />
Powielanie i usuwanie klipów filmowych.........................................221<br />
Przylaczanie klipów filmowych........................................................225<br />
Zmiana wygladu wskaznika myszy...................................................229<br />
Tworzenie animacji za pomoca jezyka ActionScript........................232<br />
Rozdzial 8. Kontrolowanie dzwieku ............................................................... 235<br />
Czesc 5.<br />
Obiekt dzwiekowy.............................................................................236<br />
Przylaczanie dzwieków.....................................................................238<br />
Odtwarzanie dzwieków.....................................................................240<br />
Modyfikowanie dzwieków................................................................243<br />
Modyfikowanie niezaleznych dzwieków..........................................246<br />
Transformowanie dzwieków.............................................................249<br />
Tworzenie systemu dynamicznej kontroli dzwieku..........................252<br />
Uzywanie dzwieków jako plików zewnetrznych..............................257<br />
Przetwarzanie informacji......................................259<br />
Rozdzial 9. Kontrolowanie przeplywu informacji........................................ 261<br />
Deklarowanie danych........................................................................262<br />
Poslugiwanie sie zmiennymi i wyrazeniami .....................................268<br />
Wczytywanie zmiennych z zewnatrz ................................................273<br />
Modyfikowanie zmiennych...............................................................276<br />
Wiazanie zmiennych i funkcja eval...................................................279<br />
Sprawdzanie informacji za pomoca wyrazen warunkowych............282<br />
Wprowadzanie alternatywy do wyrazen warunkowych....................285<br />
Rozgalezianie wyrazen warunkowych..............................................288<br />
Laczenie wyrazen warunkowych<br />
za pomoca operatorów logicznych....................................................291<br />
Zapetlanie wyrazen............................................................................293<br />
Rozdzial 10. Kontrolowanie tekstu.................................................................... 297<br />
Tekst pobierany.................................................................................298<br />
6
<strong>Spis</strong> <strong>tresci</strong><br />
Tekst dynamiczny..............................................................................302<br />
Wiazanie tekstu.................................................................................304<br />
Wyswietlanie tekstu HTML..............................................................307<br />
Animowanie dynamicznego tekstu...................................................310<br />
Kontrolowanie przewijania bloku tekstowego ..................................313<br />
Manipulowanie lancuchami znakowymi...........................................317<br />
Obiekt selekcji ...................................................................................318<br />
Kontrolowanie selekcji wewnatrz bloków tekstowych.....................319<br />
Ogniskowanie bloków tekstowych....................................................322<br />
Obiekt lancucha znakowego ..............................................................326<br />
Analizowanie lancuchów znakowych<br />
za pomoca obiektu lancucha znakowego ..........................................327<br />
Przegrupowywanie lancuchów znakowych<br />
za pomoca obiektu lancucha znakowego ..........................................332<br />
Modyfikowanie lancuchów znakowych<br />
za pomoca obiektu lancucha znakowego ..........................................337<br />
Rozdzial 11. Manipulowanie danymi................................................................ 339<br />
Rozdzial 12.<br />
Wykonywanie obliczen za pomoca obiektu matematycznego ..........340<br />
Obliczanie wartosci katowych<br />
za pomoca obiektu matematycznego.................................................342<br />
Uzywanie funkcji sinus i cosinus<br />
do wyznaczania ruchu ukierunkowanego ..........................................349<br />
Obliczanie odleglosci za pomoca obiektu matematycznego .............353<br />
Generowanie liczb losowych.............................................................356<br />
Porzadkowanie informacji za pomoca tablic.....................................359<br />
Wprowadzanie wskazan daty i pomiaru czasu..................................366<br />
Tworzenie skryptów do wielokrotnego uzywania.............................374<br />
Tworzenie wlasnych klas za pomoca funkcji....................................379<br />
Zarzadzanie zawartoscia<br />
i rozwiazywanie problemów....................................................... 383<br />
Tworzenie wspóldzielonych bibliotek...............................................384<br />
Wspóldzielenie fontów......................................................................388<br />
Edytowanie skryptu...........................................................................390<br />
Dolaczanie zewnetrznych skryptów..................................................393<br />
Poslugiwanie sie paleta Movie Explorer ...........................................395<br />
Wyswietlanie zmiennych i obiektów w oknie Output.......................399<br />
Sledzenie zmiennych w oknie Output ...............................................402<br />
Poslugiwanie sie paleta Debugger.....................................................405<br />
Optymalizowanie filmu .....................................................................409<br />
Unikanie najczestszych bledów.........................................................413<br />
<strong>Spis</strong> <strong>tresci</strong><br />
Dodatek A Podsumowanie metod obiektów i wlasciwosci........................ 417<br />
Dodatek B Kody klawiszy ............................................................................... 431<br />
Dodatek C Podsumowanie kategorii akcji.................................................... 435<br />
7
Wstep<br />
W<br />
Czesci skladowe jezyka HTML<br />
Macromedia Flash stanowi obecnie jedna z najbardziej „goracych” technologii sieciowych.<br />
Wiodace korporacje wykorzystuja na swych witrynach Web szerokie mozliwosci grafiki do<br />
promocji wlasnych marek, wieksze studia filmowe zapowiadaja powstanie najnowszych<br />
produkcji z uwzglednieniem animacji Flasha, a witryny poswiecone sieciowym grom wideo<br />
oraz witryny edukacyjne wzbogacaja doznania odbiorców interaktywnoscia uslug. Jako aplikacja<br />
sluzaca do tworzenia wektorowych animacji, Flash stanowi jednoczesnie doskonale narzedzie<br />
pomocne przy projektowaniu efektownych, ale jednoczesnie ekonomicznych stron internetowych,<br />
pelnych animacji, dzwieku i interaktywnosci. Wlasciwie Flash staje sie powoli standardem<br />
w tworzeniu dynamicznego przekazu, dostepnego przy wykorzystaniu prawie dowolnych<br />
przegladarek i platform sprzetowych.<br />
W miare wzrostu popularnosci programu, rosna tez oczekiwania wobec animatorów<br />
i programistów, którzy wiedza, jak wykorzystac jego sile. Niniejsza ksiazka ma pomóc<br />
czytelnikowi sprostac temu wyzwaniu. Naucz sie tworzyc zlozone animacje, skojarz wyszukanie<br />
interfejsu z przejrzystoscia nawigacji, wreszcie – posiadz dynamiczna kontrole nad grafika,<br />
dzwiekiem i tekstem. Eksperymentuj z technikami omawianymi w ksiazce, tworzac pasjonujace<br />
dziela, teraz dostepne takze dla ciebie dzieki Flashowi. Nie ma cienia przesady w stwierdzeniu,<br />
ze Flash rewolucjonizuje siec, a ta ksiazka pomoze ci stac sie czescia owej rewolucji. Tak wiec<br />
uruchom swój komputer i zaczynamy!<br />
Wstep<br />
9
Dla kogo jest przeznaczona ta ksiazka<br />
Wstep<br />
Dla kogo jest przeznaczona<br />
ta ksiazka<br />
Ksiazka napisana zostala z mysla<br />
o projektantach, animatorach i programistach,<br />
którzy chcieliby rozwinac swoje umiejetnosci<br />
w poslugiwaniu sie Flashem. Zdazyles juz<br />
opanowac podstawy tworzenia animacji i jestes<br />
gotów zajac sie bardziej zlozonymi<br />
zagadnieniami, jak wideo, maskowanie,<br />
dynamiczna kontrola dzwieku czy detekcja<br />
zdarzen. Mozesz nie byc zapalonym<br />
programista, ale jestes przygotowany na<br />
opanowanie sztuki kontrolowania grafiki,<br />
dzwieku i tekstu za pomoca jezyka<br />
ActionScript. Chcesz równiez nauczyc sie<br />
sposobów laczenia przycisków i klipów<br />
filmowych w budowaniu zlozonych menu<br />
rozwijanych, laczenia interaktywnosci<br />
z animacjami w tworzeniu gier zrecznosciowych<br />
czy poznac sposoby komunikacji Flasha<br />
z przegladarkami internetowymi i programem<br />
Macromedia Generator. Jezeli powyzszy opis<br />
pasuje do ciebie, to znaczy, ze niniejsza ksiazka<br />
jest wlasnie tym, czego potrzebujesz.<br />
W ksiazce znajdziesz opisy zaawansowanych<br />
zagadnien zwiazanych z wykorzystaniem Flasha<br />
5, tak wiec zakladam, ze potrafisz juz<br />
swobodnie poslugiwac sie narzedziami<br />
programu w celu tworzenia prostych animacji.<br />
Powinienes umiec rysowac i modyfikowac<br />
ksztalty, jak równiez edytowac grafike<br />
i symbole przycisków. Dobrze by bylo, gdybys<br />
wiedzial, jak poslugiwac sie automatyczna<br />
animacja ruchu i ksztaltu, a takze animacja<br />
klatka po klatce. Powinienes miec juz swobode<br />
w korzystaniu z interfejsu programu –<br />
poruszaniu sie miedzy scena, oknem<br />
modyfikacji symbolu i listwa czasowa,<br />
manipulowaniu warstwami czy pojedynczymi<br />
ujeciami. Oprócz tego potrzebna jest<br />
umiejetnosc importowania bitmap czy<br />
dzwieków i poslugiwania sie nimi, jak równiez<br />
zdolnosc przyporzadkowywania podstawowych<br />
zdarzen poszczególnym przyciskom nawigacji.<br />
Mozesz przypomniec sobie wszystkie te<br />
zagadnienia, wykonujac np. cwiczenia<br />
z dolaczonych do programu samouczków.<br />
Korzysci<br />
z przeczytania ksiazki<br />
Zazwyczaj ksiazki przedstawiaja<br />
zagadnienia na dwa sposoby: albo wymienia<br />
sie i wyjasnia po kolei, jedna po drugiej,<br />
wszystkie funkcje – jak w encyklopedii, albo<br />
zglebia sie jakis konkretny problem,<br />
zachecajac jednoczesnie do nasladowania<br />
prezentowanych sposobów jego<br />
rozwiazania. Ta ksiazka jest inna. Jej<br />
celem jest zademonstrowac czytelnikowi<br />
zaawansowane zagadnienia, zwiazane<br />
z uzywaniem Flasha 5, w logicznym<br />
porzadku – z naciskiem na praktyczny<br />
sposób wykorzystania przedstawianych<br />
technik. Mozna sie wiec dowiedziec, jak<br />
jedne techniki opieraja sie na innych, a takze<br />
w jaki sposób laczyc grupy technik w celu<br />
rozwiazania okreslonego problemu. Kazdy<br />
z przykladów, nad którymi bedziesz<br />
pracowal, pomoze ci zdobyc nowa<br />
umiejetnosc, tak wiec po przeanalizowaniu<br />
calosci materialu bedziesz potrafil tworzyc<br />
naprawde wyszukane i interaktywne<br />
projekty Flasha.<br />
Cwiczenie polegajace na utworzeniu menu<br />
rozwijanego ilustruje na przyklad, jak<br />
z prostych elementów – niewidzialnych<br />
przycisków, zdarzen myszy, opcji sledzenia<br />
przycisków i klipów filmowych –<br />
zaprojektowac bardziej zlozony mechanizm.<br />
Przyklady prezentuja praktyczne<br />
zastosowanie omawianych technik,<br />
a dodatkowe rady wyjasniaja, jak<br />
wykorzystac poznane umiejetnosci w innym<br />
kontekscie.<br />
10
Wstep<br />
Jak korzystac z ksiazki<br />
Koncepcje prezentowane w ksiazce bazuja<br />
na sobie wzajemnie, dlatego tez przy koncu<br />
znajduja sie zagadnienia bardziej<br />
skomplikowane niz na poczatku. Jesli czesc<br />
materialu jest ci juz znana, mozesz od razu<br />
przejsc bezposrednio do zagadnien, które<br />
najbardziej cie interesuja, jednak wieksza<br />
korzysc odniesiesz, studiujac je w kolejnosci,<br />
w jakiej sa omawiane.<br />
Tak jak w innych ksiazkach z serii „Techniki<br />
zaawansowane”, poszczególne techniki<br />
przedstawiane sa w taki sposób, abys mógl je<br />
wypróbowac w momencie, w którym o nich<br />
czytasz. Sledz prezentowane krok po kroku<br />
instrukcje, patrz na rysunki i próbuj wykonac<br />
cwiczenia na wlasnym komputerze. Nauczysz<br />
sie wiecej, jesli bedziesz aktywny i spróbujesz<br />
eksperymentowac z cwiczeniami.<br />
Wsród porad znajdziesz wskazówki na temat<br />
skracania niektórych czynnosci, sposobów<br />
unikania powszechnych bledów, a takze<br />
sugestie dotyczace poszerzania obszarów<br />
zastosowan poszczególnych technik.<br />
W niektórych rozdzialach spotkasz sie<br />
z dodatkowym materialem, prezentowanym<br />
w szarych ramkach. Znajduja sie w nich<br />
zagadnienia spokrewnione z omawianym<br />
tematem, lecz niezwiazane bezposrednio<br />
z wykonywanymi cwiczeniami. Jednak<br />
przeanalizowanie i tych, równie<br />
interesujacych i uzytecznych –<br />
fragmentów pomoze ci glebiej zrozumiec<br />
technologie Flasha.<br />
Co znajdziesz w ksiazce<br />
Ksiazka podzielona jest na piec czesci:<br />
υ Czesc I. Stworzyc zlozona animacje<br />
Ta czesc omawia zaawansowane techniki<br />
tworzenia grafiki i animacji, m. in.<br />
automatyczne tworzenie animacji ruchu<br />
i ksztaltu, maskowanie, korzystanie z plików<br />
wideo w formacie QuickTime oraz<br />
grafiki 3D.<br />
υ Czesc II. Zrozumiec ActionScript<br />
Ta czesc stanowi wprowadzenie do jezyka<br />
ActionScript, skryptowego jezyka<br />
programowania, którego we Flashu uzywa<br />
sie do wprowadzania w filmie elementów<br />
interaktywnosci. Zapoznasz sie<br />
z podstawowymi komponentami jezyka<br />
i zobaczysz, jak za pomoca palety Object<br />
Actions prawidlowo pisac kod.<br />
υ Czesc III. Zarzadzanie czasem i informacja<br />
W tej czesci zapoznasz sie ze sposobami<br />
przyjmowania przez Flasha informacji<br />
wprowadzanych przez odbiorce filmu.<br />
Nauczysz sie takze tworzenia zlozonych<br />
schematów nawigacji za pomoca wielu<br />
listew czasowych i zobaczysz, jak program<br />
komunikuje sie z zewnetrznymi plikami oraz<br />
aplikacjami – np. przegladarkami<br />
internetowymi.<br />
υ Czesc IV. Przeksztalcanie grafiki i dzwieku<br />
Ta czesc demonstruje sposób na uzyskanie<br />
dynamicznej kontroli nad podstawowymi<br />
elementami kazdego filmu Flasha – grafika<br />
i dzwiekiem – przy uzyciu jezyka<br />
ActionScript.<br />
υ Czesc V: Przetwarzanie informacji<br />
Ostatnia czesc zajmuje sie zagadnieniami<br />
zwiazanymi z odczytywaniem,<br />
przechowywaniem, modyfikowaniem<br />
i sprawdzaniem informacji w celu tworzenia<br />
zlozonych srodowisk Flasha, podejmujacych<br />
interakcje z uzytkownikiem.<br />
υ Dodatki<br />
Trzy dodatki zawieraja zestawienie<br />
najwazniejszych obiektów, akcji<br />
i wartosci kodowych klawiszy w jezyku<br />
ActionScript.<br />
Korzysci z przeczytania ksiazki<br />
11
Wstep<br />
Korzysci z przeczytania ksiazki<br />
Zawartosc plyty CD-ROM<br />
Dolaczona do ksiazki plyta CD-ROM zawiera<br />
wiekszosc plików zródlowych Flasha,<br />
potrzebnych do wykonania cwiczen. Dzieki<br />
temu mozesz przesledzic proces powstawania<br />
poszczególnych cwiczen, analizowac skrypty,<br />
a nawet uzyc ich do dalszych eksperymentów.<br />
Na plycie znajdziesz tez wersje demonstracyjna<br />
Flasha 5 oraz lacza do witryn internetowych<br />
(poswieconych temu programowi), na których<br />
zgromadzono najnowsze przyklady, samouczki,<br />
artykuly i porady.<br />
Dodatkowe zródla<br />
Siec jest najlepszym zródlem informacji – dziala<br />
tam zywa, miedzynarodowa spolecznosc<br />
programistów Flasha, dzieki czemu mozesz<br />
z nimi dzielic swoje frustracje, poznawac<br />
najnowsze dziela, jak i poszukac pomocy.<br />
Istnieja biuletyny i listy dyskusyjne poswiecone<br />
uzytkownikom Flasha na róznym poziomie<br />
zaawansowania, a wszystkie oferuja darmowy<br />
dostep. Swoje poszukiwania rozpocznij od<br />
sprawdzenia stron, które znajdziesz na CD-<br />
ROM-ie; zajrzyj tez palety Flasha o nazwie<br />
Macromedia Dashboard, zawierajacej linki do<br />
witryn prowadzonych przez spolecznosc<br />
programistów Flasha.<br />
12
Wstep<br />
Co nowego we Flashu 5<br />
W wersji 5. zarówno poczatkujacy, jak<br />
i zaawansowani uzytkownicy odnajda szereg<br />
nowych cech. Nizej wymienione to tylko kilka<br />
sposród tych, które czynia z Flasha 5 jeszcze<br />
potezniejsze, elastyczniejsze i latwiejsze<br />
w uzyciu narzedzie.<br />
Poprawiony interfejs<br />
Wiekszosc narzedzi i polecen jest teraz dostepna<br />
za posrednictwem palet – niewielkich okien,<br />
których uklad mozna dowolnie aranzowac,<br />
by dopasowac srodowisko pracy do swoich<br />
preferencji. Movie Explorer, nowa paleta,<br />
przedstawia hierarchiczny obraz twojego filmu,<br />
pozwalajac na wyszukiwanie i modyfikowanie<br />
wybranych elementów. We Flashu 5 mozesz<br />
tworzyc wlasne skróty klawiaturowe.<br />
Poprawiono tez wyglad listwy czasowej, dzieki<br />
czemu latwiej jest wyszukiwac i edytowac<br />
klatki i ujecia kluczowe.<br />
Nowe narzedzia rysunkowe<br />
Wsród nowych narzedzi ulatwiajacych<br />
rysowanie jest Pen Tool, pozwalajace bardziej<br />
precyzyjnie definiowac krzywe Beziera,<br />
przeciagane siatki, rozbudowany system<br />
kontroli barwy oraz nowy system selekcji,<br />
ulatwiajacy identyfikacje kolorów wypelnien.<br />
Wspólne biblioteki i SmartClips<br />
Nowe elementy w postaci wspólnych bibliotek<br />
oraz narzedzia SmartClips ulatwiaja prace nad<br />
rozbudowanymi projektami. Dzieki wspólnym<br />
bibliotekom grupa filmów moze dzielic<br />
ustawienia, a SmartClips umozliwia<br />
przygotowywanie szablonów na potrzeby<br />
specjalnych klipów filmowych.<br />
Wieksza integracja<br />
Flash 5 rozpoznaje wiecej formatów plików,<br />
np. pliki muzyczne MP3, umozliwia takze<br />
importowanie bezposrednio do dokumentu<br />
Flasha plików PNG programów FreeHand<br />
i Fireworks, z zachowaniem warstw, tekstu<br />
i innych elementów. Flash udostepnia<br />
równiez podstawowe funkcje formatowania<br />
tekstu HTML oraz obsluge obiektów XML.<br />
Wieksza interaktywnosc<br />
Poprawiony interfejs ActionScript<br />
udostepnia nowe obiekty, metody,<br />
wlasciwosci, jak równiez dodatkowe akcje<br />
i funkcje drukowania oraz detekcji kolizji.<br />
Nowa paleta ActionScript ulatwia pisanie<br />
skryptów, a paleta Debugger pomaga<br />
rozwiazywac problemy, pozwalajac na<br />
sledzenie i modyfikacje zmiennych oraz<br />
wlasciwosci w czasie odtwarzania.<br />
Co nowego we Flash 5<br />
13
Wstep<br />
14
Czesc 1.<br />
Zaawansowane techniki animacji<br />
15
Rozdzial 1.<br />
16
Zlozone projekty<br />
1<br />
Czesci skladowe jezyka HTML<br />
Kluczem do tworzenia zlozonych animacji we Flashu jest podzial projektu na prostsze elementy.<br />
Ruch biegacza to generalnie ciag ruchów jego konczyn; i podobnie jest w programie – przyjmij,<br />
ze na kazdy projekt sklada sie grup podstawowych elementów. Takie rozkladanie jednego<br />
skomplikowanego ruchu na kilka mniejszych, prostszych, pozwala zastosowac na kazdym<br />
wyodrebnionym elemencie odpowiednia technike animacji, w efekcie upraszczajac caly proces<br />
jej tworzenia. Technika ta daje ci tez wieksza kontrole nad twoim dzielem i bardziej pozytywne<br />
rezultaty.<br />
Zalózmy teraz, ze chcialbys wykonac animacje glowy odwracajacej sie do kamery. Dobrze byloby<br />
zastanowic sie najpierw, jak podzie lic cala animacje na pojedyncze ruchy. Animowanie od razu<br />
calej sekwencji jest trudne – jesli nie niemozliwe – z uwagi na mnogosc zachowan<br />
poszczególnych elementów, skladajacych sie na ruch glowy. Sam zarys glowy moze byc<br />
animowany klatka po klatce, jako ze chodzi nam o zaprezentowanie zmiany widoku od profilu<br />
do pozy frontalnej. Poszczególne elementy twarzy tworzyc beda klony symboli, odpowiednio<br />
sciskane i rozciagane w automatycznej animacji ruchu, zgrane z obrotem calej glowy. Wlosy<br />
natomiast móglbys poddac animacji ksztaltu, oddajac w ten sposób ich falowanie czy nawet<br />
lekkie opadanie w momencie, kiedy glowa nagle przestaje sie poruszac.<br />
Poznanie sposobu na laczenie róznych technik odseparowywania elementów animacji umozliwia<br />
nie tylko pokonanie wielu problemów w procesie tworzenia animacji, ale takze przyzwyczaja cie<br />
do korzystania ze zlozonych warstw i tworzenia symboli poszczególnych komponentów projektu.<br />
To z kolei ulatwia zarzadzanie animacja i pózniejsze poprawki.<br />
Niniejszy rozdzial opisuje techniki tworzenia zlozonych animacji przez laczenie i rozszerzanie<br />
podstawowych zdolnosci Flasha.<br />
Zlozone projekty<br />
17
Tworzenie animacji ruchu<br />
Rozdzial 1.<br />
Wykorzystanie automatycznego<br />
tworzenia animacji ruchu<br />
Proces automatycznego tworzenia animacji<br />
ruchu (Motion Tweening) umozliwia zmiane<br />
dowolnych wlasciwosci klonu symbolu,<br />
np. jego umiejscowienia, rozmiaru, obrotu<br />
w przestrzeni, koloru, czy przezroczystosc.<br />
Z uwagi na wszechstronnosc, technika ta<br />
znajduje zastosowanie przy rozwiazywaniu<br />
róznorodnych problemów zwiazanych<br />
z animacja, podstawa wiekszosci proje któw we<br />
Flashu. Jako ze automatyczna animacja ruchu<br />
ma wiele wspólnego z wlasciwosciami klonu<br />
symbolu, mozna przyjac, ze tak naprawde jest<br />
to animacja samego klonu. Niezaleznie od tego,<br />
czy na scenie faktycznie odbywa sie konkretny<br />
ruch, zmiany klonów pomiedzy poszczególnymi<br />
ujeciami kluczowymi wymagaja zastosowania<br />
automatycznej animacji ruchu. Jesli przyjmiesz,<br />
ze jest to animacja klonu, latwiej bedzie ci<br />
zdecydowac, kiedy wykorzystac animacje<br />
ruchu, kiedy animacje ksztaltu, a kiedy animacje<br />
klatka po klatce.<br />
Tworzenie<br />
plynnie zapetlonych animacji<br />
Petle animacji sa wazne, poniewaz umozliwiaja<br />
tworzenie ciaglego ruchu przy zdefiniowanych<br />
jedynie kilku ujeciach kluczowych.<br />
Wykorzystuje sie je jako elementy interfejsu,<br />
w postaci obracajacych sie przycisków,<br />
przewijanych menu czy cyklicznych ruchów<br />
w postaci maszerujacej postaci, trzepoczacych<br />
skrzydel motyla lub wirujacej planety. Zeby<br />
zachowac plynnosc takiej zapetlonej animacji,<br />
trzeba upewnic sie, ze zarówno pierwsza, jak<br />
i ostatnia klatka kluczowa sa identyczne, lub<br />
prawie identyczne, tak by miec wrazenie<br />
ciaglosci ruchu.<br />
Rozwazymy teraz sposób wykonania dwóch<br />
najpopularniejszych typów zapetlonej animacji:<br />
grafiki przewijanej i grafiki animowanej po<br />
zamknietej sciezce.<br />
Rys. 1.1. Piec obiektów umiejscowionych<br />
na scenie tak, jak moglyby wygladac<br />
w poczatkowym momencie przewijania<br />
od prawej do lewej. Obiektami moga byc<br />
przyciski lub proste grafiki<br />
Rys. 1.2. Zgrupuj poszczególne obiekty,<br />
poslugujac sie poleceniem Modify/Group<br />
Pierwsza grupa<br />
Druga grupa<br />
Rys. 1.3. Utwórz okreslony wzór, kopiujac<br />
i wklejajac grupe<br />
18
Zlozone projekty<br />
Rys. 1.4. Powyzsza grupa sklada sie jedynie<br />
z dwóch obiektów. Utwórz kolejne grupy,<br />
zeby calosc wykraczala poza scene<br />
Rys. 1.5. Utwórz grupe z calego wzoru ulozenia<br />
elementów<br />
Rys. 1.6. Druga powtarzajaca sie grupa zostaje<br />
przeniesiona w miejsce, które na poczatku<br />
zajmowala pierwsza<br />
Grafika przewijana jest powszechnym<br />
elementem interfejsu, majacym zastosowanie<br />
chocby w prezentowaniu opcji menu. Technike<br />
ta mozesz równiez wykorzystac do tworzenia<br />
animacji tla, odgrywanej nieustannie<br />
w oczekiwaniu na okreslone dzialanie<br />
uzytkownika.<br />
W celu stworzenia<br />
grafiki przewijanej:<br />
1. Utwórz elementy, które maja byc przewijane<br />
po scenie, a nastepnie rozmiesc je tak, jak<br />
moglyby wygladac w dowolnym momencie<br />
(rys. 1.1).<br />
2. Zaznacz wszystkie elementy i wybierz<br />
Modify/Group (rys. 1.2).<br />
3. Skopiuj grupe do schowka, a nastepnie<br />
wklej kopie zaraz obok oryginalu – tak, zeby<br />
calosc tworzyla ciag powtarzajacych sie<br />
elementów. Na przyklad, jesli twoje<br />
elementy sa przewijane od prawej do lewej,<br />
umiesc nowa grupe na prawo od oryginalu<br />
(rys. 1.3).<br />
Zwykle przewijane elementy sa wieksze niz<br />
rozmiar sceny, ale jesli twoja pierwsza grupa<br />
jest mniejsza, to bedziesz musial powielic ja<br />
wiecej niz raz, zeby uzyskac powtarzajacy<br />
sie wzór, rozciagajacy sie poza scene<br />
(rys. 1.4).<br />
4. Zaznacz wszystkie utworzone grupy<br />
i zgrupuj je w jedna calosc (rys. 1.5). Dzieki<br />
temu bedziesz mógl ja animowac.<br />
5. Utwórz ujecie kluczowe w pózniejszym<br />
punkcie na osi czasu.<br />
6. Zaznacz grupe z ostatniego ujecia<br />
kluczowego i przesun ja tak, zeby druga<br />
powtarzajaca sie grupa elementów byla<br />
przyporzadkowana pierwszej. Kiedy<br />
przesuwasz grupe, posluguj sie linia jej<br />
zaznaczenia, zeby dopasowac jej pozycje<br />
(rys. 1.6).<br />
7. Utwórz automatyczna animacje dla<br />
przygotowanych ujec kluczowych.<br />
Tworzenie animacji ruchu<br />
19
Rozdzial 1.<br />
Tworzenie animacji ruchu<br />
8. Wstaw nowe ujecie kluczowe dokladnie<br />
przed ostatnim ujeciem, które nastepnie usun<br />
(rys. 1.7). W rezultacie uzyskasz ladnie<br />
zapetlona animacje, która nie polega jedynie<br />
na ciaglym odtwarzaniu dwóch<br />
identycznych klatek.<br />
Sciezka ruchu w warstwie wzorcowej (Guide<br />
Layer) pozwala na uzyskanie plynnego ruchu<br />
wzdluz sciezki, od punktu poczatkowego do<br />
koncowego. Jesli punkt koncowy sciezki bedzie<br />
odpowiadal poczatkowemu, uzyskasz petle „bez<br />
szwów” i wlasciwie zamknieta sciezke ruchu.<br />
W celu stworzenia<br />
zamknietej sciezki ruchu:<br />
1. Utwórz symbol graficzny i umiesc jego klon<br />
w obrebie sceny (rys. 1.8).<br />
2. Utwórz warstwe wzorcowa, klikajac ikone<br />
Add Guide Layer ponizej warstw. Pojawi<br />
sie nowa warstwa, a pierwsza stanie sie<br />
warstwa podporzadkowana (rys. 1.9).<br />
3. W warstwie wzorcowej narysuj elipse.<br />
4. Wybierz narzedzie strzalki (Arrow)<br />
z ustawionym modyfikatorem przyciagania<br />
(Snap), a nastepnie umiesc punkt srodkowy<br />
klonu na sciezce symbolizowanej przez<br />
elipse (rys. 1.10).<br />
Usuwamy ostatnie ujecie<br />
kluczowe z klatki 15.<br />
Tworzy nowe ujecie kluczowe<br />
Rys. 1.7. Utwórz nowe ujecie kluczowe<br />
(u góry) i usun ostatnie ujecie kluczowe<br />
(u dolu)<br />
Rys. 1.8. Klon symbolu graficznego<br />
umieszczamy w obrebie sceny. Tworzymy<br />
automatyczna animacje wzdluz sciezki<br />
Warstwa<br />
wzorcowa<br />
Warstwa<br />
podporzadkowana<br />
Rys. 1.9. Sciezka ruchu bedzie sie znajdowac<br />
w warstwie prowadzacej, powyzej warstwy<br />
Layer 1<br />
Klon symbolu Ziemi<br />
Punkt srodkowy<br />
Sciezka ruchu<br />
Rys. 1.10. Punkt przyciagania klonu symbolu<br />
Ziemi zostaje przylozony do sciezki ruchu<br />
20
Zlozone projekty<br />
Rys. 1.11. Pozycje Ziemi w klatce 1. i klatce 14.<br />
w warstwie Layer 1 sa identyczne<br />
Rys. 1.12. Punkt srodkowy Ziemi w srodkowym<br />
ujeciu kluczowym zostal umiejscowiony na<br />
drugim wierzcholku elipsy<br />
Ziemia w ujeciu<br />
kluczowym 7.<br />
5. Dodaj klatki do obydwu warstw i utwórz<br />
nowe ujecie kluczowe w ostatniej klatce<br />
warstwy podporzadkowanej. Zeby otrzymac<br />
zapetlona animacje, zarówno pierwsze, jak<br />
i ostatnie ujecie kluczowe musza byc<br />
identyczne (rys. 1.11).<br />
6. Zaznacz srodkowa klatke w warstwie<br />
podporzadkowanej i utwórz nowe ujecie<br />
kluczowe. W tym ujeciu klon powinien<br />
znajdowac sie po przeciwnej stronie elipsy –<br />
przesun go (rys. 1.12).<br />
7. Zaznacz wszystkie klatki pomiedzy trzema<br />
ujeciami kluczowymi i z palety Frame<br />
wybierz Motion Tweening. Twój klon<br />
wedruje teraz wzdluz sciezki wyznaczonej<br />
przez elipse. Niestety, zamiast wykonac<br />
pelne okrazenie, po prostu wraca do punktu<br />
wyjscia (rys. 1.13).<br />
Tworzenie animacji ruchu<br />
Ziemia w ujeciach<br />
kluczowych 1. i 14.<br />
Rys. 1.13. Ziemia porusza sie w ta i z powrotem<br />
po tym samym odcinku elipsy<br />
21
Rozdzial 1.<br />
Tworzenie animacji ruchu<br />
8. Chwyc klon w ostatnim ujeciu kluczowym<br />
warstwy podporzadkowanej i przesun go<br />
w poblize klonu z ujecia srodkowego,<br />
uwazajac, by punkt srodkowy pozostawal<br />
caly na sciezce (rys. 1.14). Flash<br />
automatycznie animuje dwa klony,<br />
wybierajac najbardziej bezposrednia sciezke,<br />
tak wiec skracajac odleglosc pomiedzy<br />
dwoma ostatnimi ujeciami kluczowymi<br />
z dolnego odcinka elipsy, zmuszasz program<br />
do wykorzystania wlasnie tego odcinka.<br />
Teraz twój klon powedruje wzdluz obu stron<br />
elipsy (rys. 1.15).<br />
Wskazówka<br />
• Ten sam efekt zapetlenia mozesz równiez<br />
otrzymac, usuwajac niewielki fragment<br />
sciezki. Tworzac przerwe, uzyskujesz<br />
w rzeczywistosci otwarta sciezke z punktami<br />
poczatkowym i koncowym, okreslajaca ruch<br />
twojego klonu (rys. 1.16).<br />
Korzystanie<br />
z wielu warstw podporzadkowanych<br />
Pojedyncza warstwa wzorcowa moze<br />
oddzialywac na wiecej, niz jedna warstwe<br />
podporzadkowana, umozliwiajac odtwarzanie<br />
kilku animacji na tej samej sciezce. Jest to<br />
swietny sposób na budowanie zlozonych<br />
animacji, wykorzystujacych wiele obiektów<br />
poruszajacych sie w tym samym kierunku,<br />
np. maszerujacy zolnierze, krwinki<br />
przeplywajace przez arterie, wystrzeliwane raz<br />
za razem kule czy zrywajace sie do ucieczki<br />
stado bydla. Podczas, gdy poszczególne klony<br />
moga objawiac drobne róznice w zachowaniu,<br />
ty – opierajac sie na warstwie wzorcowej –<br />
zawsze zachowujesz kontrole nad ich glównym<br />
kierunkiem ruchu.<br />
Dla przykladu, liscie powiewajace wzdluz sceny<br />
moga byc animowane wszystkie<br />
z wykorzystaniem tylko jednej warstwy<br />
wzorcowej. Warstwa ta okresla glówny<br />
kierunek wiatru, a przy tym poszczególne liscie<br />
zachowuja pewna odrebnosc w sposobie<br />
przemieszczania sie, okreslona w oddzielnych<br />
warstwach podporzadkowanych.<br />
Ziemia w ujeciu<br />
kluczowym 14.<br />
Ziemia w ujeciu kluczowym 1.<br />
Rys. 1.14. Trzy ujecia kluczowe Ziemi.<br />
Pierwszy klon jest ustawiony blizej<br />
srodkowego klonu w górnej czesci elipsy,<br />
podczas gdy ostatni klon znalazl sie w poblizu<br />
srodkowego klonu w dolnej czesci elipsy<br />
Rys. 1.15. Ziemia porusza sie wokól<br />
zamknietej sciezki<br />
Rys. 1.16. Niewielka przerwa tworzy<br />
poczatkowy i koncowy punkt dla twojej<br />
sciezki ruchu<br />
Ziemia w ujeciu<br />
kluczowym 7.<br />
Punkt poczatkowy<br />
Punkt<br />
koncowy<br />
Ziemia w ostatnim ujeciu<br />
kluczowym znajduje sie<br />
w punkcie koncowym sciezki<br />
22
Zlozone projekty<br />
Rys. 1.17. Zaznaczenie warstwy<br />
podporzadkowanej (u góry) i wstawienie nowej<br />
warstwy automatycznie przeksztalca utworzona<br />
warstwe w warstwe podporzadkowana<br />
Przeciagnij<br />
warstwe Layer 2<br />
ponizej warstwy<br />
wzorcowej<br />
Rys. 1.18. Zwykla warstwa (Layer 2) moze zostac<br />
przeksztalcona w warstwe podporzadkowana<br />
przez przeciagniecie ponizej warstwy wzorcowej<br />
Zmieniajac sciezke w warstwie wzorcowej,<br />
wplywasz na zachowanie jednoczesnie<br />
wszystkich lisci. Takie wykorzystanie<br />
pojedynczej sciezki do zarzadzania wieloma<br />
warstwami jest przykladem sposobu, w jaki<br />
mozesz budowac cale zlozone animacje –<br />
w naszym przypadku powiewajace liscie –<br />
z bardzo prostych elementów: jednej warstwy<br />
wzorcowej i jednego symbolu liscia.<br />
W celu przyporzadkowania<br />
drugiej warstwy podporzadkowanej<br />
warstwie wzorcowej:<br />
1. Zaznacz pierwsza warstwe<br />
podporzadkowana i kliknij ikone Insert<br />
Layer. Nad pierwsza warstwa<br />
podporzadkowana pojawi sie druga<br />
(rys. 1.17).<br />
lub<br />
Mozesz wykorzystac inny sposób, klikajac<br />
istniejaca zwykla warstwe i przeciagajac ja<br />
ponizej warstwy podporzadkowanej. Teraz<br />
ta warstwa stanie sie warstwa<br />
podporzadkowana (rys. 1.18).<br />
Aby okreslic<br />
punkt srodkowy obiektu<br />
w drugiej warstwie podporzadkowanej:<br />
1. Utwórz druga warstwe podporzadkowana<br />
i wprowadz klon, który chcesz<br />
automatycznie animowac (rys. 1.19).<br />
Tworzenie animacji ruchu<br />
Klon<br />
w warstwie<br />
leaf 2<br />
Klon<br />
w warstwie<br />
leaf 1<br />
Sciezka ruchu<br />
Rys. 1.19. Klon umieszczony na scenie<br />
w warstwie leaf 2<br />
23
Rozdzial 1.<br />
Tworzenie animacji ruchu<br />
2. Zaznacz klon w drugiej warstwie<br />
podporzadkowanej. Wybierz Modify/<br />
Transform/Edit Center (rys. 1.20). W<br />
obrebie klonu pojawi sie bialy krzyzyk,<br />
wskazujacy aktualny punkt srodkowy<br />
(rys. 1.21).<br />
3. Przeciagnij krzy zyk w nowe miejsce.<br />
4. Usun zaznaczenie klonu, klikajac w obrebie<br />
sceny.<br />
5. Zaznacz ponownie klon. Nowy punkt<br />
srodkowy pojawi sie w miejscu, które przed<br />
chwila okresliles (rys. 1.22).<br />
6. Poslugujac sie narzedziem strzalki<br />
(Arrow Tool) z aktywnym modyfikatorem<br />
przyciagania (Snap to Objects), przeciagnij<br />
punkt srodkowy klonu nad poczatek sciezki<br />
w warstwie wzorcowej (rys. 1.23).<br />
7. Utwórz nowe ujecie kluczowe w ostatniej<br />
klatce. Nowo utworzony klon w ostatnim<br />
ujeciu kluczowym zachowa punkt srodkowy<br />
klonu edytowanego.<br />
8. Teraz przeciagnij klon z ostatniego ujecia<br />
kluczowego nad koniec sciezki w warstwie<br />
wzorcowej. Automatyczna animacja ruchu<br />
w drugiej warstwie podporzadkowanej<br />
przebiega wzdluz tej samej sciezki, co<br />
animacja w warstwie pierwszej. Jednak<br />
nowy punkt srodkowy klonu w drugiej<br />
warstwie podporzadkowanej okresla sposób<br />
prowadzenia obiektu po sciezce (rys. 1.24).<br />
Rys. 1.20. Zaznacz klon w drugiej warstwie<br />
podporzadkowanej i wybierz<br />
Modify/Transform/Edit Center<br />
Punkt srodkowy<br />
Rys. 1.21. Edytowany punkt srodkowy liscia<br />
Nowy punkt<br />
srodkowy<br />
Rys. 1.22. Nowy punkt srodkowy liscia<br />
Lisc wysrodkowany<br />
Lisc<br />
przesuniety<br />
Sciezka ruchu<br />
Rys. 1.24. Dwie automatyczne animacje,<br />
przebiegajace wzdluz tej samej sciezki. Drugi lisc<br />
jest prowadzony inaczej, co stanowi efekt<br />
przesuniecia jego punktu srodkowego<br />
Rys. 1.23. Punkt srodkowy liscia – tutaj<br />
zaznaczony – przylaczono do sciezki<br />
24
Zlozone projekty<br />
Klon w warstwie leaf 2<br />
Klon w warstwie leaf 1<br />
Rys. 1.25. Lisc w warstwie leaf 2 zaczyna<br />
przemieszczac sie po sciezce ruchu zaraz po lisciu<br />
w warstwie leaf 1<br />
Ostatnie ujecie kluczowe przesuniete<br />
z klatki 13. do klatki 9.<br />
Zaznacz<br />
klatki 10 - 13<br />
Przekonwertuj ujecia<br />
kluczowe na zwykle klatki<br />
Rys. 1.26. Przesun ostatnie ujecie kluczowe<br />
w warstwie leaf 1 w poblize pierwszego ujecia<br />
kluczowego (u góry). Zaznacz klatki<br />
nieprawidlowej animacji (w srodku), a nastepnie<br />
przekonwertuj wszystkie ujecia kluczowe na<br />
zwykle klatki (u dolu)<br />
Róznicowanie umiejscowienia<br />
w czasie animacji w drugiej warstwie<br />
podporzadkowanej:<br />
1. Przeciagnij pierwsze ujecie kluczowe<br />
w drugiej warstwie podporzadkowanej<br />
do pózniejszego punktu na osi czasu.<br />
Sekwencja automatycznej animacji ruchu<br />
dla tej warstwy bedzie zaczynac sie po<br />
wystartowaniu pierwszej animacji, ale obie<br />
i tak zakoncza sie w tym samym momencie<br />
(rys. 1.25).<br />
2. Przeciagnij ostatnie ujecie kluczowe<br />
w pierwszej warstwie podporzadkowanej do<br />
wczesniejszego punktu na osi czasu. Ujecie<br />
kluczowe zostanie przesuniete, jednak zaraz<br />
za nim pojawi sie nowe, psujac sekwencje<br />
animacji ruchu.<br />
3. Przekonwertuj ujecia kluczowe w zwy kle<br />
klatki, wybierajac polecenie Insert/Clear<br />
keyframe (rys. 1.26). Pozostalo tylko<br />
dopasowac do siebie poszczególne<br />
sekwencje ruchu w warstwie wzorcowej.<br />
4. Popraw zgranie w czasie animacji ruchu,<br />
przesuwajac pierwsze i ostatnie ujecie<br />
kluczowe w obydwu warstwach<br />
podporzadkowanych.<br />
Wskazówki<br />
• Mozesz urozmaicac animacje przez<br />
rozmieszczanie klonów w dowolnych<br />
punktach wzdluz sciezki w warstwie<br />
wzorcowej. Punkty te niekoniecznie musza<br />
lezec dokladnie na poczatku czy koncu<br />
sciezki. Animacja ruchu i tak bedzie<br />
funkcjonowac.<br />
• Bardziej zlozone efekty osiagniesz,<br />
korzystajac z animowanych klonów<br />
symboli, przemieszczajacych sie wzdluz<br />
sciezki ruchu. Petla animacji<br />
przyporzadkowana do konkretnego symbolu<br />
nie przeszkadza mu jednoczesnie poruszac<br />
sie zgodnie z osia czasu w warstwie<br />
wzorcowej.<br />
Tworzenie animacji ruchu<br />
25
Rozdzial 1.<br />
Tworzenie animacji ruchu<br />
W celu miejscowego zróznicowania<br />
animacji zbudowanej na kilku warstwach<br />
podporzadkowanych:<br />
1. Przejdz do trybu edycji symbolu<br />
graficznego, który wykorzystujesz na<br />
sciezce ruchu.<br />
2. Zaznacz reprezentacje symbolu w oknie<br />
i dokonaj konwersji na symbol graficzny.<br />
W ten sposób tworzysz symbol graficzny<br />
w obrebie innego symbolu, co pozwala<br />
równiez na wykonanie animacji ruchu<br />
w obrebie tego symbolu.<br />
3. Utwórz zapetlona automatyczna animacje<br />
ruchu (rys. 1.27).<br />
4. Wyjdz z trybu edycji symbolu i odtwórz<br />
film, zeby zobaczyc, w jaki sposób animacja<br />
ruchu symbolu integruje sie z glówna<br />
animacja na scenie (rys. 1.28).<br />
Rys. 1.27. Animowany symbol graficzny<br />
liscia, falujacego w góre i w dól<br />
Rys. 1.28. Odtwórz animacje i zobacz,<br />
jak liscie podazaja wzdluz sciezki ruchu,<br />
jednoczesnie wykonujac wlasne ruchy,<br />
okreslone w dodatkowej animacji osobno<br />
dla kazdego z nich<br />
26
Zlozone projekty<br />
Klatka, w której<br />
startuje animacja<br />
Opcje<br />
odtwarzania<br />
Rys. 1.29. Parametr First ustalono na wartosc 4<br />
(u góry), co sprawia, ze petla animacji liscia<br />
bedzie odtwarzana z rozpoczeciem klatki 4.<br />
Pozostale opcje odtwarzania zawarte w menu<br />
rozwijanym to Play Once (odtwórz jednokrotnie)<br />
i Single Frame (pojedyncze ujecie)<br />
Wskazówki<br />
• Na palecie Instance ustaw odpowiednio<br />
parametr odtwarzania w opcji Behavior oraz<br />
parametr opcji First, aby okreslic sposób<br />
odtwarzania animowanych klonów symboli<br />
graficznych (rys. 1.29). Jesli poszczególne<br />
petle animacji beda rozpoczynac sie<br />
w róznych ujeciach, to unikniesz ich<br />
wzajemnego zsynchronizowania wzgledem<br />
siebie (rys. 1.30).<br />
• Obracanie twoich klonów na tym etapie<br />
pracy dodatkowo podkresla zlozonosc<br />
animacji, czyniac ja jeszcze bardziej<br />
interesujaca i spontaniczna.<br />
Poeksperymentuj z obracaniem klonów<br />
poruszajacych sie wzdluz sciezki ruchu.<br />
Tworzenie animacji ruchu<br />
Rys. 1.30. Trzy klony tego samego symbolu graficznego, z róznymi ustawieniami opcji<br />
odtwarzania First. Petla animacji motyla na rysunku po lewej rozpoczyna sie w klatce 1.<br />
Skrzydla zamykaja sie. Petla animacji motyla w srodku startuje w klatce 4. Skrzydla sa<br />
juz zamkniete i zaczynaja sie otwierac. Motyl po prawej otwiera skrzydla – ta petla<br />
animacji rozpoczyna sie w klatce 10<br />
27
Rozdzial 1.<br />
Tworzenie animacji ksztaltu<br />
Wykorzystanie automatycznego<br />
tworzenia animacji ksztaltu<br />
Animowanie ksztaltu jest technika pozwalajaca<br />
tworzyc amorficzne przemiany, niemozliwe<br />
do osiagniecia z wykorzystaniem takich<br />
transformacji klonów symboli, jak rotacja,<br />
skalowanie czy przekrzywianie. Wypelnienie<br />
(Fill), obwiednia (Outline), gradient<br />
(Gradient) i przezroczystosc (Alpha) sa<br />
atrybutami animowanego ksztaltu.<br />
Flash tworzy animacje ksztaltu w sposób, który<br />
jest mozliwie najprostsza droga do celu. Metoda<br />
ta jednak objawia sie czasami nieoczekiwanymi<br />
rezultatami, w rodzaju nakladajacych sie na<br />
siebie ksztaltów czy pojawiajacych sie<br />
niespodziewanie, a nastepnie laczacych sie ze<br />
soba dziur (rys. 1.31). Takie niepozadane efekty<br />
sa zwykle wynikiem tworzenia ujec kluczowych<br />
zawierajacych ksztalty zbyt zlozone do<br />
animowania wszystkich naraz. Podobnie jak<br />
w przypadku automatycznej animacji ruchu, tak<br />
tez i tutaj, dzielenie skomplikowanej sekwencji<br />
animacji ksztaltu na prostsze komponenty,<br />
a nastepnie separowanie ich w osobnych<br />
warstwach, zaowocuje o wiele lepszymi<br />
przejsciami. Wskazniki zmiany ksztaltu<br />
(Shape Hints) umozliwiaja programowi<br />
okreslenie odpowiadajacych sobie punktów<br />
pierwszego i drugiego ksztaltu. Niekiedy<br />
wprowadzenie posrednich ujec kluczowych<br />
i, co za tym idzie, stanów posrednich, moze<br />
usprawnic skomplikowana animacje. Jesli nawet<br />
sklada sie z wielu elementów, latwiej wtedy<br />
zarzadzac kazdym z nich.<br />
Korzystanie ze wskazników<br />
zmiany ksztaltu<br />
Wskazniki zmiany ksztaltu pozwalaja<br />
programowi przyporzadkowac poszczególne<br />
punkty jednego ksztaltu odpowiadajacym im<br />
punktom drugiego. Wprowadzajac wiecej<br />
wskazników zmiany ksztaltu, zyskujesz lepsza<br />
kontrole nad przebiegiem animacji ksztaltu.<br />
Dziura<br />
Ksztalty przejsciowe<br />
Rys. 1.31. Próba przeksztalcenia slowa<br />
„flash” w slowo „shape”. Zwróc uwage na<br />
rozproszenia pomiedzy „s” i „p”, a takze<br />
dziure, która pojawia sie miedzy „h” i „e”<br />
28
Zlozone projekty<br />
Rys. 1.32. Zaznacz pierwsze ujecie kluczowe<br />
animacji ksztaltu i wybierz Modify/Transform/<br />
Add Shape Hint<br />
Pierwszy wskaznik<br />
zmiany ksztaltu<br />
W celu dodania<br />
wskaznika zmiany ksztaltu:<br />
1. Zaznacz pierwsze ujecie kluczowe<br />
automatycznej animacji ksztaltu. Wybierz<br />
Modify/Transform/Add Shape Hint<br />
(rys. 1.32). W srodku twojego ksztaltu<br />
pojawi sie litera otoczona czerwonym<br />
pierscieniem (rys. 1.33).<br />
2. Przesun pierwszy wskaznik zmiany ksztaltu<br />
do punktu w obrebie twojego ksztaltu.<br />
Upewnij sie, ze dla narzedzia strzalki<br />
(Arrow Tool) uaktywniles modyfikator<br />
Snap to Objects, bowiem tylko wtedy<br />
mozliwe bedzie przyciaganie zaznaczenia<br />
do wierzcholków i krawedzi.<br />
3. Zaznacz ostatnie ujecie kluczowe sekwencji<br />
animacji ksztaltu i przesun pasujaca litere,<br />
otoczona pierscieniem, do odpowiedniego<br />
punktu koncowego ksztaltu. Przeniesiony<br />
wlasnie wskaznik zostanie podswietlony na<br />
zielono, a pierwszy wskaznik – na zólto, co<br />
bedzie oznaczac, ze obydwa wskazniki<br />
umiejscowiono prawidlowo (rys. 1.34).<br />
4. Kontynuuj dodawanie wskazników –<br />
pamietajac, ze moze ich byc najwyzej 26 –<br />
az uzyskasz pozadana animacje ksztaltu<br />
(rys. 1.35).<br />
Tworzenie animacji ksztaltu<br />
Rys. 1.33. Pierwszy wskaznik zmiany ksztaltu<br />
pojawia sie w srodku sceny, w pierwszym ujeciu<br />
kluczowym<br />
„Poprzeczka” litery T plynnie<br />
zaweza sie, tworzac I<br />
Rys. 1.34.<br />
Odpowiadajacy<br />
pierwszemu –<br />
wskaznik zmiany<br />
ksztaltu<br />
w ostatnim ujeciu<br />
kluczowym<br />
Rys. 1.35. Zmiana „T” w „I”<br />
z wykorzystaniem wskazników zmiany<br />
ksztaltu (po lewej) i bez nich (po prawej)<br />
Tutaj T,<br />
zmieniajac sie<br />
w I, przechodzi<br />
niepotrzebne<br />
przeobrazenia<br />
29
Rozdzial 1.<br />
Tworzenie animacji ksztaltu<br />
Wskazówki<br />
• Wskazniki rozmieszczaj zgodnie z ruchem<br />
wskazówek zegara lub w przeciwnym<br />
kierunku. Flash lepiej interpretuje<br />
rozmieszczanie sekwencyjne, niz<br />
rozrzucanie punktów po calej scenie.<br />
• Wskazniki zmiany ksztaltu musza byc<br />
rozmieszczane na krawedziach lub po<br />
rogach ksztaltu. Jesli dodasz wskaznik po<br />
prostu wewnatrz lub na zewnatrz ksztaltu,<br />
pozostanie on podswietlony na czerwono<br />
i program go zignoruje.<br />
• Jesli chcesz obejrzec animacje bez<br />
wskazników zmiany ksztaltu, wybierz<br />
View/Show Shape Hints. Opcja zostanie<br />
odznaczona i wskazniki beda ukryte.<br />
• Jesli przesuwasz cala animacje ksztaltu<br />
poleceniem Edit Multiple Frames,<br />
pamietaj, ze bedziesz musial ponownie<br />
ustawiac wszystkie wskazniki zmiany<br />
ksztaltu. Niestety, nie jest mozliwe<br />
przesuwanie wszystkich wskazników<br />
jednoczesnie.<br />
W celu usuniecia<br />
wskaznika zmiany ksztaltu:<br />
1. Przeciagnij niepotrzebny wskaznik poza<br />
scene. Odpowiadajacy mu wskaznik<br />
w innym ujeciu kluczowym zostanie<br />
usuniety automatycznie.<br />
W celu usuniecia<br />
wszystkich wskazników<br />
zmiany ksztaltu:<br />
1. Wybierz Modify/Transform/Remove<br />
All Hints.<br />
30
Zlozone projekty<br />
Pierwsze<br />
ujecie kluczowe<br />
Trzecie<br />
ujecie kluczowe<br />
Rys. 1.36. Zlozona animacja ruchu wymaga<br />
wielu posrednich ujec kluczowych<br />
Ksztalty laczace<br />
Rys. 1.37. Bezposrednia zmiana „Z” w „S”<br />
prowadzi do wypaczenia ksztaltu litery<br />
Rys. 1.38. Ksztalt posredni<br />
Drugie<br />
ujecie kluczowe<br />
Ostatnie<br />
ujecie kluczowe<br />
Rys. 1.39. „Z” bez niespodzianek przechodzi<br />
w posredni ksztalt (w srodku), a pózniej nastepuje<br />
juz tylko plynna przemiana w „S”<br />
Korzystanie<br />
z posrednich ujec kluczowych<br />
Dodawanie posrednich ujec kluczowych<br />
wprowadza do skomplikowanej animacji stany<br />
posrednie, które umozliwiaja tworzenie<br />
prostszych i latwiejszych w zarzadzaniu zmian.<br />
Pomysl o tym, jak o automatycznej animacji<br />
ruchu. Zalózmy, ze chcesz zaprojektowac<br />
animacje przedstawiajaca ruch kuli zmierzajacej<br />
od lewego górnego rogu sceny, przez prawy<br />
górny róg, do lewego dolnego i stamtad do<br />
prawego dolnego rogu (rys. 1.36). Nie<br />
wystarczy wprowadzenie tylko d wóch ujec<br />
kluczowych, jednego z kula w górnym lewym<br />
rogu i drugiego, przedstawiajacego ja w<br />
prawym dolnym rogu sceny, a nastepnie<br />
oczekiwanie, ze Flash tak po prostu utworzy<br />
animacje obiektu zygzakujacego po scenie.<br />
Trzeba dolaczyc do sekwencji dodatkowe u jecia<br />
kluczowe – tak, aby program mógl animowac<br />
kule etapami. I ta sama zasada obowiazuje przy<br />
animacji ksztaltu. Korzystajac z posrednich ujec<br />
kluczowych, uzyskasz bardziej dramatyczny<br />
efekt przejscia jednego obiektu w drugi.<br />
W celu utworzenia<br />
posredniego ujecia kluczowego:<br />
1. Przyjrzyj sie, jak nieudanie przebiega<br />
animacja ksztaltu przedstawiajaca przejscie<br />
litery „Z” w litere „S” (rys. 1.37).<br />
2. Wprowadz ujecie kluczowe w posrednim<br />
punkcie sekwencji animacji.<br />
3. W nowo utworzonym ujeciu kluczowym<br />
poddaj edycji ksztalt, zamieniajac go w cos<br />
w rodzaju schodka, który pózniej zamieni<br />
sie w ostateczny ksztalt (rys. 1.38). Cala<br />
animacja opiera sie teraz na mniejszych<br />
zmianach, dajac lepszy rezultat w postaci<br />
bardziej plynnego przejscia (rys. 1.39).<br />
Tworzenie animacji ksztaltu<br />
31
Rozdzial 1.<br />
Tworzenie animacji ksztaltu<br />
Niekiedy jednak dolaczenie posrednich ujec<br />
kluczowych nie wystarcza i wtedy trzeba sie<br />
dodatkowo posluzyc wskaznikami zmiany<br />
ksztaltu. Nizej podaje trzy sposoby na dodanie<br />
wskazników do animacji ksztaltu, w której<br />
wykorzystano posrednie ujecia kluczowe.<br />
W celu uzycia<br />
wskazników zmiany ksztaltu<br />
z wieloma ujeciami kluczowymi:<br />
1. Zaznacz posrednie ujecie kluczowe i dodaj<br />
wskazniki zmiany ksztaltu, tak jak by to<br />
bylo pierwsze ujecie kluczowe.<br />
Pamietajac o znaczeniu kolorów<br />
podswietlenia, zwróc uwage które wskazniki<br />
naleza do poszczególnych sekwencji<br />
animacji. Zólty oznacza wskaznik dla<br />
pierwszego ujecia kluczowego, a zielony –<br />
odpowiednio, ostatniego (rys. 1.40).<br />
lub<br />
Wstaw nowe ujecie kluczowe, zaraz przy<br />
drugim ujeciu kluczowym, i zacznij<br />
dodawac wskazniki zmiany ksztaltu.<br />
Nowe ujecie kluczowe pozwala dodawac<br />
kolejne wskazniki bez obawy o nakladanie<br />
sie wskazników z poprzedniej sekwencji<br />
(rys. 1.41).<br />
lub<br />
Utwórz nowa warstwe (powielajaca<br />
posrednie i ostatnie ujecia kluczowe<br />
animacji ksztaltu), w której nastepnie dodaj<br />
kolejne sekwencje animacji ksztaltu.<br />
Kopiowanie posredniego ujecia kluczowego<br />
pozwala trzymac wskazniki zmiany ksztaltu<br />
w oddzielnych warstwach, co równiez<br />
pomaga uniknac nakladajacych sie<br />
wskazników (rys. 1.42).<br />
Koncowy wskaznik<br />
zmiany ksztaltu,<br />
odpowiadajacy<br />
wskaznikowi<br />
z pierwszego ujecia<br />
kluczowego<br />
Rys. 1.40. To posrednie ujecie kluczowe<br />
zawiera dwie grupy wskazników zmiany<br />
ksztaltu. Niektóre stanowia wskazniki<br />
koncowego ksztaltu dla pierwszej animacji,<br />
inne odnosza sie do poczatkowego ksztaltu<br />
drugiej animacji<br />
Wskazniki zmiany<br />
ksztaltu w warstwie<br />
Layer 2<br />
Poczatkowy<br />
wskaznik ksztaltu<br />
dla siódmego<br />
ujecia<br />
kluczowego<br />
Rys. 1.41.<br />
Wskaznik<br />
zmiany<br />
ksztaltu<br />
w nowej<br />
warstwie<br />
Rys. 1.42. Warstwa Layer 2 oddziela<br />
poczatkowe wskazniki zmiany ksztaltu,<br />
nalezace do animacji ksztaltu z klatek 7 – 15,<br />
od koncowych wskazników zmiany ksztaltu,<br />
przynaleznych do animacji z klatek 1 – 7<br />
32
Zlozone projekty<br />
Rys. 1.43. Podczas przeksztalcania „F” w „D”<br />
na obrzezach pierwszego ksztaltu pojawia sie<br />
dziura<br />
Rys. 1.44. Dziure oraz ksztalty wypelnione<br />
umieszczono w dwóch osobnych warstwach<br />
Korzystanie z warstw<br />
dla uproszczenia zmian ksztaltu<br />
Funkcja automatycznego tworzenia animacji<br />
ksztaltu umozliwia kreowanie bardzo zlozonych<br />
animowanych sekwencji w obrebie pojedynczej<br />
warstwy, ale poleganie tylko na tym sposobie<br />
prowadzi czasem do zupelnie<br />
nieprzewidywalnych rezultatów. Korzystaj<br />
z warstw do rozdzielania skomplikowanych<br />
ksztaltów, a nastepnie twórz zlozone, ale<br />
prostsze animacje ksztaltu.<br />
Na przyklad, kiedy animujemy przemiane litery<br />
„F” w litere „D”, na krawedziach pierwszego<br />
ksztaltu pojawia sie dziura z koncowego<br />
ksztaltu (rys. 1.43). Wydzielenie dziury<br />
w literze „D” i potraktowanie jej jako bialego<br />
ksztaltu pozwala uzyskac kontrole nad tym,<br />
kiedy i jak sie ona pojawi. Wstaw nowa<br />
warstwe i utwórz druga animacje dla dziury.<br />
Animacja powstala z polaczenia tych dwóch<br />
z pewnoscia da o wiele lepsze efekty (rys. 1.44).<br />
Tworzenie animacji ksztaltu<br />
33
Animowanie masek<br />
Rozdzial 1.<br />
Animowanie masek<br />
Maskowanie jest prostym sposobem na<br />
selektywne odkrywanie czesci warstwy lub<br />
warstw lezacych ponizej. Wymaga to<br />
przeksztalcenia jednej warstwy w warstwe<br />
maski i warstw lezacych ponizej – w warstwy<br />
maskowane.<br />
Dodajac animacje do warstwy maski czy warstw<br />
maskowanych, albo do wszystkich naraz, mozesz<br />
tworzyc dynamiczne maski, które poruszaja sie,<br />
zmieniaja ksztalt, odkrywaja poruszajace sie<br />
obrazki w rezultacie mozesz wykroczyc daleko<br />
poza proste, statyczne obrazki, pokazywane jak<br />
przez judasza. Animowane maski pozwalaja<br />
osiagac takie zlozone efekty, jak poruszajace sie<br />
reflektory, soczewki powiekszajace obrazy czy<br />
tez cos w rodzaju promieni rentgenowskich,<br />
które ukazuja bardziej skomplikowane detale,<br />
kiedy padaja na maskowany obszar. Dzieki<br />
animowanym maskom jest mozliwe takze<br />
uzyskanie kinowych efektów nachodzenia jednej<br />
sceny na druga, czy nawet efektu przyslony, kiedy<br />
to jedna scena znika z ekranu, przyjmujac ksztalt<br />
kurczacego sie okregu i zostawiajac tym samym<br />
kolejna scene na ekranie.<br />
Wstawianie warstw nad maskami i pod nimi<br />
pozwala na jeszcze wieksza zlozonosc<br />
animowanych masek. Przykladowo, ksztalt<br />
wypelniony gradientem alfa da efekt powolnego<br />
rozplyniecia sie ostrych krawedzi maski<br />
w miekkim swietle reflektora.<br />
W celu animowania warstwy maski:<br />
1. W warstwie Layer 1 utwórz obrazek<br />
stanowiacy tlo, ewentualnie zaimportuj<br />
bitmape.<br />
2. Wstaw nowa warstwe powyzej pierwszej<br />
warstwy.<br />
3. Zaznacz górna warstwe i wybierz Modify/<br />
Layer. W polu Type wybierz opcje Mask.<br />
Teraz zaznacz dolna warstwe i wybierz<br />
ponownie Modify/Layer. W polu Type<br />
zaznacz opcje Masked. Górna warstwa<br />
tworzy od tej chwili warstwe maski, a dolna<br />
warstwe maskowana (rys. 1.45).<br />
Warstwa maskowana<br />
Warstwa maski<br />
Rys. 1.45. Warstwa Layer 2 jest warstwa<br />
maski, a warstwa Layer 1 – warstwa<br />
maskowana<br />
34
Zlozone projekty<br />
Animacja ksztaltu<br />
w warstwie Layer 2<br />
Nurkujaca dziewczyna<br />
w warstwie Layer 1<br />
4. W warstwie maski utwórz automatyczna<br />
animacje ruchu lub animacje ksztaltu<br />
(rys. 1.46).<br />
5. W warstwie maskowanej wstaw<br />
odpowiednia ilosc klatek, pasujaca do liczby<br />
klatek animacji w warstwie maski.<br />
6. Zablokuj obie warstwy i ocen efekt<br />
zastosowania animowanej maski na obrazie<br />
w warstwie maskowanej (rys. 1.47).<br />
Rys. 1.46. Animacja ksztaltu, przedstawiajaca<br />
wijaca sie linie, znajduje sie w warstwie maski.<br />
Zdjecie nurkujacej dziewczyny umieszczono<br />
w warstwie maskowanej<br />
Animowanie masek<br />
Rys. 1.47. Animacja ksztaltu<br />
odkrywa zdjecie nurkujacej dziewczyny<br />
35
Rozdzial 1.<br />
Animowanie masek<br />
Wskazówki<br />
• Umiesc nieznacznie rózniace sie miedzy<br />
soba kopie obrazu w zwyklej warstwie,<br />
ponizej warstwy maski i warstw<br />
maskowanych. Animowana maska bedzie<br />
sie teraz zachowywac jak rodzaj filtra<br />
odslaniajacego obraz lezacy ponizej. Dla<br />
przykladu: do warstwy maskowanej wstaw<br />
jasny obraz, a do zwyklej warstwy<br />
znajdujacej sie pod nia – ciemniejsza wersje<br />
tego samego obrazka. Maska zamieni sie<br />
w reflektor oswietlajacy obraz (rys. 1.48).<br />
Poeksperymentuj z innymi kombinacjami<br />
róznych kopii jednego obrazu, np. ostra<br />
i rozmyta, rysunkiem w skali szarosci oraz<br />
kolorowym – czy obrazem rozbarwianym<br />
(rys. 1.49).<br />
• Umiesc w warstwie maski animacje<br />
rozszerzajacego sie prostokata, który<br />
zakrywa scene, nasladujac w ten sposób<br />
kinowy efekt nakladania sie obrazów<br />
(rys. 1.50).<br />
Rys. 1.48. Poruszajacy sie reflektor<br />
umieszczony w warstwie maski (spotlight)<br />
odkrywa zdjecie witrazu z warstwy<br />
maskowanej (bitmap). Ciemniejsza kopia<br />
zdjecia umieszczona zostala w zwyklej<br />
warstwie lezacej ponizej (dark bitmap)<br />
Maska<br />
Obraz<br />
w warstwie<br />
bikers<br />
Animacja<br />
ksztaltu<br />
Obraz 1<br />
Obraz 2<br />
Rys. 1.50. Warstwa maski zawiera duza animacje<br />
ksztaltu, która zakrywa cala scene (u góry).<br />
W efekcie uzyskuje sie kinowy efekt nalozenia<br />
obrazów, zachodzacy miedzy obrazem w warstwie<br />
maskowanej i obrazem znajdujacym sie<br />
w warstwie zwyklej<br />
Rys. 1.49. Poruszajace sie pionowe ksztalty<br />
z warstwy maski (u góry) odkrywaja zdjecie<br />
kolarzy umieszczone w warstwie maskowanej.<br />
Kopia zdjecia wstawiona do lezacej najnizej<br />
zwyklej warstwy jest lekko przesunieta, co<br />
daje efekt zafalowania obrazu (u dolu)<br />
36
Zlozone projekty<br />
Rys. 1.51. Ksztalty w warstwie mask<br />
W celu animowania<br />
warstwy maskowanej:<br />
1. Majac dwie warstwy, przeksztalc górna<br />
w warstwe maski, a dolna – w warstwe<br />
maskowana.<br />
2. Narysuj wypelniony ksztalt (lub ksztalty)<br />
w warstwie maski (rys. 1.51).<br />
Figury te wyznacza obszar, przez który<br />
bedzie widoczna twoja animacja<br />
umieszczona w warstwie maskowanej.<br />
3. W warstwie maskowanej utwórz<br />
automatyczna animacje ksztaltu lub<br />
animacje ruchu, odtwarzana w obrebie<br />
ksztaltu w warstwie maski (rys. 1.52).<br />
4. Zablokuj obie warstwy i zobacz efekt<br />
animowanej maski pojawiajacej sie zza<br />
warstwy maski (rys. 1.53).<br />
Obraz zamku<br />
przemieszczajacego<br />
sie pod maska<br />
Animowanie masek<br />
Rys. 1.52. Animacja ruchu w warstwie<br />
maskowanej (Layer 1) jest odtwarzana<br />
w obrebie ksztaltów w warstwie maski<br />
Rys. 1.53. Obraz zamku przesuwa sie pod<br />
maska. Kolor tla jest kolorem sceny<br />
37
Rozdzial 1.<br />
Animowanie masek<br />
Wskazówka<br />
• Prezentowana technika jest uzyteczna<br />
alternatywa dla poslugiwania sie<br />
automatyczna animacja ksztaltu w celu<br />
animowania krawedzi i podobnych typów<br />
obiektów, które rosna, kurcza sie czy<br />
wypelniaja. Na przyklad, wyobraz sobie<br />
animacje przedstawiajaca dopalajacy sie lont<br />
bomby (rys. 1.54). Utwórz maske lontu,<br />
a nastepnie animacje warstwy maskowanej,<br />
która stopniowo robi sie coraz mniejsza,<br />
przypominajac wlasnie kurczacy sie lont<br />
(rys. 1.55).<br />
Wszystkie wypelnienia w warstwie maski Flash<br />
widzi jako ksztalty kryjace, nawet jesli uzyjesz<br />
przezroczystego wypelnienia lub gradientu.<br />
Wszystkie maski maja wiec ostre krawedzie.<br />
Zeby uzyskac miekszy obrys, umiesc<br />
wypelnienie gradientowe z przezroczystym<br />
srodkiem nad maska lub pod nia – tak, aby<br />
ukryc jej krawedzie.<br />
W celu uzyskania miekkich<br />
krawedzi maski:<br />
1. Utwórz warstwe maski i warstwe<br />
maskowana.<br />
2. W warstwie maskowanej umiesc lub narysuj<br />
obraz stanowiacy tlo.<br />
3. W warstwie maski narysuj elipse.<br />
4. Skopiuj elipse.<br />
5. Wstaw nowa warstwe i umiesc ja miedzy<br />
warstwa maski i warstwa maskowana.<br />
Ta nowa warstwa zostanie przeksztalcona<br />
w warstwe maskowana.<br />
6. Wybierz Edit/Paste in Place. W nowej<br />
warstwie maskowanej pojawi sie nowa<br />
elipsa, która zostanie umieszczona dokladnie<br />
pod elipsa w górnej warstwie maski<br />
(rys. 1.56).<br />
Rys. 1.54. Lont jest coraz krótszy<br />
Maska<br />
Kurczacy sie ksztalt<br />
w warstwie fuse fill<br />
Rys. 1.55. Lont bomby to cienka linia<br />
w warstwie maski. Animowany prostokat<br />
w warstwie maskowanej kurczy sie,<br />
wygladajac jak spalajacy sie, coraz krótszy<br />
lont<br />
Ksztalt w warstwach<br />
ellipse 1 i ellipse 2<br />
Obraz<br />
w warstwie<br />
background<br />
Rys. 1.56. Ta sama<br />
elipsa pojawia sie<br />
zarówno<br />
w warstwie maski<br />
(ellipse 1), jak<br />
i w górnej warstwie<br />
maskowanej<br />
(ellipse 2). Zdjecie<br />
kobiety<br />
umieszczono<br />
w dolnej warstwie<br />
maskowanej<br />
(background)<br />
38
Zlozone projekty<br />
Alfa = 100%<br />
Alfa = 0<br />
Rys. 1.57. Gradient kolowy z przezroczystym<br />
srodkiem, umieszczony w górnej warstwie<br />
maskowanej<br />
Rys. 1.58. Ostateczny wyglad maski o miekkich<br />
krawedziach<br />
Maska<br />
Gradient kolowy<br />
z przezroczystym<br />
srodkiem<br />
Obraz tla<br />
7. Wypelnij wklejona elipse gradientem<br />
kolowym, definiujac jego srodek jako<br />
przezroczysty i obrzeza jako kryjace, w tym<br />
samym kolorze co scena (rys. 1.57).<br />
8. Zablokuj wszystkie trzy warstwy i ocen<br />
efekt maskowania (rys. 1.58).<br />
Warstwa maski pozwala ci widziec poprzez<br />
obszar wyznaczony przez elipse. Górna<br />
warstwa maskowana kryje krawedzie elipsy<br />
– w wyniku tworzenia stopniowego<br />
zaciemnienia w kierunku srodka. Dolna<br />
warstwa maskowana zawiera obraz tla<br />
(rys. 1.59).<br />
Miekkie krawedzie tworzone przy uzyciu<br />
przezroczystych gradientów kolowych spisuja<br />
sie dobrze w przypadku masek kolowych, jesli<br />
jednak ksztalt maski staje sie bardziej<br />
skomplikowany, trzeba uciec sie do dokonania<br />
poprawek na samym ksztalcie.<br />
W celu uzyskania miekkich<br />
krawedzi maski o zlozonym ksztalcie:<br />
1. Utwórz warstwe maski i warstwe<br />
maskowana.<br />
2. Umiesc lub narysuj obrazek w warstwie<br />
maskowanej.<br />
3. W warstwie maski narysuj jakis<br />
skomplikowany ksztalt.<br />
4. Skopiuj narysowany ksztalt.<br />
5. Wstaw nowa warstwe maskowana pomiedzy<br />
warstwe maski i pierwsza warstwe<br />
maskowana.<br />
Animowanie masek<br />
Rys. 1.59. Maska o zmiekczonych krawedziach<br />
stanowi kombinacje maski w górnej warstwie<br />
(warstwie maski), gradientu kolowego<br />
w srodkowej warstwie (górna warstwa<br />
maskowana) i obrazu tla, umieszczonego<br />
w dolnej warstwie (dolna warstwa maskowana)<br />
39
Rozdzial 1.<br />
6. Wybierz Edit/Paste in Place. Twój zlozony<br />
ksztalt pojawi sie w nowej warstwie<br />
maskowanej, dokladnie pod pierwotnym<br />
ksztaltem w górnej warstwie maski<br />
(rys. 1.60).<br />
7. Narysuj obrzeza wokól twojego ksztaltu,<br />
korzystajac z narzedzi Oval Tool lub<br />
Rectangle Tool (rys. 1.61).<br />
8. Obszar pomiedzy narysowanym ksztaltem<br />
a obrzezem wypelnij kolorem tla,<br />
a nastepnie usun pierwotny ksztalt. Twój<br />
zlozony ksztalt stanowi teraz „dziure”<br />
w wiekszym ksztalcie (rys. 1.62).<br />
9. Zaznacz caly ksztalt i wybierz Modify/<br />
Shape/Soften Fill Edges (rys. 1.63).<br />
Rys. 1.60.<br />
Zlozony ksztalt<br />
w górnej<br />
warstwie<br />
maskowanej,<br />
umieszczony nad<br />
obrazem w dolnej<br />
warstwie<br />
maskowanej<br />
Animowanie masek<br />
Pusty<br />
prostokat<br />
Zlozony<br />
ksztalt<br />
Rys. 1.61. Pusty prostokat narysowany<br />
wokól zlozonego ksztaltu<br />
Rys. 1.63. Wybierz Modify/Shape/Soften Fill<br />
Edges<br />
Rys. 1.62. Wypelniajac obszar pomiedzy<br />
ksztaltem i prostokatem, a nastepnie<br />
usuwajac ksztalt, tworzysz otwór<br />
40
Zlozone projekty<br />
Rys. 1.64. Okno dialogowe Soften Edges<br />
Otworzy sie okno dialogowe Soften Edges<br />
(rys. 1.64). Parametr Distance okresla<br />
grubosc miekkiej krawedzi. Parametr<br />
Number of steps ma wplyw na plynnosc<br />
przeksztalcenia ksztaltu – od kryjacego do<br />
prze zroczystego. Parametr Direction okresla<br />
kierunek, w którym bedzie postepowac<br />
zmiekczanie krawedzi.<br />
10. W polu Distance wprowadz wartosc<br />
w pikselach, a nastepnie ustal wartosc<br />
parametru Number of steps i zaznacz opcje<br />
Expand dla parametru Direction. Wszystkie<br />
krawedzie wokól twojego ksztaltu stana sie<br />
mieksze. Jako ze caly ksztalt troche sie<br />
powiekszyl, jednoczesnie zmniejsza sie<br />
otwór (rys. 1.65).<br />
11. Zablokuj wszystkie trzy warstwy i obejrzyj<br />
efekt maskowania (rys. 1.66).<br />
Rys. 1.65. Zmiekczone krawedzie powiekszaja<br />
sie kosztem „dziury”, umozliwiajacej widzenie<br />
poprzez maske w warstwie maski<br />
Animowanie masek<br />
Rys. 1.66. Miekkie krawedzie nieokraglej<br />
maski, utworzone po wybraniu polecenia<br />
Modify/Shape/Soften Edges<br />
41
Rozdzial 1.<br />
Animowanie masek<br />
Chociaz Flash umozliwia tworzenie wielu<br />
warstw maskowanych pod pojedyncza warstwa<br />
maski, to nie mozesz posiadac wiecej, niz jednej<br />
warstwy maski oddzialujacej na dowolna ilosc<br />
warstw maskowanych (rys. 1.67). W przypadku<br />
tworzenia wielu warstw maski musisz<br />
jednoczesnie kopiowac warstwy maskowane<br />
(rys. 1.68). Pojwia sie pytanie, po co wlasciwie<br />
tworzyc wiecej warstw maski? Wyobraz sobie<br />
animacje, w której dwa reflektory przesuwaja<br />
sie niezaleznie po górnej czesci obrazu<br />
(rys. 1.69). Kazdy z tych reflektorów musi<br />
zostac umieszczony na osobnej warstwie, jesli<br />
chcesz je animowac, tak wiec potrzebujesz<br />
dwóch warstw maski.<br />
W celu utworzenia<br />
wielu warstw maski:<br />
1. Umiesc obraz w warstwie maskowanej.<br />
2. Utwórz pierwsza maske w warstwie maski<br />
powyzej obrazka (rys. 1.70).<br />
3. Skopiuj swój obraz do oddzielnej warstwy<br />
maskowanej, powyzej pierwszej maski.<br />
Ksztalt w warstwie<br />
spotlight 2<br />
Ta warstwa nie funkcjonuje<br />
jako warstwa maski<br />
Rys. 1.67. Warstwy Layer 3 i Layer 2<br />
zdefiniowano jako warstwy maski, ale na<br />
warstwe Layer 1 (maskowana) oddzialuje<br />
tylko warstwa Layer 2<br />
Duplikaty warstw<br />
Rys. 1.68. Obie warstwy Layer 2 i Layer 3<br />
moga oddzialywac na warstwe Layer 1 tylko<br />
po jej skopiowaniu<br />
Pierwsza maska<br />
Druga maska<br />
Rys. 1.69. Dwa niezalezne reflektory<br />
nalozone na obraz, kazdy w osobnej<br />
warstwie maski<br />
Rys. 1.70. Pierwszy z reflektorów to animacja<br />
ruchu w warstwie maski<br />
42
Zlozone projekty<br />
Ksztalt<br />
w warstwie<br />
spotlight 1<br />
Rys. 1.71. Drugi z reflektorów jest animacja<br />
ruchu w drugiej warstwie maski, znajdujacej sie<br />
ponad skopiowana warstwa maskowana<br />
Opcja Show<br />
as Outlines<br />
Kontury<br />
warstwy<br />
spotlight 2<br />
Kontury<br />
warstwy<br />
spotlight 1<br />
Rys. 1.72. Wyswietlanie masek w postaci<br />
konturów pozwala podejrzec skrywany pod nimi<br />
obraz. Zaznacz opcje View layers as outlines<br />
w oknie Layer Properties lub kliknij ikone Show<br />
as Outlines w odpowiedniej warstwie<br />
Rys. 1.73.<br />
Dwa<br />
poruszajace<br />
sie reflektory<br />
utworzone<br />
w obrebie<br />
symbolu<br />
graficznego<br />
4. Utwórz druga maske w innej warstwie<br />
maskowanej, powyzej skopiowanego<br />
obrazka (rys. 1.71). Na kazdy z dwóch<br />
identycznych obrazków oddzialuje jedna<br />
z warstw maski, a zatem tak naprawde na<br />
twój obraz wplywajaca obie maski.<br />
Zwiekszaj ilosc warstw maski, kopiujac<br />
obrazek do nowych warstw maskowanych.<br />
Wskazówki<br />
• Zeby widziec, co odkrywaja twoje maski,<br />
uzyj wypelnienia przezroczystego lub<br />
zaznacz opcje View layers as outlines<br />
w oknie Layer Properties (rys. 1.72).<br />
• We Flashu nie jest mozliwe, zeby wiecej niz<br />
jedna warstwa maski oddzialywala na<br />
warstwe maskowana w tym samym punkcie<br />
na osi czasu, tak wiec musisz kopiowac<br />
warstwy maskowane, jak to opisano<br />
w poprzednim cwiczeniu. Jesli spróbujesz<br />
obejsc problem, tworzac symbol graficzny<br />
w kilku warstwach (rys. 1.73), a nastepnie<br />
umieszczajac klon tego symbolu w warstwie<br />
maski (rys. 1.74), program uzyje tylko<br />
warstwy jako maski (rys. 1.75). Nie inaczej<br />
bedzie w przypadku klonu klipu filmowego<br />
w warstwie maski. Warstwy maski z klonem<br />
klipu filmowego pokazuja jedynie pierwsza<br />
klatke z dolnej warstwy jako maske.<br />
Rys. 1.74. Klon<br />
animowanego<br />
symbolu<br />
graficznego<br />
znajduje sie<br />
w warstwie<br />
maski<br />
Rys. 1.75. Flash<br />
uzywa jako maski<br />
jedynie dolnej<br />
warstwy<br />
animowanego<br />
symbolu graficznego<br />
Animowanie masek<br />
43
Rozdzial 1.<br />
Tworzenie wielu masek pozwala na to, by<br />
kazda z warstw maski oddzialywala w takim<br />
samym stopniu na obrazek i animacje.<br />
W omówionym uprzednio cwiczeniu kazdy<br />
z reflektorów oddzialywal na obraz<br />
niezaleznie jeden od drugiego. Gdybys jednak<br />
chcial, aby – zamiast niezaleznego<br />
funkcjonowania – dzialanie kilku masek<br />
uzupelnialo sie wzajemnie, musisz zagniezdzic<br />
pierwsza maske wewnatrz warstwy<br />
maskowanej.<br />
Zagniezdzanie warstw maski<br />
Utwórz swoja pierwsza maske i warstwy<br />
maskowane w symbolu graficznym<br />
(rys. 1.76). Umieszczenie klonu tego<br />
symbolu w warstwie maskowanej na<br />
glównej osi czasu umozliwi ci utworzenie<br />
drugiej maski, oddzialujacej na klon<br />
(rys. 1.77). Zagniezdzajac symbol graficzny<br />
w warstwie maskowanej, mozesz tworzyc<br />
uzupelniajace sie efekty maskowania.<br />
Animowanie masek<br />
Rys. 1.76. Poruszajace sie pionowe paski<br />
maskuja zdjecie kolarzy. Ta animowana maska<br />
jest zawarta w symbolu graficznym (venetian<br />
blind animation)<br />
Rys. 1.77. Poruszajacy sie reflektor maskuje<br />
klon symbolu venetian blind animation.<br />
W efekcie uzyskuje sie dwie animowane<br />
maski, jednak jako pierwsza jest wstawiana<br />
maska venetian blinds, a dopiero po niej<br />
maska reflektora<br />
44
Praca z wideo<br />
i grafika 3D<br />
2<br />
Czesci skladowe jezyka HTML<br />
W tym rozdziale zaglebimy sie w rozwazania o mozliwosciach wykorzystania w projektach Flasha<br />
mediów tworzonych poza programem. Laczenie cyfrowego wideo lub grafiki 3D z funkcjami<br />
Flasha pozwala jeszcze bardziej rozwinac wymowe twoich dziel przy wykorzystaniu calej<br />
interaktywnosci – zaimplementowanego w programie – jezyka ActionScript, a jednoczesnie<br />
bez krepujacych ograniczen narzedzi rysunkowych. Mozesz np. tworzyc prawdziwie interaktywne<br />
filmy, importujac twoje nagrania wideo do Flasha, a nastepnie dodajac przyciski, dzwieki, grafike<br />
i na koncu eksportujac calosc w pojedynczym pliku typu QuickTime. Inny sposób polega na<br />
wykorzystaniu zaimportowanego wideo jako punktu odniesienia dla twojej, tworzonej we Flashu,<br />
animacji, ewentualnie tez ma calkowitym przeksztalceniu wideo na animacje wektorowa za<br />
pomoca odpowiednich narzedzi edycyjnych programu. Ten ostatni efekt jest czesto spotykany<br />
w animacjach Flasha na stronach internetowych, promujacych najnowsze produkcje teatralne<br />
i muzyczne. Krótkie wideoklipy czlonków zespolu sa importowane do Flasha jako grupa<br />
obrazków bitmapowych, które nastepnie zamienia sie w wektorowe i laczy z innymi grafikami<br />
oraz animacjami odtwarzanymi przy akompaniamencie muzyki.<br />
Podobnie wykorzystanie grafiki 3D moze prawdziwie wzbogacic twoje projekty Flasha. Mimo<br />
ze we Flashu nie jest mozliwe importowanie i wyswietlanie trójwymiarowych modeli, istnieja<br />
dodatkowe aplikacje, które pozwalaja korzystac z modeli w prawdziwej przestrzeni 3D,<br />
z udzialem swiatel i kamer, a potem eksportowac podobne projekty w postaci czytelnych dla<br />
Flasha obrazów wektorowych. Trójwymiarowych obiektów i animacji mozna uzywac we Flashu<br />
jako elementów interfejsu, przycisków, a nawet przewodników.<br />
Praca z wideo i grafika 3D<br />
45
Integracja Flasha i QuickTime<br />
Rozdzial 2.<br />
Integracja Flasha i QuickTime<br />
Mimo iz istnieje wiele popularnych formatów<br />
zapisu cyfrowego wideo – wsród nich<br />
QuickTime, MPEG i AVI – Flash wspiera tylko<br />
jeden z nich, QuickTime firmy Apple. Mozesz<br />
importowac filmy QuickTime do Flasha,<br />
a nastepnie dodawac do nich grafike, animacje<br />
i funkcje interaktywne. Na koniec mozna to<br />
wszystko zapisac w zintegrowanym pliku jako<br />
film QuickTime i odtwarzac w przegladarkach<br />
QuickTime Player.<br />
Sa rózne sposoby pozyskiwania sekwencji<br />
filmowych cyfrowego wideo. Mozesz krecic<br />
swoje wlasne, za pomoca cyfrowej kamery, lub<br />
konwertowac analogowe nagrania do postaci<br />
cyfrowej – za pomoca wspólpracujacych<br />
z komputerami stolów montazowych do<br />
przechwytywania obrazów. Zawsze mozna tez<br />
posluzyc sie juz zdigitalizowanymi klipami<br />
wideo, dostepnymi w komercyjnych pakietach<br />
CD-ROM.<br />
W celu zaimportowania do Flasha filmu<br />
QuickTime:<br />
1. W menu File wybierz Import. Otworzy sie<br />
okno dialogowe Import.<br />
2. Zaznacz plik QuickTime, który chcesz<br />
zaimportowac, i kliknij Open.<br />
Flash importuje plik QuickTime do twojego<br />
dokumentu i umieszcza jego klon<br />
w aktywnej warstwie (rys. 2.1). W bibliotece<br />
program umieszcza odnosnik do filmu<br />
zródlowego. Zauwaz, ze jest wyswietlana<br />
tylko pierwsza klatka filmu QuickTime.<br />
Zeby odtworzyc caly klip filmowy, os czasu<br />
w oknie Flasha musi miec wystarczajaca<br />
ilosc klatek. Po zaimportowaniu jest<br />
widoczna tylko ta czesc filmu, która<br />
odpowiada istniejacej liczbie klatek.<br />
Rys. 2.1. Importowanie filmu QuickTime<br />
powoduje umieszczenie w bibliotece<br />
odnosnika, a na scenie jego klonu,<br />
w warstwie Layer 1<br />
46
Praca z wideo i grafika 3D<br />
Rys. 2.2. Ten film QuickTime trwa 18,4 sekund.<br />
Szybkosc animacji Flasha wynosi 12 klatek na<br />
sekunde. Oznacza to, ze potrzebujesz 221 klatek<br />
do odtworzenia calego filmu (18,4 sekund<br />
pomnozone przez 12 klatek na sekunde). Klatka<br />
nr 221 bedzie zawierac ostatnie ujecie filmu<br />
QuickTime<br />
3. Wstaw taka ilosc klatek, aby mozliwe bylo<br />
odtworzenie calego filmu QuickTime. Zeby<br />
obliczyc, ile ich potrzebujesz, pomnóz<br />
dlugosc filmu (w sekundach) przez predkosc<br />
animacji twojego dokumentu Flasha<br />
(domyslnie 12 klatek na sekunde). Wynik<br />
okresla ilosc klatek, potrzebna na osi czasu<br />
do odtworzenia filmu QuickTime (rys. 2.2).<br />
4. W przypadku dodania wiekszej ilosci klatek,<br />
niz jest to potrzebne, Flash po odtworzeniu<br />
ostatniej klatki zawierajacej obraz wyswietli<br />
w oknie przekreslony prostokat (rys. 2.3).<br />
Zaznacz niepotrzebne, puste klatki i wybierz<br />
Insert/Remove Frames.<br />
Wskazówka<br />
• We Flashu jest mozliwy podglad jedynie<br />
sciezki wideo zaimportowanego pliku; jesli<br />
oryginalny plik QuickTime zawiera równiez<br />
sciezke dzwiekowa, to nie bedziesz mógl jej<br />
odsluchac w programie. Mimo to dzwiek nie<br />
ginie i bedzie slyszalny po opublikowaniu<br />
koncowej animacji Flasha w formacie<br />
QuickTime.<br />
Integracja Flasha i QuickTime<br />
Rys. 2.3. Pojawienie sie przekreslonego<br />
prostokata oznacza, ze film QuickTime dobiegl<br />
konca i nie ma juz wiecej klatek z obrazem<br />
do wyswietlenia<br />
47
Rozdzial 2.<br />
Integracja Flasha i QuickTime<br />
Zarzadzanie plikami QuickTime<br />
Zamiast dolaczania pliku zródlowego<br />
QuickTime do twojego dokumentu, jak<br />
w przypadku bitmap i dzwieków, Flash<br />
umieszcza tylko odnosnik lub sciezke dostepu.<br />
Dzieki temu dokumenty Flasha moga<br />
zachowywac niewielkie rozmiary. Trzeba<br />
jednak pamietac o zachowaniu jednakowej<br />
nazwy i umiejscowienia pliku zródlowego. Jesli<br />
przeniesiesz lub zmienisz nazwe oryginalnego<br />
pliku QuickTime, nowych i istniejacych jego<br />
klonów, w oknie dokumentu ujrzysz pusty<br />
prostokat. Oznacza to, ze program nie potrafi<br />
zlokalizowac pliku zródlowego (rys. 2.4).<br />
W celu<br />
ustawienia nowej sciezki dostepu<br />
dla zaimportowanego filmu QuickTime:<br />
1. Kliknij podwójnie ikone wideo lub okno<br />
podgladu w twojej bibliotece. Inaczej:<br />
zaznacz symbol wideo w bibliotece,<br />
a nastepnie z menu biblioteki Options<br />
wybierz Properties (rys. 2.5). Pojawi sie<br />
okno dialogowe Video Properties,<br />
wskazujac nazwe symbolu i pierwotna<br />
lokalizacje pliku QuickTime (rys. 2.6).<br />
2. Kliknij przycisk Set Path.<br />
3. Wskaz nowa lokalizacje lub zmieniona<br />
nazwe pliku QuickTime, zaznacz ja i kliknij<br />
Open. W oknie Video Properties, obok<br />
okreslenia Path, pojawi sie nowa sciezka<br />
dostepu.<br />
4. Kliknij OK. Teraz program zlokalizuje film<br />
QuickTime, a wybrane przez ciebie wideo<br />
pojawi sie w oknie wyboru.<br />
Wskazówka<br />
• Pole Name w oknie dialogowym Video<br />
Properties nie jest nazwa oryginalnego<br />
pliku QuickTime, lecz nazwa symbolu<br />
w bibliotece. Obydwie te nazwy moga byc<br />
rózne tak dlugo, jak dlugo jest poprawna<br />
sciezka dostepu do pliku QuickTime.<br />
Rys. 2.4. Pusty prostokat na scenie oznacza,<br />
ze Flash nie moze odnalezc oryginalnego<br />
filmu QuickTime, który zaimportowales.<br />
Trzeba zresetowac sciezke dostepu<br />
Rys. 2.5.<br />
W oknie<br />
Library wybierz<br />
Options/Proper<br />
ties w celu<br />
uzyskania<br />
informacji<br />
o zaznaczonym<br />
symbolu<br />
Rys. 2.6. Okno dialogowe Video Properties<br />
informuje o nazwie symbolu i lokalizacji<br />
oryginalnego pliku QuickTime<br />
48
Praca z wideo i grafika 3D<br />
Rys. 2.7. W oknie Library wybierz Options/Edit<br />
with, jesli chcesz posluzyc sie zewnetrzna<br />
aplikacja do edycji pliku QuickTime<br />
Napisy i obramowanie nalozone na film QuickTime<br />
Efekt dymu nalozony<br />
na film QuickTime<br />
Zaimportowany film<br />
QuickTime, umieszczony<br />
w dolnej warstwie<br />
Rys. 2.8. Dodaj grafike i animacje Flasha<br />
do zaimportowanego filmu QuickTime. Powyzszy<br />
przyklad ukazuje dwa animowane napisy, maske<br />
odkrywajaca obramowanie i efekt specjalny dymu<br />
ciagnacego sie za stopa skatera, stworzony za<br />
pomoca automatycznej animacji ksztaltu<br />
Flash pozwala na edycje pierwotnego pliku wideo<br />
QuickTime z wykorzystaniem odtwarzacza<br />
QuickTime Player lub innego edytora cyfrowego<br />
wideo. Zeby jednak móc posluzyc sie<br />
odtwarzaczem QuickTime Player do kopiowania,<br />
wklejania i ponownego zapisywania pliku,<br />
bedziesz musial zakupic – od firmy Apple –<br />
upgrade do wersji Pro tego programu.<br />
W celu dokonania edycji<br />
oryginalnego pliku wideo QuickTime:<br />
1. W oknie Library zaznacz symbol wideo,<br />
który chcialbys edytowac.<br />
2. Otwórz menu Options w oknie Library<br />
i wybierz Edit with QuickTime Player<br />
lub Edit with (rys. 2.7).<br />
Zostanie uruchomiona zewnetrzna aplikacja,<br />
w której oknie otworzy sie plik QuickTime.<br />
3. Dokonaj edycji pliku QuickTime i zapisz go.<br />
4. Powróc do Flasha, usun biezacy klon filmu<br />
QuickTime na scenie, a nastepnie<br />
przeciagnij nowy klon z biblioteki i obejrzyj<br />
zmiany dokonane na twoim wideo. Flash<br />
uzyje nowego pliku QuickTime, który<br />
wczesniej wyedytowales i zapisales.<br />
Kiedy juz zaimportujesz plik QuickTime do<br />
Flasha, mozesz wzbogacac go o dodatkowe,<br />
animowane elementy w rodzaju napisów czy<br />
efektów specjalnych.<br />
W celu nalozenia animacji Flasha<br />
na film QuickTime:<br />
1. Na potrzeby cwiczenia, ustaw rozmiar sceny<br />
zgodnie z rozmiarem zaimportowanego<br />
pliku QuickTime (320×240 pikseli) i umiesc<br />
okno filmu w taki sposób, zeby dokladnie<br />
pokrywal sie z obszarem sceny.<br />
2. Dodajac kolejne warstwy, utwórz<br />
animowane napisy, grafike lub efekty<br />
specjalne. rys. 2.8 pokazuje przyklad<br />
polaczenia kilku animowanych elementów<br />
z zaimportowanym plikiem QuickTime.<br />
Przejrzyj w tym miejscu pliki QuickTime<br />
oraz Flasha, znajdujace sie na dolaczonej<br />
do ksiazki plycie CD-ROM.<br />
Integracja Flasha i QuickTime<br />
49
Rozdzial 2.<br />
Integracja Flasha i QuickTime<br />
3. Po opublikowaniu filmu skomponowanego<br />
we Flashu w postaci pliku QuickTime (patrz<br />
– kolejne cwiczenia), zarówno grafiki<br />
Flasha, jak i film QuickTime beda<br />
odtwarzane jako jedna calosc.<br />
Poprzez dodanie przycisków z przypisanymi<br />
im prostymi funkcjami nawigacyjnymi, masz<br />
mozliwosc utworzenia interfejsu Flasha<br />
zdolnego do kontrolowania zawartosci pliku<br />
QuickTime.<br />
W celu utworzenia interfejsu interaktywnej<br />
kontroli:<br />
1. Utwórz cztery przyciski: odtwarzania,<br />
pauzy, przewijania do konca oraz<br />
przewijania do poczatku.<br />
2. Klony wszystkich utworzonych przycisków<br />
umiesc w nowej warstwie, znajdujacej sie<br />
nad warstwa z plikiem QuickTime (rys. 2.9).<br />
3. Kazdemu z czterech przycisków<br />
przyporzadkuj akcje poprzez zaznaczenie<br />
przycisku, a nastepnie otwarcie panelu<br />
Object Actions (rys. 2.10).<br />
υ Przyciskowi odtwarzania nadaj akcje<br />
play();<br />
υ Przyciskowi pauzy nadaj akcje stop();<br />
υ Przyciskowi przewijania do konca nadaj<br />
akcje gotoAndStop(221);<br />
υ Przyciskowi przewijania do poczatku nadaj<br />
akcje gotoAndStop(1);<br />
Wiecej informacji o panelu Object Actions<br />
znajdziesz w rozdziale 3.<br />
4. Po opublikowaniu twojego filmu Flasha jako<br />
pliku QuickTime (patrz – nastepne<br />
cwiczenie), zaprojektowane przez ciebie<br />
przyciski pozwola ci nawigowac po<br />
poszczególnych fragmentach filmu – i to bez<br />
polegania na standardowych kontrolkach<br />
odtwarzacza (rys. 2.11).<br />
Cztery klony przycisków umieszczone<br />
w warstwie nad filmem QuickTime<br />
Rys. 2.9. Dodaj klony przycisków, zeby<br />
uzytkownicy mogli sterowac twoim filmem<br />
QuickTime. Przyciski sa umieszczone<br />
w oddzielnej warstwie<br />
Kliknij i przytrzymaj, aby<br />
wybrac dowolna akcje<br />
Kliknij raz, aby rozwinac menu Basic<br />
Actions i wybrac odpowiednia akcje<br />
W tym oknie pojawia sie<br />
kod programowy akcji<br />
Rys. 2.10. Przyporzadkuj podstawowe akcje<br />
poleceniu on (release), uzywajac panelu<br />
Object Actions. Wybierz poszczególne akcje,<br />
klikajac ikone plusa lub z menu rozwijanego<br />
Basic Actions<br />
50
Praca z wideo i grafika 3D<br />
Rys. 2.11. Wyeksportowany plik QuickTime<br />
umozliwia ci porzucenie standardowego systemu<br />
kontroli odtwarzania na rzecz zaprojektowanych<br />
przez ciebie przycisków z przypisanymi<br />
im akcjami<br />
Rys. 2.12. Okno dialogowe Export QuickTime<br />
Jesli zamierzasz zintegrowac projekty Flasha<br />
z plikami QuickTime, musisz opublikowac lub<br />
wyeksportowac swój film w postaci filmu<br />
QuickTime. Chociaz mozliwe jest wyswietlanie<br />
filmów QuickTime w srodowisku Flasha,<br />
programowy odtwarzacz nie posiada funkcji<br />
odtwarzania plików QuickTime. Gdybys<br />
próbowal testowac film Flasha, zawierajacy<br />
zaimportowany plik QuickTime, za pomoca<br />
polecenia Control/Test Movie, zobaczysz tylko<br />
grafike Flasha, bez filmu QuickTime.<br />
W celu opublikowania filmu<br />
Flasha w postaci filmu QuickTime:<br />
1. Wybierz File/Export Movie. Pojawi sie<br />
okno dialogowe Export Movie.<br />
2. Okresl nazwe docelowego pliku, a nastepnie<br />
z menu rozwijanego wybierz QuickTime.<br />
Pojawi sie okno dialogowe Export<br />
QuickTime (rys. 2.12).<br />
Mozesz równiez – zamiast wykonywac<br />
dzialania z kroków 1. i 2. – wybrac File/<br />
Publish Settings. W zakladce Formats<br />
zaznacz opcje QuickTime (.mov), a usun<br />
zaznaczenie wszystkich pozostalych. Przejdz<br />
do zakladki QuickTime.<br />
3. W zakladce QuickTime ustaw nastepujace<br />
parametry:<br />
υ Dimensions: umozliwia okreslenie<br />
wysokosci i szerokosci okna (w pikselach).<br />
υ Alpha: kontroluje sposób wyswietlania<br />
elementów Flasha w filmie QuickTime.<br />
Wybierz Copy , aby uczynic scene we<br />
Flashu nieprzezroczysta. Wybierz Alphatransparent,<br />
aby uczynic scene we Flashu<br />
przezroczysta. Wybierz Auto, aby uczynic<br />
scene we Flashu przezroczysta lub<br />
nieprzezroczysta, w zaleznosci od<br />
kolejnosci rozlozenia grafik Flasha i pliku<br />
QuickTime.<br />
υ Layer: kontroluje polozenie sciezki Flasha<br />
w eksportowanym pliku QuickTime. Po<br />
wybraniu Auto uklad bedzie zgodny<br />
z ukladem warstw we Flashu.<br />
Integracja Flasha i QuickTime<br />
51
Rozdzial 2.<br />
Integracja Flasha i QuickTime<br />
υ Streaming Sound: umozliwia konwersje<br />
dowolnego dzwieku Flasha do formatu<br />
sciezki dzwiekowej QuickTime,<br />
z zastosowaniem parametrów kompresji<br />
QuickTime.<br />
υ Controller: wybierajac None, utworzysz<br />
plik QuickTime, pozbawiony<br />
standardowych dla tego formatu kontrolek<br />
odtwarzania. Opcji tej uzywa sie w<br />
przypadku zastosowania oddzielnych<br />
przycisków przygotowanych we Flashu<br />
(rys. 2.13).<br />
υ Playback: zaznacz te opcje, jesli chcesz<br />
kontrolowac sposób odtwarzania filmu.<br />
Unikaj jednak opcji Play every frame,<br />
poniewaz powoduje ona wylaczenie<br />
sciezki dzwiekowej pliku QuickTime.<br />
υ File: wybranie opcji Flatten powoduje<br />
utworzenie pojedynczego pliku<br />
zawierajacego odnosniki do wszystkich<br />
zewnetrznych mediów. Eliminuje to<br />
potrzebe zachowywania pierwotnie<br />
zaimportowanego pliku QuickTime razem<br />
z finalowym, wyeksportowanym plikiem.<br />
Opcja Flatten umozliwia ponadto<br />
utworzenie pliku zgodnego z platformami<br />
MacOS i Windows jednoczesnie.<br />
4. Kliknij OK lub Publish.<br />
Standardowe<br />
przyciski nawigacji<br />
QuickTime<br />
Przyciski nawigacji<br />
przygotowane<br />
we Flashu<br />
Rys. 2.13. Dwa filmy QuickTime,<br />
ze standardowymi kontrolkami odtwarzania<br />
(u dolu) oraz bez nich (u góry)<br />
Nie wszystkie funkcje Flasha dzialaja z filmami QuickTime<br />
Trzeba podkreslic, ze na dzien dzisiejszy<br />
jedynie funkcje Flasha – dostepne w trzeciej<br />
wersji programu – sa zgodne ze srodowiskiem<br />
QuickTime 4. Oznacza to, ze wszystkie<br />
bardziej skomplikowane funkcje interaktywne<br />
Flasha 5 nie zadzialaja poprawnie lub nawet<br />
nie zadzialaja w ogóle, po wyeksportowaniu<br />
projektu w formacie QuickTime.<br />
Co wiecej, niektóre funkcje Flasha – chociaz<br />
wystepowaly juz w wersji 3. lub wczesniejszej<br />
– moga zachowywac sie nieprzewidywalnie,<br />
jesli odtworzy sie je za pomoca QuickTime<br />
Playera. Oto kilka zauwazonych bledów:<br />
υ Akcja getURL przypisywana do ujec<br />
kluczowych nie daje zadnego efektu.<br />
υ Akcja loadMovieNum nie funkcjonuje.<br />
υ Kursor nie zawsze przyjmuje postac<br />
raczki podczas przesuwania go nad<br />
aktywnym obszarem przycisku.<br />
υ Maskowanie filmu QuickTime nie dziala.<br />
Jesli ostateczna postacia twojego dziela ma<br />
byc plik Qu ickTime, powinienes miec na<br />
uwadze powyzsze ograniczenia.<br />
52
Praca z wideo i grafika 3D<br />
Opcja eksportowania filmu (File/Export<br />
Movie) umozliwia wybranie jego koncowego<br />
formatu pomiedzy QuickTime i AVI. Mimo iz<br />
obydwa standardy sa formatami „filmowymi”,<br />
ostateczne rezultaty wybrania jednego lub<br />
drugiego sa rózne.<br />
Format QuickTime umozliwia zintegrowanie<br />
elementów przygotowanych we Flashu z<br />
filmem QuickTime – poprzez umieszczenie<br />
ich na oddzielnej sciezce. Elementy Flasha<br />
zachowuja swoja funkcjonalnosc oraz<br />
informacje wektorowa, sa wiec tym samym<br />
niezalezne od rozdzielczosci.<br />
Eksportowanie pliku w formacie AVI objawia<br />
sie rasteryzacja wszystkich elementów<br />
utworzonych we Flashu i przeksztalceniem ich<br />
w liniowy film, pozbawiony jakiejkolwiek<br />
interaktywnosci. W takim przypadku<br />
wszystkie przyciski staja sie jedynie prostymi<br />
elementami graficznymi w okreslonej<br />
rozdzielczosci (rys. 2.14). Uzyj tej opcji<br />
eksportowania, jesli chcesz stworzyc prosty<br />
film Flasha, niewymagajacy najnowszych<br />
wersji odtwarzacza QuickTime.<br />
QuickTime i AVI<br />
Rys. 2.14. Format QuickTime (u góry)<br />
umieszcza elementy Flasha na osobnej<br />
sciezce, zachowujac wektorowe informacje<br />
o zawartosci pliku. Format AVI (u dolu)<br />
laczy grafike Flasha z obrazem wideo,<br />
w wyniku czego informacje wektorowe<br />
zostaja utracone. Rekompresja oryginalnego<br />
zaimportowanego pliku QuickTime prowadzi<br />
jednoczesnie do pogorszenia jakosci obrazu<br />
Integracja Flasha i QuickTime<br />
53
Rotoskopia<br />
Rozdzial 2.<br />
Rotoskopia<br />
Rotoskopia jest tradycyjna technika<br />
animatorska, polegajaca na przetwarzaniu<br />
prawdziwego filmu w sekwencje animacji.<br />
Nazwa procesu pochodzi od nazwy urzadzenia,<br />
rotoskopu, który wyswietlal film na desce<br />
rysunkowej. Animator mógl wtedy latwo<br />
odrysowac kontury aktora, klatka po klatce,<br />
uzyskujac naturalny obraz ruchu, trudny do<br />
osiagniecia w przypadku rysowania z glowy.<br />
Mozesz posluzyc sie Flashem do importowania<br />
i wyswietlania filmów QuickTime, a nastepnie<br />
siegnac do techniki rotoskopii.<br />
W celu<br />
skopiowania sekwencji ruchu<br />
z filmu QuickTime:<br />
1. Zaimportuj plik QuickTime, a nastepnie<br />
rozszerz listwe czasowa, aby mogla<br />
pomiescic caly film (rys. 2.15).<br />
2. Dodaj nowa warstwe.<br />
3. Zacznij odrysowywac aktorów lub akcje<br />
w nowej warstwie i ujeciu kluczowym 1.,<br />
korzystajac z dowolnego narzedzia<br />
rysunkowego (rys. 2.16).<br />
4. Dodaj puste ujecie kluczowe, wybierajac<br />
Insert/Blank Keyframe. Puste ujecie<br />
kluczowe pojawi sie w klatce 2.<br />
5. Odrysuj aktorów lub akcje w utworzonym<br />
przed chwila pustym ujeciu kluczowym.<br />
Rys. 2.15. Najlepszy do odrysowywania film<br />
QuickTime jest pelen dramatycznej akcji,<br />
z wyraznie oddzielonym od tla pierwszym<br />
planem<br />
Zablokuj warstwe z filmem QuickTime, zeby<br />
zabezpieczyc ja przed przypadkowym przesunieciem<br />
Ten ogólny rysunek cwiczacej na trapezie<br />
akrobatki sporzadzono dzieki narzedziu<br />
Pencil Tool z parametrem Smooth<br />
Rys. 2.16. Przybliz widok obszaru, który<br />
chcialbys przerysowac i uzyj<br />
zaimportowanego pliku QuickTime<br />
jako szablonu<br />
54
Praca z wideo i grafika 3D<br />
Rys. 2.17. Przerysowanie tej akrobatki da<br />
w efekcie warstwe z ujeciami kluczowymi,<br />
zawierajacymi rysunki odzwierciedlajace<br />
sekwencje jej ruchów<br />
6. Kontynuuj proces dodawania pustych ujec<br />
kluczowych i odrysowywania, dopóki<br />
sekwencja nie bedzie kompletna (rys. 2.17).<br />
7. Usun warstwe zawierajaca film QuickTime,<br />
zeby obejrzec odrysowana animacje<br />
(rys. 2.18). W tym przykladzie uzyskujemy<br />
ostatecznie bardzo szkicowy obraz akcji,<br />
jednakze sam mozesz odwzorowac znacznie<br />
wiecej szczególów, w zaleznosci od<br />
pozadanego efektu koncowego.<br />
Wskazówka<br />
• Jesli chcesz miec bardziej przejrzysty<br />
podglad filmu QuickTime, który<br />
przerysowujesz, uzyj opcji Show Layers<br />
as Outlines w aktywnej warstwie,<br />
ewentualnie wykorzystaj pólprzezroczysty<br />
kolor do rysowania.<br />
Rotoskopia<br />
Rys. 2.18. Kiedy bedziesz odtwarzal<br />
przerysowana animacje, zwróc uwage na<br />
naturalnosc ruchów, nawet jesli sam rysunek<br />
jest malo dokladny<br />
55
Rozdzial 2.<br />
Rotoskopia<br />
Niekiedy film QuickTime, który chcialbys<br />
odrysowac, zawiera zbyt wiele klatek, co czyni<br />
proces przerysowywania nudnym, a sama<br />
animacje nawet zbyt plynna. Mozesz<br />
zredukowac ilosc klatek filmu QuickTime na<br />
listwie czasowej Flasha – poprzez ograniczenie<br />
liczby klatek odtwarzanych w ciagu sekundy.<br />
W celu<br />
zmniejszenia liczby dostepnych klatek:<br />
1. Wybierz Modify/Movie, ewentualnie kliknij<br />
podwójnie pole Frame Rate ponizej listwy<br />
czasowej (rys. 2.19).<br />
2. Pojawi sie okno dialogowe Movie<br />
Properties. W polu Frame Rate wpisz 6,<br />
a nastepnie kliknij OK (rys. 2.20).<br />
3. Teraz film QuickTime bedzie liczyl dwa<br />
razy mniej klatek niz poprzednio (rys. 2.21).<br />
Zamkniecie tej samej dlugosci filmu w<br />
mniejszej ilosci klatek odbije sie na jego<br />
plynnosci, ale jednoczesnie bedziesz mial<br />
mniej do rysowania.<br />
Wskaznik Frame Rate<br />
Rys. 2.19. Wskaznik Frame Rate pokazuje<br />
wartosc 12.0 fps (klatek na sekunde). Kliknij<br />
wskaznik dwukrotnie, a otworzy sie okno<br />
Movie Properties<br />
Rys. 2.20. Okno dialogowe Movie Properties<br />
z widoczna zmniejszona wartoscia<br />
wskaznika fps<br />
Rys. 2.21. Przy ustawieniu 12.0 fps (po lewej), sekwencja ruchu akrobatki<br />
konczy sie na klatce 78. Po ograniczeniu wartosci fps do 6.0 (po prawej),<br />
ten sam punkt koncowy animacji znajduje sie w klatce 39<br />
56
Praca z wideo i grafika 3D<br />
Rys. 2.22. Ustawienie parametru Frame Rate na<br />
wartosc 8.0 fps i wykorzystanie tylko 14 klatek<br />
ogranicza liczbe eksportowanych bitmap<br />
Symulowanie wideo<br />
Poniewaz Flash nie potrafi wyswietlac filmów<br />
QuickTime w swojej wewnetrznej przegladarce,<br />
dla symulowania efektu wideo konieczne jest<br />
skorzystanie z sekwencji obrazów<br />
bitmapowych, przy czym kazdy jest<br />
umieszczony w osobnym ujeciu kluczowym.<br />
W zasadzie chodzi o utworzenie animacji klatka<br />
po klatce z uzyciem bitmap. Chociaz proces taki<br />
jest pracochlonny i raczej niezbyt nowoczesny,<br />
to efekty moga zadziwic. Gdy pracujesz<br />
z sekwencjami bitmap od poczatku do konca<br />
we Flashu, twojej kreatywnosci nie hamuje<br />
ograniczona funkcjonalnosc przegladarki<br />
QuickTime Player. Masz pelny dostep do<br />
interaktywnych narzedzi Flasha. Mozesz<br />
maksymalnie wykorzystac narzedzia do<br />
rysowania i tworzenia animacji, które przydaja<br />
sie np. do przeksztalcania bitmap w ksztalty<br />
wektorowe (przez odrysowywanie). Wszystko<br />
to pomaga zachowac minimalny rozmiar pliku<br />
i skalowanie – niezalezne od rozdzielczosci<br />
obrazu.<br />
W celu<br />
przeksztalcenia filmu QuickTime<br />
w animowana sekwencje bitmap:<br />
1. Zaimportuj plik QuickTime.<br />
2. Zwróc uwage, ze importujesz dokladnie tyle<br />
obrazów, ile klatek liczy film, tak wiec<br />
postaraj sie nie przesadzic z rozmiarem<br />
animacji. Zmniejsz odpowiednio predkosc<br />
odtwarzania klatek (Frame Rate), dzieki<br />
czemu ograniczysz ogólna ilosc obrazów<br />
i jednoczesnie ulatwisz sobie zarzadzanie<br />
nimi (rys. 2.22).<br />
3. Ustaw rozmiar sceny w taki sposób, aby<br />
odpowiadal wielkosci okna<br />
zaimportowanego filmu QuickTime.<br />
4. Wybierz File/Export Movie. Pojawi sie<br />
okno dialogowe Export Movie, pozwalajace<br />
wybrac format pliku i folder docelowy.<br />
Symulowanie wideo<br />
57
Rozdzial 2.<br />
5. Utwórz nowy folder, klikajac ikone Utwórz<br />
nowy folder, wpisz nazwe dla<br />
eksportowanych plików z obrazami,<br />
a nastepnie z menu rozwijanego Zapisz jako<br />
typ wybierz Bitmap Sequence (rys. 2.23).<br />
Na koniec kliknij Zapisz. Flash<br />
wyeksportuje serie obrazów bitmapowych,<br />
dodajac jednoczesnie do nazw plików<br />
rozszerzenie w postaci numerka. To<br />
umozliwia pogrupowanie obrazów ze soba.<br />
Symulowanie wideo<br />
Rys. 2.23. Okno dialogowe Export Movie.<br />
Menu rozwijane Zapisz jako typ pozwala<br />
wybrac docelowy format pliku<br />
58
Praca z wideo i grafika 3D<br />
Rys. 2.24. Okno dialogowe z zapytaniem o import<br />
calej sekwencji. Kliknij Yes<br />
Kazde ujecie kluczowe<br />
zawiera jedna bitmape<br />
Czternascie pojedynczych<br />
bitmap jest zapisywanych<br />
w bibliotece<br />
6. Otwórz nowy plik Flasha i zaimportuj<br />
pierwszy z utworzonych przed momentem<br />
obrazów. Program rozpozna, ze ten pierwszy<br />
obrazek jest czescia sekwencji (rys. 2.24),<br />
a nastepnie zapyta, czy chcesz dokonac<br />
importu calej sekwencji. Kliknij Yes. Kazda<br />
z bit map zostanie umieszczona w nowym<br />
ujeciu kluczowym i zgrupowana<br />
z pozostalymi w aktywnej warstwie<br />
(rys. 2.25).<br />
Wskazówka<br />
• Jesli chcialbys wykorzystac pliki filmowe<br />
w innych formatach (AVI lub MPEG),<br />
musisz posluzyc sie zewnetrzna aplikacja<br />
do wygenerowania sekwencji bitmap,<br />
ewentualnie aplikacja, która dokona<br />
konwersji tych plików do formatu<br />
QuickTime.<br />
Rys. 2.25. Po tym, jak juz zaimportujesz serie<br />
bitmap, kazdy obraz jest umieszczany<br />
w oddzielnym ujeciu kluczowym i automatycznie<br />
zapisywany w bibliotece<br />
Symulowanie wideo<br />
59
Rozdzial 2.<br />
Kiedy do symulowania wideo uzywa sie<br />
sekwencji bitmap, rozmiar pliku znaczaco<br />
wzrasta, osiagajac czasem wielkosc, która jest<br />
nie do przyjecia. Jednym ze sposobów<br />
poradzenie sobie z tym problemem jest<br />
konwersja bitmap na rysunki wektorowe za<br />
pomoca polecenia Trace Bitmap. Dodatkowo<br />
uzycie tej techniki moze wzbogacic nasza prace<br />
o ciekawe efekty wizualne. Przykladowo,<br />
zmniejszajac liczbe kolorów, osiagniesz efekt<br />
posteryzacji, a usuwajac – po dokonaniu<br />
konwersji – elementy tla, uzyskasz podnoszacy<br />
dramaturgie efekt sylwetkowy.<br />
Rys. 2.26. Okno dialogowe Trace Bitmap<br />
Symulowanie wideo<br />
W celu dokonania konwersji bitmap<br />
w uproszczone rysunki wektorowe:<br />
1. Zaznacz pierwsze na scenie ujecie kluczowe<br />
lub bitmape.<br />
2. Wybierz Modify/Trace Bitmap. Otworzy<br />
sie okno dialogowe Trace Bitmap<br />
(rys. 2.26). Parametry okna decyduja<br />
o dokladnosci konwersji obrazu<br />
bitmapowego.<br />
υ Color Threshold (wartosc z przedzialu 1<br />
do 200): kontroluje poziom tolerancji<br />
w czasie ustalania, czy sasiadujace piksele<br />
sa w jednakowym, czy róznym kolorze.<br />
Flash porównuje wartosci RGB dwóch<br />
sasiadujacych obszarów i jesli róznica jest<br />
mniejsza niz wartosc parametru, to<br />
program przyjmuje, ze maja jednakowa<br />
barwe. Oznacza to, ze im mniejsza wartosc<br />
parametru Color Threshold, tym wiecej<br />
kolorów zostanie prawidlowo<br />
zreprodukowanych.<br />
υ Minimum Area (wartosc z przedzialu 1<br />
do 1000): kontroluje wielkosc obszaru,<br />
dla którego Flash dokona przeliczenia<br />
kolorów.<br />
υ Curve Fit: kontroluje gladkosc konturów<br />
wokól ksztaltów.<br />
υ Corner Threshold: decyduje o tym, czy<br />
rogi beda gladkie, czy kanciaste.<br />
60
Praca z wideo i grafika 3D<br />
Rys. 2.27. Taki efekt jest rezultatem ustawienia<br />
parametrów Color Threshold na 150 oraz<br />
Minimum Area na 50<br />
Zaokraglony prostokat maskuje przeksztalcone bitmapy<br />
3. Po przekonwertowaniu pierwszego obrazu,<br />
zaznacz bitmape w kolejnym ujeciu<br />
kluczowym i uzyj polecenia Modify/Trace<br />
Bitmap. Powtarzaj te czynnosc do<br />
momentu, kiedy cala sekwencja obrazów<br />
zostanie przeksztalcona (rys. 2.27).<br />
4. Jesli trzeba, dodawaj, usuwaj lub zmieniaj<br />
ksztalt i kolory w poszczególnych ujeciach<br />
kluczowych, korzystajac przy tym z narzedzi<br />
zaznaczenia i rysowania, dostepnych<br />
w przyborniku (rys. 2.28).<br />
Zajrzyj na plyte CD dolaczona do ksiazki –<br />
znajdziesz tam gotowy plik do powyzszego<br />
cwiczenia, z przykladowa modyfikacja tego<br />
krótkiego wideo.<br />
Wskazówki<br />
• Polecenie Trace Bitmap z menu Modify nie<br />
posiada domyslnego skrótu klawiaturowego,<br />
ale mozesz stworzyc wlasny, wybierajac<br />
Edit/Keyboard Shortcuts. Uzywajac skrótu<br />
klawiaturowego dla tego polecenia oraz<br />
klawisza >, znacznie ulatwis z sobie proces<br />
konwersji dlugiej sekwencji bitmap.<br />
• Uwazaj, zeby nie ustalic zbyt niskiej<br />
wartosci parametru Color Threshold.<br />
Bitmapa zawierajaca niepotrzebnie duzo<br />
ksztaltów nie bedzie plynnie animowana,<br />
a dodatkowo wielkosc pliku zwiekszy sie,<br />
czesto przekraczajac nawet rozmiar samej<br />
bitmapy.<br />
Symulowanie wideo<br />
Animowane, przypadkowe<br />
linie symuluja rysy<br />
na tasmie filmowej<br />
Tlo w przeksztalconych<br />
bitmapach zostalo<br />
usuniete<br />
Rys. 2.28. Usuniecie tla z kazdej<br />
przekonwertowanej bitmapy umozliwia<br />
eksperymentowanie z bardziej dynamicznym,<br />
animowanym drugim planem. W powyzszym<br />
przykladzie zamaskowano serie przeksztalconych<br />
obrazów i dodano dzwiek, a takze inne<br />
animowane elementy<br />
61
Rozdzial 2.<br />
Symulowanie wideo<br />
Sekwencje przeksztalconych bitmap, mimo<br />
iz maja postac ksztaltów wektorowych, ciagle<br />
potrafia zajmowac duzo miejsca, dlatego nalezy<br />
zastanowic sie nad tym, jak je maksymalnie<br />
wyzyskac.<br />
Skopiuj ujecia kluczowe zawierajace<br />
przekonwertowana do postaci wektorowej<br />
animacje i wklej je do symbolu graficznego<br />
lub symbolu klipu filmowego. Umozliwia to<br />
traktowanie ich jako pojedynczych klonów,<br />
a co za tym idzie – latwiej nimi manipulowac.<br />
Ponizej wymieniono kilka sposobów na to,<br />
by jeden symbol przekonwertowanej animacji<br />
przypominal kilka róznych klipów (rys. 2.29).<br />
Sposoby wykorzystania zwektoryzowanej<br />
animacji:<br />
1. Staraj sie, aby twoje symulowane sekwencje<br />
wideo byly krótkie i mialy niewielkie<br />
rozmiary. Zwykle potrzeba jedynie kilku<br />
klatek (mniej niz dziesiec) do zasugerowania<br />
okreslonego ruchu, kiedy skupiasz uwage na<br />
najbardziej dramatycznej akcji<br />
wykonywanej przez glówna postac.<br />
lub<br />
Modyfikuj klony, zmieniajac parametry<br />
jasnosci odcienia czy przezroczystosci.<br />
Powtórzenia grafik w róznych wariacjach<br />
kolorystycznych przywodza na mysl<br />
techniki malarskie Warhola, jednoczesnie<br />
pozwalajac zaoszczedzic na wielkosci pliku.<br />
lub<br />
Przeksztalcaj klony, odbijajac je w pionie<br />
lub poziomie, obracajac i skalujac.<br />
Powiekszona animacja, przypominajaca<br />
lustrzane odbicie, moze posluzyc za<br />
kontrastujace tlo.<br />
lub<br />
Twórz animacje ruchu klonów. Dodaj scenie<br />
wyrazu, wprawiajac w ruch cos, co juz sie<br />
porusza. Na przyklad, animowanie klonów<br />
sekwencji przedstawiajacej akrobate<br />
skaczacego do wody moze dac w efekcie<br />
kilka odmian takiego skoku.<br />
Pierwszy klon symbolu<br />
zwektoryzowanego klipu wideo<br />
Drugi klon tego samego symbolu, odbity,<br />
powiekszony i rozpoczynajacy sie w innym ujeciu<br />
Rys. 2.29. Zwektoryzowany pojedynczy klip<br />
wideo, przedstawiajacy krecacego plytami<br />
didzeja, zreprodukowano na scenie<br />
dwukrotnie. Klon w tle odbito w poziomie,<br />
powiekszono i uczyniono przezroczystym.<br />
Klon na pierwszym planie przesuwa sie<br />
wzdluz sceny, a w pewnym momencie zostaje<br />
zapetlony. Okregi sa dodatkowymi<br />
animowanymi elementami<br />
lub<br />
Niektóre klony moga pozostawac<br />
statyczne w kilku klatkach, podczas gdy<br />
z innych mozna przygotowac zapetlone<br />
animacje, zaczynajace sie w róznych<br />
klatkach. W panelu Instance masz do<br />
wyboru trzy opcje (Loop, Play Once<br />
i Single Frame) – przyporzadkuj kazda<br />
z nich innemu klonowi na scenie, dzieki<br />
czemu unikniesz zsynchronizowania ich<br />
ze soba.<br />
62
Praca z wideo i grafika 3D<br />
Rys. 2.30. Seria obrazów wektorowych<br />
zaimportowanych do Flasha. Trójwymiarowy<br />
model wyrenderowany jako obraz wektorowy<br />
w Swift 3D (po lewej) oraz animacja<br />
wyrenderowana jako seria obrazów wektorowych<br />
w programie Vecta 3D (po prawej)<br />
Symulowanie grafiki 3D<br />
Podobnie jak w przypadku odtwarzania wideo,<br />
grafika 3D we Flashu tylko „udaje” prawdziwa<br />
przestrzen, jako ze w programie nie<br />
zaimplementowano wsparcia dla korzystania<br />
z trójwymiarowych modeli. Jednak z pomoca<br />
innych aplikacji, a takze przy odrobinie<br />
cierpliwosci i pomyslowosci, mozna<br />
przygotowac wektorowe wersje mo deli 3D<br />
i stworzyc iluzje ruchu w przestrzeni.<br />
Przydatne programy<br />
Istnieja dwa rodzaje aplikacji pozwalajace tworzyc<br />
trójwymiarowe obrazy dla Flasha. Pierwsza grupe<br />
reprezentuja programy w rodzaju Illustrate!<br />
Davida Goulda czy Vecta3D firmy IdeaWorks3D.<br />
Obydwa sa pluginami do programu 3D Studio<br />
Max, standardu w dziedzinie aplikacji do<br />
modelowania 3D, renderingu i animacji. Zarówno<br />
Illustrate!, jak i Vecta3D eksportuja utworzone<br />
w 3D Studio Max obrazy w postaci wektorowej,<br />
zrozumialej dla Flasha. Przygotowane w ten<br />
sposób obrazy przypominaja troche historyjki<br />
obrazkowe rysowane na tradycyjnym papierze.<br />
Drugi rodzaj programów, jak Swift 3D firmy<br />
Electric Rain Inc. lub Dimensions firmy Adobe<br />
Systems Inc., to samodzielne aplikacje, ze<br />
specjalnymi narzedziami do generowania modeli<br />
3D i animacji. Swift 3D umozliwia import<br />
modeli oraz tworzenie ich za pomoca obiektów<br />
podstawowych i wyciagania tekstu. Adobe<br />
Dimensions nie pozwala importowac gotowych<br />
modeli, ale za to ma wlasne narzedzia do<br />
wyciagania tekstu, obracania obiektów<br />
i mapowania obrazów na obiektach. Ponadto<br />
równiez Vecta 3D jest dostepna w formie<br />
samodzielnego programu, z funkcjami<br />
importowania modeli 3D i wyciagania tekstu.<br />
Obydwa rodzaje aplikacji generuja pojedyncze<br />
obrazy wektorowe lub serie takich obrazów, które<br />
mozna potem latwo przeniesc do Flasha i umiescic<br />
w oddzielnych ujeciach kluczowych (rys. 2.30).<br />
W zasadzie wiec caly proces nie rózni sie zbytnio<br />
od importowania sekwencji bitmap symulujacych<br />
wideo, z ta róznica, ze konwersji do postaci<br />
wektorowej dokonano wczesniej.<br />
Symulowanie grafiki 3D<br />
63
Rozdzial 2.<br />
Symulowanie grafiki 3D<br />
W celu<br />
wykonania animowanego napisu 3D<br />
z wykorzystaniem Flasha<br />
i zewnetrznej aplikacji:<br />
1. Za pomoca odpowiedniego programu 3D<br />
utwórz wyciagniety tekst i wyeksportuj<br />
w postaci pliku wektorowego<br />
akceptowanego przez Flasha (rys. 2.31).<br />
2. Przekonwertuj kazda z liter w symbol<br />
graficzny, a nastepnie wykonaj animacje<br />
ruchu kazdego z klonów, aby zakonczyc<br />
proces.<br />
Jesli nie potrzeba ci zlozonych modeli 3D,<br />
a jedynie prostego obiektu, sprawiajacego<br />
wrazenie przemieszczania sie w przestrzeni,<br />
skorzystaj z dostepnych we Flashu narzedzi<br />
do animacji (klatka po klatce, automatyczna<br />
animacja ruchu i ksztaltu) do uzyskania<br />
pozadanego efektu. Ostatecznie otrzymasz<br />
znacznie mniejszy plik i szybszy czas<br />
przenoszenia pliku.<br />
Upraszczajac ruch obiektu, mozesz rozlozyc<br />
jego przestrzennosc na plaskie, pojedyncze<br />
powierzchnie, które potem mozna animowac.<br />
Przykladowo, prosty, obracajacy sie szescian<br />
sklada sie z prostokatów cyklicznie<br />
zmieniajacych swój ksztalt. Proces<br />
odwzorowania tej sekwencji zamyka sie<br />
w zdefiniowaniu ujec kluczowych.<br />
W celu utworzenia obiektu obracajacego sie<br />
w przestrzeni:<br />
1. Przygotuj w ujeciu kluczowym 10. szescian<br />
w postaci dwu zlaczonych, wypelnionych<br />
prostokatów, z widoczna na srodku<br />
krawedzia (rys. 2.32).<br />
W zachowaniu perspektywy pomoze ci<br />
„szablon” z szescianu przygotowanego<br />
w programie 3D i zaimportowanego<br />
do Flasha.<br />
Obraz wektorowy<br />
dociera<br />
do Flasha<br />
w postaci grup<br />
Kazda z grup jest<br />
konwertowana do<br />
postaci symbolu<br />
i umieszczana<br />
w oddzielnej<br />
warstwie, dajac<br />
mozliwosc<br />
animowania kazdej<br />
z liter<br />
Siatka<br />
modelu<br />
w Adobe<br />
Dimensions<br />
Rys. 2.31. Adobe Dimensions generuje<br />
wyciagniety tekst (u góry). Flash importuje<br />
pocieniowany obraz w postaci grup<br />
(w srodku), które mozna animowac<br />
w srodowisku programu (u dolu)<br />
Rys. 2.32. Szescian jest tu przedstawiony<br />
w postaci dwóch polaczonych prostokatów<br />
64
Praca z wideo i grafika 3D<br />
Szescian bedzie sie obracal lewoskretnie, wiec<br />
powierzchnia najpierw jest widoczna jako duza<br />
(ujecie kluczowe 1.), by potem przyjac postac<br />
niewielkiego wycinka (ujecie kluczowe 20.)<br />
Rys. 2.33. Ustaw jedna pozycje obracajacego sie<br />
szescianu w ujeciu kluczowym 1<br />
Ta powierzchnia zaczyna byc widoczna<br />
w ujeciu kluczowym 1. jako maly wycinek<br />
2. Utwórz ujecie kluczowe w klatce 1.,<br />
z prostokatami ukazujacymi wieksza<br />
powierzchnie lewej scianki (rys. 2.33).<br />
3. Utwórz ujecie kluczowe w klatce 20,<br />
z prostokatami ukazujacymi wieksza<br />
powierzchnie prawej scianki (rys. 2.34).<br />
4. Wykonaj animacje ksztaltu dla wszystkich<br />
trzech ujec kluczowych (rys. 2.35).<br />
Wypelnione prostokaty zmieniaja ksztalt,<br />
dajac wrazenie szescianu obracajacego sie<br />
w przestrzeni.<br />
Powyzsza technika ma zastosowanie takze przy<br />
bardziej zlozonych rotacjach, o ile potrafisz<br />
okreslic, jak poszczególne powierzchnie sie<br />
poruszaja i zmieniaja ksztalt. W przypadku<br />
pochylonego szescianu, kiedy to widoczne sa<br />
trzy powierzchnie w miejsce dwóch, trzeba<br />
umiescic te trzy powierzchnie w oddzielnych<br />
warstwach i przygotowac trzy animacje ksztaltu<br />
(rys. 2.36).<br />
Symulowanie grafiki 3D<br />
Rys. 2.34. Ustaw kolejna pozycje obracajacego<br />
sie szescianu w ujeciu kluczowym 20<br />
Górna<br />
powierzchnia<br />
Boczna<br />
powierzchnia<br />
Frontowa<br />
powierzchnia<br />
Rys. 2.35. Automatyczna animacja ksztaltu<br />
pozwala uzyskac plynne przejscia pomiedzy<br />
ksztaltami prostokatów<br />
Rys. 2.36. Powierzchnie szescianu – boczna,<br />
frontowa i górna – umieszczono w osobnych<br />
warstwach dla efektywniejszego animowania ich<br />
ksztaltu. Ujecie kluczowe na koncu umozliwia<br />
znikniecie ksztaltowi z „górnej” warstwy<br />
65
Rozdzial 2.<br />
66
Czesc 2.<br />
Zrozumiec ActionScript<br />
67
Rozdzial 3.<br />
68
Poslugiwanie sie<br />
jezykiem ActionScript<br />
3<br />
Czesci skladowe jezyka HTML<br />
ActionScript jest nazwa wewnetrznego jezyka skryptowego Flasha, uzywanego do projektowania<br />
skryptów przypisywanych pózniej do klipów filmowych, przycisków i ujec kluczowych. Jezyk ten<br />
mozna wykorzystac do tworzenia zlozonych narzedzi do nawigacji w projektach filmowych<br />
Flasha, przycisków reagujacych na wskaznik myszy, a nawet do tworzenia gier zrecznosciowych<br />
czy efektownych witryn reklamowych o dynamicznie aktualizowanej zawartosci. W tym rozdziale<br />
nauczysz sie poslugiwac jezykiem ActionScript do tworzenia interaktywnych funkcji na potrzeby<br />
twoich projektów. Przypomina to troche nauke gramatyki jezyka obcego: najpierw poznajesz<br />
zasady laczenia rzeczowników z czasownikami oraz dodawania przymiotników i przyimków;<br />
potem rozszerzasz swoje umiejetnosci komunikacji i poslugiwania sie mowa, przyswajajac kolejne<br />
zasób leksykalny. Rozdzial niniejszy pomoze ci opanowac podstawy ActionScript i wyposazy<br />
w znajomosc slownictwa opisujacego akcje Flasha.<br />
Jesli poslugiwales sie juz jezykiem JavaScript, to z pewnoscia zauwazysz pewne podobienstwa<br />
pomiedzy tymi dwoma jezykami. W zasadzie ActionScript bazuje na jezyku JavaScript, który jest<br />
popularnym, zorientowanym obiektowo jezykiem programowania, uzywanym do projektowania<br />
interaktywnych witryn internetowych. Jednak skrypty JavaScript z zalozenia kontroluja prace<br />
przegladarek, natomiast ActionScript wplywa na zachowanie poszczególnych elementów filmu<br />
Flasha, przez co istnieje kilka róznic pomiedzy tymi jezykami. Jednak podstawowa skladnia,<br />
sposób zarzadzania obiektami i funkcjami w obu przypadkach pozostaja jednakowe.<br />
Nawet jesli nigdy jeszcze nie zetknales sie z jezykiem JavaScript, sledzac ten rozdzial, przekonasz<br />
sie, ze programowanie we Flashu jest latwe. Zapoznasz sie z logika obiektów, a takze dowiesz sie,<br />
jak paleta akcji pomaga zautomatyzowac proces programowania, dajac ci wieksza elastycznosc<br />
w tworzeniu coraz bardziej zaawansowanych skryptów.<br />
Poslugiwanie sie jezykiem ActionScript<br />
69
Obiekty i klasy<br />
Rozdzial 3.<br />
Obiekty i klasy<br />
Sercem jezyka ActionScript sa obiekty oraz<br />
klasy. Obiektami moga byc dowolne typy<br />
danych, np. dzwiek, klip filmowy, lancuch<br />
znaków lub wartosci liczbowe, które tworzysz<br />
we Flashu i wykorzystujesz do kontrolowania<br />
filmu. Dla przykladu, obiekt daty jest uzywany<br />
do podawania informacji o czasie i dacie,<br />
a obiekt tablicowy sluzy do manipulowania<br />
danymi zgromadzonymi w okreslonym<br />
porzadku. Wszystkie tworzone przez ciebie<br />
obiekty naleza do wiekszej grupy zbiorczej,<br />
zwanej klasa. We Flashu zaimplementowano<br />
szereg klas mozliwych do wykorzystania<br />
w twoich filmach. Owe predefiniowane klasy<br />
takze okreslane sa mianem obiektów, jednak<br />
maja nazwy pisane wielka litera. Na przyklad<br />
obiekt Kolor jest klasa, na podstawie której<br />
tworzy sie róznokolorowe obiekty. Nauka<br />
programowania w ActionScript sprowadza sie<br />
do zrozumienia dzialania poszczególnych<br />
obiektów oraz ich klas, a nastepnie<br />
wykorzystania ich do wzajemnej interakcji<br />
oraz interakcji z uzytkownikiem.<br />
W realnym swiecie znane nam sa takie obiekty,<br />
jak krowa, drzewo czy osoba (rys. 3.1). Obiekty<br />
we Flashu moga przyjmowac rózne postaci – od<br />
widzialnych przedmiotów, w rodzaju wirujacej<br />
kuli, do bardziej abstrakcyjnych koncepcji, np.<br />
daty, fragmentów danych lub odczytywania<br />
informacji wprowadzanych z klawiatury.<br />
Niezaleznie jednak od ich materialnosci czy<br />
abstrakcyjnosci, obiekty Flasha sa<br />
wszechstronne, poniewaz kiedy juz raz je<br />
utworzysz, mozna uzywac ich w róznych<br />
kontekstach. Zanim jednak bedziesz mógl uzyc<br />
obiektów, musisz nauczyc sie je identyfikowac,<br />
a robi sie to, po prostu nazywajac je – jak<br />
w realnym swiecie. Zalózmy wiec, ze masz<br />
przed soba troje ludzi: Adama, Betty i Zeke’a.<br />
Wszyscy oni stanowia obiekty, które odrózniaja<br />
imiona. Wszyscy tez naleza do jednej wiekszej<br />
grupy znanej jako ludzie. Mozna powiedziec,<br />
ze Adam, Betty i Zeke sa klonami klasy ludzi<br />
(rys. 3.2). W jezyku ActionScript, klony oraz<br />
obiekty sa synonimami i nazwy te sa uzywane<br />
w tej ksiazce zamiennie.<br />
Rys. 3.1. Obiektami w realnym swiecie moga<br />
byc np. krowa, drzewo czy osoba<br />
Klasa ludzi<br />
Adam Betty Zeke<br />
Rys. 3.2. Adam, Betty i Zeke to trzy obiekty<br />
klasy ludzi. Oczywiscie we Flashu nie ma<br />
takiej klasy (co nie znaczy, ze nie mozna jej<br />
stworzyc), jednak ta analogia pozwala pojac<br />
znaczenie obiektów<br />
70
Poslugiwanie sie jezykiem ActionScript<br />
Adam<br />
Wzrost = 69<br />
Waga = 140<br />
Plec = M<br />
Kolor wlosów<br />
= czarne<br />
Rys. 3.3. Adam, Betty i Zeke sa obiektami<br />
ludzkimi z róznymi wlasciwosciami. Wlasciwosci<br />
odrózniaja obiekty tej samej klasy<br />
Wskazówka<br />
Betty<br />
Wzrost = 68<br />
Waga = 135<br />
Plec = K<br />
Kolor wlosów<br />
= czarne<br />
Klasa ludzi<br />
Wzrost<br />
Waga<br />
Plec<br />
Kolor wlosów<br />
Zeke<br />
Wzrost = 66<br />
Waga = 188<br />
Plec = M<br />
Kolor wlosów =<br />
brazowe<br />
Wlasciwosci<br />
• Pomysl o obiektach jak o rzeczownikach,<br />
o wlasciwosciach jak o przymiotnikach<br />
i o metodach jak o czasownikach – to<br />
ulatwia sprawe. Wlasciwosci opisuja<br />
obiekty, podczas gdy metody to akcje,<br />
które obiekty wykonuja.<br />
Metody i wlasciwosci<br />
Kazdy obiekt w danej klasie (np. Zeke z klasy<br />
ludzie) wyróznia sposród innych obiektów w tej<br />
klasie nie tylko jego nazwa. Kazdy czlowiek jest<br />
inny pod wzgledem wielu cech, które czynia go<br />
niepowtarzalnym, np. wzrostu, wagi, plci czy<br />
koloru wlosów. W obiektowo zorientowanych<br />
jezykach programowania mówimy, ze obiekty<br />
i klasy maja wlasciwosci. Wzrost, waga plec<br />
i kolor wlosów, sa wlasciwosciami klasy ludzi<br />
(rys. 3.3). We Flashu, kazda z predefiniowanych<br />
klas posiada swój zestaw wlasciwosci<br />
pozwalajacych zindywidualizowac<br />
poszczególne obiekty. I tak klasa String ma<br />
tylko jedna wlasciwosc, nazywana lenght,<br />
która okresla ilosc znaków zawartych w danym<br />
obiekcie, czyli lancuchu znaków. Klasa<br />
MovieClip (klip filmowy) natomiast ma wiele<br />
wlasciwosci, np. _height (wysokosc), _width<br />
(szerokosc) i _rotation (kat obrotu), które<br />
wskazuja na wymiary i orientacje konkretnego<br />
obiektu-klipu filmowego. Definiujac i<br />
zmieniajac wlasciwosci obiektów, kontrolujesz<br />
ich postac .<br />
Ponadto ludzie moga wykonywac rózne<br />
czynnosci. Zeke moze biegac, spac lub<br />
rozmawiac. W zargonie obiektowym mówimy,<br />
ze obiekt posiada metody, które na niego<br />
wplywaja . Kazda z predefiniowanych klas ma<br />
swój wlasny zestaw metod. Przykladowo, klasa<br />
Sound (dzwiek) posiada metode setVolume,<br />
pozwalajaca ustalic poziom dzwieku, a klasa<br />
Date (data) metode getDay, która zwraca dzien<br />
tygodnia. Kiedy uzywamy metody obiektu,<br />
mówimy, ze ta metoda zostala wywolana,<br />
ewentualnie obiekt wywoluje metode.<br />
Zrozumienie zwiazków pomiedzy obiektami,<br />
klasami, wlasciwosciami i metodami jest wazne.<br />
Definiowanie obiektów, tak aby metody<br />
i wlasciwosci jednego oddzialywaly na metody<br />
i wlasciwosci drugiego, jest sposobem, w jaki<br />
we Flashu tworzymy interaktywne elementy .<br />
Kluczem do rozwijania zasobu slownictwa<br />
jezyka ActionScript jest poznanie wlasciwosci<br />
i metod poszczególnych klas.<br />
Metody i wlasciwosci<br />
71
Rozdzial 3.<br />
Pisanie wedlug regul skladni<br />
Pisanie wedlug regul skladni<br />
Podobnie jak w przypadku kazdego innego<br />
jezyka obcego, jesli chcesz ukladac slowa<br />
w zdania, musisz poznac reguly gramatyki.<br />
W jezyku ActionScript tez istnieja okreslone<br />
konwencje, pozwalajace ukladac obiekty,<br />
wlasciwosci i metody w wyrazenia, a te z kolei<br />
w funkcje i skrypty. Poszczególne obiekty,<br />
wlasciwosci i metody laczy sie za pomoca<br />
kropek, opisujac w ten sposób konkretny obiekt<br />
lub proces. Oto przyklad:<br />
Zeke.weight = 188;<br />
Betty.weight = 135;<br />
Pierwsze wyrazenie przyporzadkowuje wartosc<br />
188 wadze (weight) Zeke’a. Drugie wyrazenie<br />
przyporzadkowuje wartosc 135 wadze Betty.<br />
Kropka oddziela nazwe obiektu od wlasciwosci<br />
(weight) (rys. 3.4).<br />
Betty.shirt.color = gray;<br />
To wyrazenie wskazuje, ze obiekt Betty jest<br />
polaczony z obiektem shirt (koszula). Z kolei<br />
obiekt shirt posiada wlasciwosc color (barwa),<br />
której przyporzadkowano wartosc gray (szary).<br />
Zwróc uwage, ze w skladni ActionScript uzywa<br />
sie wielu kropek do ustalania hierarchii<br />
obiektów. Kiedy mamy do czynienia z kilkoma<br />
obiektami polaczonymi w taki sposób, zwykle<br />
latwiej jest czytac wyrazenie od tylu. Mozna<br />
wiec zinterpretowac to tak: „Szary jest kolorem<br />
bluzki Betty”.<br />
Zeke.run ();<br />
To wyrazenie oznacza, ze obiekt Zeke<br />
wywoluje metode run. Nawiasy stojace za<br />
slowem run wskazuja, ze jest to metoda, a nie<br />
wlasciwosc. Mozesz nazywac taka konstrukcje<br />
nastepujaco: rzeczownik-kropka-czasownik<br />
(rys. 3.5). Metody czesto beda posiadaly<br />
argumenty, podawane w nawiasach<br />
i decydujace o sposobie wykonania metody.<br />
Na przyklad:<br />
Zeke.run (fast);<br />
Adam.run (slow);<br />
Waga Betty = 135 Waga Zeke = 188<br />
Rys. 3.4. Hipotetyczna wlasciwosc weight<br />
opisuje Betty i Zeke’a. We Flashu,<br />
wlasciwosci obiektów moga byc ustalane<br />
i modyfikowane za pomoca jezyka<br />
ActionScript<br />
Adam.run ()<br />
Mouse.hide ()<br />
Rys. 3.5. Zastosowanie kropki powoduje,<br />
ze obiekty wywoluja metody. Tak jak<br />
hipotetyczna metoda run moglaby sprawic,<br />
ze obiekt Adam zacznie biegac, tak<br />
prawdziwa metoda Flasha hide(),<br />
zastosowana do obiektu Mouse, powoduje,<br />
ze wskaznik myszy staje sie niewidoczny<br />
72
Poslugiwanie sie jezykiem ActionScript<br />
W obu wyrazeniach obiekty Zeke i Adam<br />
wywoluja metode run (bieg), jednak w kazdym<br />
przypadku metoda posiada inny argument, co<br />
oznacza, ze czynnosc biegania bedzie wygladac<br />
w rózny sposób: Zeke bedzie biegl szybko,<br />
podczas gdy Adam – powoli.<br />
Kazda metoda bedzie korzystac z wlasnego<br />
zestawu argumentów. Rozwaz na przyklad<br />
podstawowa akcje Flasha<br />
gotoAndPlay("Scene 1",20)<br />
(gotoAndPlay jest metoda nalezaca do klasy<br />
MovieClip jak tez niezalezna akcja Flasha).<br />
Argumenty w nawiasach (”Scene1”,20) odnosza<br />
sie do konkretnej sceny i numeru klatki, tak<br />
wiec odtwarzacz przeskoczy do sceny 1 i klatki<br />
20, a nastepnie rozpocznie odtwarzanie filmu.<br />
Wskazówka<br />
• Kropka zastepuje ukosnik z poprzednich<br />
wersji Flasha. Chociaz mozna wciaz uzywac<br />
ukosnika, lepiej poslugiwac sie kropka,<br />
poniewaz jest bardziej kompatybilna<br />
z nowymi typami akcji.<br />
Pisanie wedlug regul skladni<br />
73
Rozdzial 3.<br />
Wiecej o interpunkcji<br />
Wiecej o interpunkcji<br />
Zastosowanie kropki umozliwia tworzenie<br />
zaleznosci pomiedzy obiektami, wlasciwosciami<br />
i metodami. Dodatkowe znaki interpunkcyjne<br />
pozwalaja na wiecej kombinacji z pojedynczymi<br />
wyrazeniami.<br />
Srednik<br />
Srednika uzywa sie do zaznaczenia konca<br />
jednego wyrazenia i poczatku nastepnego. Znak<br />
ten spelnia podobna funkcje, co kropka<br />
w zdaniu: oddziela dwie idee, jedna od drugiej.<br />
Oto przyklad:<br />
stopAllSounds ();<br />
play ();<br />
Sredniki oddzielaja wyrazenia, tak wiec<br />
najpierw wylaczany jest dzwiek, a potem<br />
rozpoczyna sie odtwarzanie filmu. Kazdy skrypt<br />
jest wykonywany w kolejnosci od góry do dolu,<br />
podobnie jak zestaw instrukcji czy przepis<br />
kuchenny.<br />
Wskazówka<br />
• Dla Flasha zrozumiale sa poszczególne<br />
wyrazenia, nawet jesli nie uzywasz<br />
sredników do ich oddzielania. Dobrym<br />
zwyczajem jest jednak stosowanie tych<br />
znaków w kodzie skryptu.<br />
Klamry<br />
Klamry sa kolejnym znakiem<br />
interpunkcyjnym czesto stosowanym<br />
w kodzie ActionScript. Sluza do grupowania<br />
poszczególnych skryptów w bloki. Na<br />
przyklad, kiedy przyporzadkowujesz akcje<br />
przyciskom, akcje te sa zapisywane<br />
w klamrach wyrazenia on (release).<br />
on (release) {<br />
}<br />
stopAllSounds ();<br />
play ();<br />
W powyzszym przykladzie obie akcje,<br />
stopAllSounds oraz play, sa<br />
wykonywane po zwolnieniu klawisza<br />
myszki. Zwróc uwage na sposób<br />
rozmieszczenia klamer w kolejnych liniach,<br />
ulatwiajacych odczytanie powiazanych ze<br />
soba wyrazen jezyka ActionScript. Wazne<br />
jest, aby po klamrze zamykajacej blok akcji<br />
on (jak ró wniez po onClipEvent) nie<br />
stawiac srednika, poniewaz Flash<br />
zinterpretuje to jako blad.<br />
74
Poslugiwanie sie jezykiem ActionScript<br />
Rys. 3.6. Ikonowe menu w prawym dolnym rogu<br />
dokumentu Flasha otwiera palete akcji dzieki<br />
przyciskowi Show Actions<br />
Przyciski „plus” i „minus” dodaja<br />
lub usuwaja ze skryptu akcje<br />
Przycisk Show Actions<br />
Lista narzedzi zawierajaca akcje<br />
zorganizowane w kategorie<br />
Blok edycji<br />
parametrów<br />
Okno skryptu<br />
Rys. 3.7. Paleta akcji w trybie Normal<br />
Przyciski strzalek<br />
pozwalaja zmieniac<br />
uklad wyrazen<br />
Menu rozwijane<br />
opcji<br />
Ikona zmiany<br />
rozmiaru palety<br />
Paleta akcji<br />
Paleta akcji to okno dialogowe Flasha, dajace<br />
dostep do predefiniowanych klas i obiektów<br />
ActionScript, oraz ulatwiajace pisanie wlasnych<br />
skryptów. Akcje tworzy sie, usuwa i edytuje<br />
w jednym z dwóch trybów, Normal lub Expert,<br />
w zaleznosci od stopnia zaawansowania. Paleta<br />
akcji pozwala na pewna automatyzacje procesu<br />
pisania skryptów, np. wstawiajac automatycznie<br />
znaki interpunkcyjne w rodzaju sredników czy<br />
klamer.<br />
We Flashu nazwa palety akcji jest widoczna<br />
w rzeczywistosci jako Object Actions lub<br />
Frame Actions, w zaleznosci od rodzaju<br />
elementu, który jest aktualnie zaznaczony.<br />
Jednak zawartosc palety nie zmienia sie, tak<br />
wiec w tekscie odwolujemy sie do niego zawsze<br />
jako do palety akcji.<br />
W celu wywolania palety akcji:<br />
1. Wybierz Windows/Actions.<br />
lub<br />
W ikonowym menu w prawym dolnym rogu<br />
okna kliknij przycisk Show Actions<br />
(rys. 3.6). W zaleznosci od aktualnego<br />
zaznaczenia, pojawi sie paleta Frame<br />
Actions lub Object Actions.<br />
lub<br />
Kliknij podwójnie ujecie kluczowe, lub<br />
przytrzymujac wcisniety klawisz Alt, kliknij<br />
podwójnie klon na scenie. W efekcie pojawi<br />
sie paleta Frame Actions lub Object<br />
Actions, pozwalajac na przypisanie ujeciu<br />
kluczowemu lub klonowi odpowiedniego<br />
skryptu (rys. 3.7).<br />
Paleta akcji<br />
75
Rozdzial 3.<br />
Paleta akcji<br />
Tryb Normal<br />
Tryb Normal palety akcji udostepnia trzy sekcje<br />
okna i kilka sposobów wpisywania wyrazen<br />
jezyka ActionScript.<br />
Tryb Expert<br />
Ten tryb przeznaczony jest dla doswiadczonych<br />
programistów, którzy nie potrzebuja pomocy<br />
udostepnianej w trybie Normal. Tryb Expert<br />
umozliwia swobodne wpisywanie kodu,<br />
podobnie jak wpisywanie tekstu w edytorze<br />
(rys. 3.8).<br />
Wskazówki<br />
• Kazdy skrypt zachowuje swój wlasny tryb,<br />
co oznacza, ze jesli np. utworzysz jedna<br />
akcje danego ujecia kluczowego w trybie<br />
Normal, a inna akcje dla kolejnego ujecia<br />
kluczowego w trybie Expert, paleta akcji<br />
bedzie zmieniac tryb pracy w zaleznosci od<br />
tego, które ujecie kluczowe zostanie<br />
zaznaczone.<br />
• Badz ostrozny, przelaczajac tryby podczas<br />
pisania skryptów. Zmiana trybu z Expert<br />
na Normal wyzwala proces ponownego<br />
formatowania kodu skryptu, który<br />
wprowadza dodatkowe odstepy i obszary<br />
pustej przestrzeni. Program nie pozwoli ci<br />
na przejscie z trybu Expert do trybu<br />
Normal dopóki wpisany kod nie bedzie<br />
wolny od bledów.<br />
Rys. 3.8. Paleta akcji w trybie Expert<br />
76
Poslugiwanie sie jezykiem ActionScript<br />
Rys. 3.9. Menu opcji na palecie akcji umozliwia<br />
wybór pomiedzy trybami Normal i Expert<br />
W celu wybrania trybu<br />
pomiedzy Normal i Expert:<br />
1. Majac otwarta palete akcji, kliknij ikone<br />
zwróconego w prawo trójkata w prawym<br />
górnym rogu palety. Otworzy sie menu<br />
rozwijane opcji palety (rys. 3.9).<br />
2. Z menu wybierz tryb Normal Mode<br />
(Ctrl+N) lub Expert Mode (Ctrl+E).<br />
Wskazówka<br />
• Palete akcji mozna ustawic tak, zeby<br />
automatycznie otwierala sie w okreslonym<br />
trybie. Z menu Edit wybierz Preferences.<br />
W zakladce General okna dialogowego<br />
Preferences, z listy rozwijanej Mode<br />
wybierz odpowiednio Normal Mode lub<br />
Expert Mode (rys. 3.10).<br />
Paleta akcji<br />
Rys. 3.10. W zakladce General okna dialogowego<br />
Preferences mozna zmienic domyslny tryb pracy<br />
palety akcji<br />
Tabela 3.1. Róznice pomiedzy trybami Expert Mode i Normal Mode<br />
Cecha Tryb Normal Mode Tryb Expert Mode<br />
Bezposrednie wprowadzanie tekstu Nie Tak<br />
Blok okreslania parametrów Tak Nie<br />
Kategoria Basic Actions na liscie<br />
narzedzi<br />
Tak<br />
Przycisk „minus” Tak Nieaktywny; zaznacz wyrazenie i nacisnij<br />
klawisz Delete<br />
Przyciski „w góre” i „w dól” Tak Nieaktywne; do zmiany rozmieszczenia<br />
wyrazen uzyj polecen Copy, Cut i Paste<br />
Nie<br />
77
Rozdzial 3.<br />
Paleta akcji<br />
W celu dodania akcji<br />
w trybie Normal Mode:<br />
1. Zaznacz klon lub ujecie kluczowe, w którym<br />
chcesz wprowadzic akcje. Na liscie narzedzi<br />
kliknij pozycje Basic Actions, aby ja<br />
rozwinac.<br />
2. Kliknij podwójnie wybrana akcje, a pojawi<br />
sie ona w oknie skryptu (rys. 3.11).<br />
lub<br />
1. Zaznacz klon lub ujecie kluczowe, w którym<br />
chcesz wprowadzic akcje. Na liscie narzedzi<br />
kliknij pozycje Basic Actions, aby ja<br />
rozwinac.<br />
2. Zaznacz akcje i przeciagnij ja do okna<br />
skryptu lub jednego z wolnych pól bloku<br />
edycji parametrów (rys. 3.12). Wybrana<br />
akcja pojawi sie na liscie akcji lub w bloku<br />
okreslania parametrów.<br />
lub<br />
1. Zaznacz klon lub ujecie kluczowe, w którym<br />
chcesz wprowadzic akcje. Kliknij przycis k<br />
„plus” nad lista narzedzi i wybierz akcje<br />
z grupy rozwijanych menu (rys. 3.13).<br />
Akcja pojawi sie w oknie skryptu.<br />
lub<br />
1. Zaznacz klon lub ujecie kluczowe, w którym<br />
chcesz wprowadzic akcje. Posluz sie<br />
skrótami klawiaturowymi wymienionymi<br />
w menu rozwijanym przycisku „plus”,<br />
naciskajac najpierw klawisz Esc.<br />
2. Wpisz dwuliterowy skrót odpowiadajacy<br />
wybranej akcji. Akcja ta pojawi sie w oknie<br />
skryptu. Pelna liste skrótów poszczególnych<br />
akcji znajdziesz w dodatku C.<br />
Rys. 3.11. Dodaj akcje, wybierajac wyrazenie<br />
z listy narzedzi<br />
Rys. 3.12. Dodaj akcje, przeciagajac<br />
wyrazenie do listy akcji po prawej. Wyglad<br />
wskaznika zmienia sie na chwile, pokazujac<br />
miejsce, w którym zamierzasz upuscic akcje<br />
Rys. 3.13. Dodaj akcje, wybierajac ja z menu<br />
rozwijanego przycisku „plus”<br />
78
Poslugiwanie sie jezykiem ActionScript<br />
Rys. 3.14. Przesun wyrazenie stopAllSounds ()<br />
za pomoca przycisków-strzalek (u góry) – lub<br />
przeciagajac je w nowe miejsce (u dolu). Gruba<br />
pozioma linia wskazuje miejsce, w którym<br />
znajdzie sie wyrazenie po upuszczeniu<br />
W celu edycji akcji<br />
w trybie Normal Mode:<br />
1. Zaznacz akcje i zmien jej polozenie na liscie<br />
akcji za pomoca przycisków-strzalek<br />
„w góre” i „w dól” – lub po prostu<br />
przeciagajac ja w nowe miejsce (rys. 3.14).<br />
2. Zaznacz akcje i uzyj przycisku „minus” lub<br />
nacisnij klawisz Delete w celu usuniecia jej<br />
z listy akcji.<br />
3. Wprowadz odpowiednie wartosci w pustych<br />
polach, polach wyboru i menu rozwijanych<br />
bloku okreslania parametrów, aby zmienic<br />
argumenty dla zaznaczonej akcji. Lista akcji<br />
wyswietla akcje z ustalonymi w ten sposób<br />
parametrami (rys. 3.15).<br />
Wskazówki<br />
• Akcje mozna przeciagac bezposrednio do<br />
pól parametrów lub na liste akcji.<br />
• Tworzac skrypt, zawsze mozesz poslugiwac<br />
sie znanymi poleceniami edycji, jak Copy,<br />
Cut i Paste (Kopiuj, Wytnij, Wklej). Jesli<br />
jednak wklejasz skopiowany skrypt, nowy<br />
pojawi sie nie w miejscu zaznaczenia, jak<br />
w edytorach tekstu, lecz zaraz za nim.<br />
• Przytrzymanie klawisza Shift podczas<br />
zaznaczania umozliwia selekcje wiecej niz<br />
jednej akcji do skopiowania (Copy) lub<br />
wyciecia (Cut).<br />
Paleta akcji<br />
Rys. 3.15. Blok edycji parametrów pozwala na<br />
zmiane parametrów zaznaczonej akcji. Akcja Go<br />
To posiada dwa pola parametrów, menu<br />
rozwijane oraz pole wyboru, które wszystkie<br />
razem wplywaja na sposób dzialania akcji.<br />
Wprowadzenie wartosci 10 w polu Frame<br />
i zaznaczenie pola Go to and Play zmieni<br />
wyrazenie na liscie akcji i spowoduje<br />
przeniesienie punktu rozpoczecia odtwarzania<br />
do klatki 10<br />
79
Rozdzial 3.<br />
W celu<br />
zmodyfikowania sposobu wyswietlania<br />
palety akcji:<br />
1. Jesli chcesz zmienic rozmiar<br />
poszczególnych okienek palety, przeciagnij<br />
pionowy pasek podzialu lub kliknij go<br />
podwójnie, ewentualnie kliknij przycisk<br />
strzalki, rozdzielajacy liste narzedzi od okna<br />
skryptu (rys. 3.16).<br />
2. Klikniecie ikony trójkata w prawym dolnym<br />
rogu palety akcji zwija lub rozciaga blok<br />
edycji parametrów (rys. 3.17).<br />
Przeciaganie pionowego<br />
paska podzialu<br />
Pionowy<br />
pasek<br />
podzialu<br />
Paleta akcji<br />
Pionowy pasek podzialu przy calkowicie<br />
rozciagnietym oknie skryptu<br />
Rys. 3.16. Zmiana rozmiaru okien palety<br />
akcji przez przeciagniecie (u góry) lub<br />
klikniecie pionowego paska podzialu. Okno<br />
skryptu moze zostac rozszerzone (w srodku)<br />
lub powiekszone do szerokosci palety (u dolu)<br />
Zwija blok edycji parametrów<br />
Rys. 3.17. Paleta akcji z widocznym blokiem<br />
edycji parametrów<br />
80
Poslugiwanie sie jezykiem ActionScript<br />
Wiemy juz, ze obiekty, metody i wlasciwosci<br />
sa podstawowymi komponentami jezyka<br />
ActionScript. Jakie jednak zachodza relacje<br />
pomiedzy nimi a kategoriami akcji,<br />
wypelniajacymi okno narzedzi palety akcji?<br />
Czym charakteryzuja sie poszczególne<br />
kategorie? W trybie Normal Mode akcje<br />
sa zorganizowane hierarchicznie, w szesciu<br />
kategoriach: Basic Actions (podstawowe<br />
akcje), Actions (akcje), Operators<br />
(operatory), Functions (funkcje), Properties<br />
(wlasciwosci) i Objects (obiekty). Nie które<br />
z nich dziela sie na podkategorie akcji. Nizej<br />
znajdziesz krótka charakterystyke<br />
poszczególnych kategorii:<br />
υ Basic Actions to zbiór podstawowych<br />
akcji, z reguly odpowiedzialnych za<br />
nawigacje, np. play(). W kategorii tej<br />
znajdziesz akcje przydatne do odtwarzania<br />
róznych klatek filmu, wczytywania filmów<br />
z dowolnego miejsca w sieci Internet czy<br />
chociazby akcje ladowania dokumentów<br />
HTML do przegladarki internetowej.<br />
υ Zbiór Actions zawiera – oprócz elementów<br />
poprzedniej kategorii – takze bardziej<br />
zlozone akcje, sluzace do kontrolowania<br />
filmu. W sklad tej kategorii wchodza akcje<br />
potrzebne do okreslania zmiennych,<br />
wyrazen (formul laczacych zmienne) i<br />
wyrazen warunkowych. Znajdziesz tu<br />
równiez akcje dzialajace z klipami<br />
filmowymi, jak startDrag – akcje<br />
powodujaca „przyczepienie” klipu<br />
filmowego do wskaznika myszki, akcje<br />
warunkowe takie jak if, ifFrameLoaded<br />
oraz petle (takie jak for, do while itp.).<br />
Generalnie, z akcji tej kategorii czesto<br />
korzysta sie przy ustawianiu<br />
i modyfikowaniu obiektów, a takze<br />
porównywaniu i wywolywaniu ich<br />
wlasciwosci i metod.<br />
Kategorie akcji<br />
υ Operators jest kategoria stanowiaca zbiór<br />
operatorów umozliwiajacych tworzenie<br />
zlozonych wyrazen z wyrazen prostszych<br />
Sa tu zarówno powszechne operatory<br />
matematyczne, w rodzaju dodawania (+)<br />
i odejmowania (–), jak i operatory do<br />
budowania zlozonych wyrazen z lancuchów<br />
tekstowych .<br />
υ Functions to zbiór akcji, np. hitTest<br />
(akcja wykrywa kolizje dwóch klipów<br />
filmowych), które zwracaja wartosc, oparta<br />
na dostarczonych wczesniej danych<br />
(przykladem moze byc funkcja obliczajaca<br />
kwadrat swojego argumentu. Jako argument<br />
jest podawana wartosc liczbowa, natomiast<br />
wartosc zwracana przez funkcje jest<br />
kwadratem tej wielkosci). W takiej postaci<br />
funkcje stanowia czesc wiekszych wyrazen.<br />
Nazwa funkcji – w momencie obliczania<br />
przez ActionScript wyrazenia – zostaje<br />
zastapiona przez wartosc zwracana.<br />
υ Properties to zbiór wlasciwosci klipu<br />
filmowego, które mozna modyfikowac<br />
lub oceniac, np. _rotation. Mozna tutaj<br />
znalezc wlasciwosci lokalne, odnoszace sie<br />
do konkretnego obiektu (takie jak<br />
_rotation), oraz wlasciwosci globalne,<br />
majace wplyw na caly film (np.<br />
_quality).<br />
υ Objects jest zbiorem obiektów wraz z ich<br />
metodami i wlasciwosciami, np.<br />
selection.getFocus().<br />
Paleta akcji<br />
81
Rozdzial 3.<br />
Uzywanie obiektów<br />
Uzywanie obiektów<br />
Skoro wiesz juz, czym sa obiekty, a takze jak<br />
poslugiwac sie paleta akcji, zaczniemy pisac<br />
skrypt z uzyciem wlasnie obiektów, jak równiez<br />
wywolywania metod lub deklarowania<br />
i przyporzadkowywania wlasciwosci.<br />
Flash udostepnia predefiniowane klasy,<br />
nazywane „obiektami”. Tak naprawde sa wiec<br />
dwie definicje obiektów. Array, Boolean,<br />
Color i wszystkie inne obiekty wyswietlane<br />
w kategorii Objects na liscie narzedzi sa<br />
okreslane mianem obiektów, poniewaz stanowia<br />
predefiniowane klasy. Obiektami w ogólnym<br />
znaczeniu sa tez ciagle pojedyncze klony danej<br />
klasy. Zatem obiekt Array powinien byc<br />
wlasciwie nazywany klasa Array, a z niej samej<br />
mozna utworzyc obiekt. W tekscie odwolujemy<br />
sie do pojecia predefiniowanych klas, piszac<br />
o obiektach i podajac ich nazwy pisane wielka<br />
litera, jako ze tak wlasnie zostaly uszeregowane<br />
na liscie narzedzi palety akcji. Klasy te<br />
posiadaja metody oraz wlasciwosci,<br />
pozwalajace kontrolowac rózne aspekty filmów<br />
Flasha, np. klipy filmowe, dzwiek, dane, czas<br />
czy funkcje matematyczne. Mozesz takze<br />
tworzyc wlasne klasy poprzez laczenie kilku<br />
predefiniowanych klas i akcji z funkcjami<br />
(zobacz – rozdzial 11. „Sterowanie przeplywem<br />
informacji”).<br />
Predefiniowane klasy<br />
Predefiniowane klasy znajduja sie w kategorii<br />
Objects palety akcji (rys. 3.18). Zeby móc<br />
posluzyc sie klasa, najpierw musisz stworzyc jej<br />
klon, nadajac mu nazwe. Robi sie to podobnie,<br />
jak w przypadku tworzenia klonu symbolu.<br />
Musisz utworzyc klon klasy, jesli chcesz ja<br />
wykorzystac w skrypcie, a robi sie to przez<br />
nadanie jej nazwy. Do nadania klonowi klasy<br />
unikalnej nazwy uzywa sie akcji set<br />
variable.<br />
Adam = new Human ();<br />
myColor = new Color ();<br />
Rys. 3.18. Predefiniowane klasy Flasha sluza<br />
do kontrolowania róznych aspektów danych<br />
82
Poslugiwanie sie jezykiem ActionScript<br />
Powyzsze wyrazenia sluza do utworzenia<br />
nowych obiektów, którymi pózniej mozna<br />
manipulowac. Operator new umieszczony przed<br />
nazwa klasy, jak widac w przykladzie powyzej,<br />
jest nazywany funkcja konstruktora<br />
(constructor function). Funkcja new stanowi<br />
specjalny rodzaj funkcji, uzywany do tworzenia<br />
nowych klonów klas.<br />
Kolejny krok polega na wywolaniu metody<br />
obiektu, ewentualnie zadeklarowaniu<br />
i przyporzadkowaniu nowych wlasciwosci.<br />
Metode mozesz wywolac wybierajac akcje<br />
evaluate i wpisujac wyrazenie z kropka:<br />
myColor.setRGB(0x00CC33)<br />
Powyzsze wyrazenie wywoluje metode setRGB,<br />
która zmienia kolor skojarzony z obiektem<br />
myColor .<br />
Wskazówka<br />
• Kilka obiektów Flasha, jak obiekty Key,<br />
Math i Mouse, nie posiadaja funkcji<br />
konstruktora. Oznacza to, ze nie mozemy<br />
utworzyc ich klonu. Do ich metod<br />
i wlasciwosci mozesz odwolywac sie,<br />
podajac nazwe obiektu i po kropce nazwe<br />
wlasciwosci lub metody, np.:<br />
Mouse.hide();<br />
Math.sin(argument);<br />
Zeby dowiedziec sie, czy dany obiekt<br />
potrzebuje funkcji konstruktora, wystarczy<br />
spojrzec do kategorii Objects na liscie<br />
narzedzi. Te, które jej nie posiadaja,<br />
nie wyswietla jej wsród swoich metod<br />
i wlasciwosci.<br />
Uzywanie obiektów<br />
83
Rozdzial 3.<br />
Uzywanie obiektów<br />
Na poczatek zobaczysz, jak uzywac akcji<br />
set variable, new i evaluate do<br />
konstruowania i poslugiwania sie nowymi<br />
obiektami. W kolejnych rozdzialach zaznajomisz<br />
sie z konkretnymi typami obiektów, wlasciwosci<br />
i metod, a takze dowiesz sie, jak uzywac ich<br />
do kontrolowania twoich filmów Flasha.<br />
Ponizsze cwiczenia demonstruja sposób<br />
tworzenia klonu obiektu Date i wprowadzania<br />
zmiennej podajacej aktualna date.<br />
W celu utworzenia obiektu:<br />
1. Wyselekcjonuj ujecie kluczowe.<br />
2. Otwórz palete akcji w trybie Normal Mode.<br />
Z listy narzedzi lub menu przycisku „plus”<br />
wybierz Actions/set variable. W oknie<br />
skryptu pojawi sie nowe wyrazenie,<br />
a w bloku edycji parametrów ujrzysz puste<br />
pola (rys. 3.19).<br />
3. W polu Variable wpisz wybrana przez<br />
ciebie nazwe obiektu (rys. 3.20).<br />
4. Umiesc wskaznik myszy w polu Value.<br />
Wybierz Objects/Date/new Date lub<br />
przeciagnij pozycje new Date do pola<br />
Value. W polu Value pojawi sie funkcja<br />
konstruktora new Date (rys. 3.21).<br />
5. Usun podswietlone argumenty znajdujace<br />
sie w nawiasach przy funkcji konstruktora<br />
new Date. Zaznacz pole wyboru<br />
Expression, widoczne obok pola Value<br />
(rys. 3.22). W oknie skryptu zobaczysz, ze<br />
zniknal cudzyslów widoczny wczesniej<br />
wokól funkcji konstruktora new Date.<br />
Oznacza to, ze Flash bedzie traktowal<br />
zawartosc pola Value jako wyrazenie, a nie<br />
jako lancuch znaków (czyli tekst). Okno<br />
skryptu pokazuje cale wyrazenie, tworzace<br />
klon obiektu Date o nazwie myDate. Masz<br />
wiec juz klon twojego nowego obiektu,<br />
który jest gotowy do uzycia (rys. 3.23).<br />
Wywolanie funkcji konstruktora new Date<br />
bez argumentów powoduje, ze nowo<br />
utworzony obiekt daty bedzie przechowywal<br />
aktualny czas, tj. czas odczytany z zegara<br />
systemowego.<br />
Rys. 3.19. Akcja set variable wymaga<br />
zadeklarowania zmiennej i podania wartosci<br />
Rys. 3.20. Wpisz myDate jako nazwe obiektu<br />
Rys. 3.21. Funkcja konstruktora new Date<br />
posiada nastepujace argumenty: year (rok),<br />
month (miesiac), date (data), hour (godzina),<br />
min (minuta), sec (sekunda), ms<br />
(milisekunda)<br />
Rys. 3.22. Funkcja konstruktora new Date,<br />
bez dodatkowych argumentów, nie przypisuje<br />
okreslonych wlasciwosci obiektowi myDate<br />
Rys. 3.23. Pelne wyrazenie tworzy z obiektu<br />
typu Date nowy obiekt, nazwany myDate<br />
84
Poslugiwanie sie jezykiem ActionScript<br />
Rys. 3.24. Wprowadz mydisplay jako nazwe<br />
zmiennej i nie zaznaczaj pola Expression<br />
W celu wywolania metody obiektu:<br />
1. Kontynuujemy poprzednie cwiczenie. Na<br />
palecie akcji wybierz Actions/set variable.<br />
Ponizej pierwszego wyrazenia pojawi sie<br />
nastepne.<br />
2. W polu Variabl e wpisz nazwe zmiennej<br />
(rys. 3.24).<br />
3. W polu Value wpisz nazwe obiektu Date,<br />
który utworzyles w poprzednim cwiczeniu<br />
(czyli myDate ).<br />
4. Nie przesuwajac wskaznika myszy znad<br />
pola Value, wybierz Objects/Date/getDate.<br />
Zaznacz pole wyboru Expression<br />
(rys. 3.25). W polu Value, zaraz za<br />
obiektem myDate pojawi sie metoda<br />
getDate.<br />
Rys. 3.25. W zmiennej mydisplay przechowywana<br />
jest informacja, odczytywana przez metode<br />
getDate z obiektu myDate<br />
Pole wyboru Expression<br />
Zaznaczenie pola Expression<br />
powoduje usuniecie cudzyslowów<br />
z pola Value (lub Variable) i tym<br />
samym zamiane tzw. lancucha<br />
znakowego na wyrazenie. Lancuch<br />
znakowy jest za wsze zamkniety<br />
w cudzyslowie i reprezentuje<br />
okreslony zbiór znaków – cyfr, liter<br />
lub symboli – inaczej mozna<br />
powiedziec, ze lancuch znakowy to<br />
tekst. Natomiast wyrazenie jest<br />
wzorem (czy raczej formula), który<br />
moze zawierac zmienne, funkcje oraz<br />
cyfry, lic zby i operatory. Zanim<br />
zostanie okreslone, co reprezentuje<br />
dane wyrazenie, Flash musi je<br />
najpierw zinterpretowac, tj. podstawic<br />
za zmienne i funkcje odpowiednie<br />
wartosci, a takze wykonac na calosci<br />
dzialania zgodne z logika uzytych<br />
operatorów. Na przyklad, lancuch<br />
znakowy ”3+2” stanowi tylko grupe<br />
trzech znaków, 3+2. Z drugiej strony,<br />
wyrazenie 3+2 oznacza 5. Wiecej na<br />
temat wyrazen i zmiennych dowiesz<br />
sie z czesci V, „Przetwarzanie<br />
informacji”.<br />
Uzywanie obiektów<br />
85
Rozdzial 3.<br />
Uzywanie obiektów<br />
Kompletne wyrazenie przypisuje zmiennej<br />
mydisplay aktualny dzien miesiaca (jest to<br />
wartosc liczbowa od 1 do, w zaleznosci od<br />
miesiaca i roku, 28, 29, 30 lub 31).<br />
Informacja podawana przez te metode<br />
nazywa sie wartoscia zwracana.<br />
5. Wybierz narzedzie tekstowe (Text Tool )<br />
i przeciagnij w obrebie sceny, aby utworzyc<br />
pusta selekcje. Na palecie Text Options,<br />
z menu rozwijanego wybierz Dynamic<br />
Text, a w polu Variable wpisz nazwe<br />
zmiennej podajacej aktualna date<br />
(mydisplay) (rys. 3.26).<br />
Pole dynamicznego tekstu wyswietla<br />
wartosc zmiennej w czasie odtwarzania<br />
filmu. Wiecej o dynamicznym tekscie<br />
dowiesz sie z rozdzialu 10.<br />
• Przetestuj swój film, wybierajac<br />
Control/Test movie. Flash tworzy klon<br />
obiektu Date, a nastepnie obiekt ten<br />
wywoluje metode getDate. Wartosc<br />
zwracana (dzien miesiaca) jest podstawiana<br />
za zmienna o nazwie mydisplay. Wartosc<br />
tej zmiennej widac w polu tekstowym na<br />
scenie.<br />
Wskazówka<br />
• W powyzszym cwiczeniu uzyles akcji set<br />
variable, która przyporzadkowuje<br />
zmiennej wartosc (w tym przypadku wartosc<br />
ta zostala zwrócona przez metode obiektu<br />
typu Date). Bylo to niezbedne do<br />
zobaczenia efektów dzialania metody,<br />
poniewaz metoda zwracala wartosc<br />
i nalezalo w jakis sposób ja odzyskac.<br />
Metody, które nie zwracaja zadnej wartosci,<br />
nie potrzebuja, aby przypisywac im zmienna<br />
(jej przypisanie nie bedzie mialo zadnego<br />
efektu). Na przyklad metoda start()<br />
obiektu Sound po prostu rozpoczyna<br />
odtwarzanie pliku muzycznego. W tym<br />
przypadku do wywolania metody mozesz<br />
uzyc akcji evaluate.<br />
Rys. 3.26. Pole tekstowe po lewej zostalo<br />
zamienione na pole dynamicznego tekstu<br />
(Dynamic Text) za pomoca zmiennej<br />
mydisplay<br />
Symbole i klasy<br />
Symbole nie sa klasami. Nie sa nawet<br />
obiektami. To prawda, ze klip<br />
filmowy jest jednoczesnie symbolem<br />
i obiektem, ale to jedyny wyjatek,<br />
i chyba tez zródlo calego zamieszania.<br />
Grafiki, przyciski, dzwieki, bitmapy<br />
i klipy wideo QuickTime – to<br />
wszystko symbole pojawiajace sie<br />
w bibliotece. Jednak nie sa to obiekty<br />
ani klasy, a to dlatego, ze nie<br />
posiadaja metod i wlasciwosci, które<br />
mozna kontrolowac za pomoca jezyka<br />
ActionScript. Tymczasem przyciski<br />
wykonuja okreslone dzialania nie<br />
dlatego, ze posiadaja metody, ale<br />
dlatego, ze ty przyporzadkowujesz<br />
konkretne skrypty ich klonom.<br />
Istnieje jednak pewna analogia<br />
pomiedzy klasami i symbolami.<br />
Symbole stanowia zawartosc<br />
biblioteki (utworzona lub<br />
zaimportowana), która mozna<br />
wielokrotnie wykorzystywac.<br />
W swoich filmach uzywasz jedynie<br />
klonów lub kopii poszczególnych<br />
symboli. W przypadku klas, jak<br />
mogles sie przekonac, tez uzywa sie<br />
tylko klonów, tworzonych na ich<br />
podstawie na potrzeby projektu.<br />
86
Poslugiwanie sie jezykiem ActionScript<br />
Rys. 3.27. Komentarze towarzyszace kolejnym<br />
fragmentom skryptu pomagaja uwypuklic ich<br />
znaczenie<br />
Rys. 3.28. Podwójny ukosnik sygnalizuje<br />
wprowadzanie komentarza w polu definiowania<br />
etykiety ujecia (Label)<br />
• Ukosników uzywa sie takze do<br />
sygnalizowania komentarzy wpisywanych<br />
w oknie palety Frame. Kiedy wiec<br />
zmodyfikujesz ujecie, wpisz odpowiedni<br />
tekst, zaczynajac linie od ukosników (//),<br />
co zasygnalizuje programowi, ze linia ta<br />
zawiera komentarz, a nie nazwe ujecia<br />
(rys. 3.28).<br />
Stosowanie komentarzy<br />
Podczas tworzenia zlozonych skryptów<br />
powinienes pamietac o dolaczaniu objasnien<br />
(komentarzy), które pozwola tobie<br />
i wspóltwórcom projektu pamietac o zadaniach<br />
poszczególnych fragmentów kodu. Komentarze<br />
pomagaja zachowac porzadek w czasie prac nad<br />
poszczególnymi czesciami skryptu (rys. 3.27).<br />
W celu dolaczenia komentarza:<br />
1. Na palecie akcji wybierz Actions/comment.<br />
W polu Comment, w bloku edycji<br />
parametrów, wprowadz tekst komentarza.<br />
2. Tylko w trybie Expert Mode, w oknie<br />
skryptu wpisz dwa ukosniki (//). Wprowadz<br />
tekst komentarza za ukosnikami.<br />
3. Jesli chcesz zawrzec w komentarzu tekst,<br />
który ma kilka linijek, to otwierasz blok<br />
komentarza wpisujac /* a zamykasz<br />
wpisujac */:<br />
//To jest komentarz, który miesci sie<br />
w jednej linijce<br />
/* To jest tekst komentarza, który nie miesci<br />
sie w jednej linijce, wiec trzeba uzyc<br />
otwarcia i zamkniecia bloku komentarza */<br />
Komentarze sa zaznaczane innym niz reszta<br />
skryptu kolorem, wiec latwo je zlokalizowac.<br />
Wskazówki<br />
• Jesli wprowadzasz dlugi komentarz, zapisz<br />
go w kilku kolejnych liniach lub skorzystaj<br />
z bloku ko mentarza. Dzieki temu nie<br />
bedziesz musial przewijac okna skryptu,<br />
zeby odnalezc koniec tekstu.<br />
• Nie zwracaj uwagi na ilosc komentarzy. Nie<br />
sa one kompilowane wraz z reszta skryptu,<br />
wiec nie maja wplywu na szybkosc<br />
wykonywania programu. Co wiecej, linie<br />
komentarzy nie sa dolaczane do<br />
eksportowanych plików SWF, wiec nie<br />
powoduja zwiekszania ich rozmiarów.<br />
Stosowanie komentarzy<br />
87
Rozdzial 3.<br />
88
Czesc 3.<br />
Zarzadzanie czasem i informacja<br />
89
Rozdzial 4.<br />
90
Zaawansowane przyciski<br />
i interakcja z uzytkownikiem<br />
4<br />
Czesci skladowe jezyka HTML<br />
Wykorzystanie Flasha do tworzenia grafiki i animacji to tylko polowa zabawy. Mozesz jeszcze<br />
wprowadzic interakcje z uzytkownikiem za pomoca przycisków i jezyka ActionScript,<br />
pozwalajacych mu sprawowac kontrole nad owa grafika i animacja. Interaktywnosc ma zasadnicze<br />
znaczenie w nawigowaniu po sieci i witrynach komercyjnych, jak równiez w procesie tworzenia<br />
gier, internetowych samouczków czy czegokolwiek innego, co wymaga od uzytkownika<br />
dokonywania wyborów.<br />
Co czyni film interaktywnym? Interaktywnosc opiera sie na obustronnej komunikacji pomiedzy<br />
uzytkownikiem i filmem. W przypadku filmu Flasha, uzytkownik moze reagowac wykonaniem<br />
akcji polegajacej na przesunieciu wskaznika myszy, kliknieciu jej przycisku czy nacisnieciu<br />
okreslonego klawisza na klawiaturze. Akcja taka wywola odpowiedz ze strony filmu, który z kolei<br />
moze zazadac od uzytkownika wykonania kolejnego dzialania. To wlasnie reakcja uzytkownika<br />
na rzeczy dziejace sie na ekranie – we Flashu nazywane zdarzeniami – wprowadza do projektu<br />
interaktywnosc. Do zarzadzania zdarzeniami – Flash uzywa kombinacji skryptów akcji<br />
przypisywanych do ujec, klonów przycisków i obiektów, grupujac je w wyrazeniach nazywanych<br />
manipulatorami zdarzen.<br />
W tym rozdziale na poczatek zajmujemy sie symbolami przycisków i ich bardziej<br />
zaawansowanymi zastosowaniami. Nauczysz sie powiekszac funkcjonalnosc tych elementów,<br />
tworzac niewidzialne przyciski, sekwencje animacji klonów przycisków, jak równiez w pelni<br />
animowane przyciski. Omówimy tez zagadnienia zwiazane z tworzeniem bardziej zlozonych<br />
przycisków, w rodzaju menu rozwijanych, zawierajacych rózne zdarzenia zwiazane z obsluga<br />
myszy, opcje sledzenia i klipy filmowe. Na koniec zobaczysz, w jaki sposób nadzorowac reakcje<br />
uzytkownika poslugujacego sie klawiatura za posrednictwem zdarzen klawiaturowych<br />
powiazanych z klonami przycisków i obiektem Key. Oprócz zdarzen zwiazanych z obsluga myszy<br />
oraz zdarzen klawiaturowych, istnieje jeszcze jeden typ zdarzen – filmowe, które sa tez bardzo<br />
wazne dla kontrolowania interakcji z uzytkownikiem. Jako ze zdarzenia filmowe sa zwiazane<br />
z klipami filmowymi, omówimy je w rozdziale 5., którego tresc koncentruje sie wlasnie na klipach<br />
filmowych oraz poslugiwaniu sie listwa czasowa.<br />
Przyciski i interakcja z uzytkownikiem<br />
91
Rozdzial 4.<br />
Niewidzialne przyciski<br />
Niewidzialne przyciski<br />
W programie Flash mozna zdefiniowac cztery<br />
specjalne ujecia kluczowe symbolu przycisku,<br />
które opisuja wyglad przycisku i sposób jego<br />
reakcji na ruch mysza. Sa to stany przycisku – o<br />
nazwach Up, Over, Down i Hit. Stan Up<br />
okresla wyglad przycisku w momencie, kiedy<br />
wskaznik myszy jest poza jego granicami. Over<br />
ukazuje wyglad przycisku w momencie, kiedy<br />
wskaznik myszy znajduje sie bezposrednio nad<br />
przyciskiem. W stanie Down okresla sie wyglad<br />
przycisku w momencie, kiedy wskaznik myszy<br />
znajduje sie nad przyciskiem i wcisnieto klawisz<br />
myszy. Ostatni stan, Hit, okresla aktywny<br />
obszar przycisku (rys. 4.1).<br />
Mozesz zwiekszyc elastycznosc przycisków<br />
Flasha, definiujac tylko niektóre stany.<br />
Zostawiajac puste ujecia kluczowe we<br />
wszystkich stanach, z wyjatkiem stanu Hit,<br />
otrzymasz w rezultacie niewidzialny przycisk.<br />
Niewidzialny przycisk posiada tylko stan Hit,<br />
definiujacy obszar reagujacy na wskaznik<br />
myszy (rys. 4.2). Tego typu przyciski sa<br />
szczególne uzyteczne przy tworzeniu<br />
zlozonych, uniwersalnych obszarów aktywnych,<br />
którym mozna przypisac konkretne akcje.<br />
Mozna umieszczac klony niewidzialnych<br />
przycisków nad obszarem grafiki, co oznacza,<br />
ze wlasciwie dowolny element sceny moze<br />
posluzyc za przycisk. Na przyklad, jesli<br />
utworzyles kilka bloków tekstowych, które<br />
uzytkownik ma przeczytac jeden po drugim,<br />
móglbys zrobic tak, zeby klikniecie mysza<br />
jednego z nich otwieralo kolejny akapit. Zamiast<br />
wiec tworzyc oddzielne przyciski dla kazdego<br />
bloku tekstowego, przygotuj tylko jeden<br />
niewidzialny przycisk i dopasuj jego klony do<br />
kazdego z bloków. Przypisz akcje wszystkim<br />
klonom niewidzialnego przycisku, umieszczonym<br />
nad obszarami bloków tekstowych (rys. 4.3).<br />
Kiedy przeciagniesz klon niewidzialnego<br />
przycisku na scene, pojawi sie obszar aktywny,<br />
przedstawiony w postaci przezroczystego<br />
niebieskiego ksztaltu, pozwalajacy precyzyjnie<br />
umiescic przycisk na scenie. Wybierz Control/<br />
Enable Simple Buttons, a przycisk zniknie.<br />
Rys. 4.1. Cztery ujecia kluczowe symbolu<br />
przycisku<br />
Rys. 4.2. Niewidzialny przycisk uzyskasz<br />
definiujac tylko stan Hit<br />
Dwa klony tego samego symbolu<br />
niewidzialnego przycisku<br />
Rys. 4.3. Klony niewidzialnego przycisku<br />
umieszczone nad blokami tekstowymi<br />
92
Zaawansowane przyciski i interakcja z uzytkownikiem<br />
Rys. 4.4. Symbol niewidzialnego przycisku.<br />
Prostokatny ksztalt w ujeciu kluczowym Hit<br />
definiuje obszar aktywny przycisku<br />
W celu<br />
utworzenia niewidzialnego przycisku:<br />
1. Z menu Insert wybierz New Symbol.<br />
Pojawi sie okno dialogowe Symbol<br />
Properties.<br />
2. Wpisz nazwe przycisku i w polu Behavior<br />
zaznacz opcje Button. Kliknij OK.<br />
W bibliotece zostanie utworzony nowy<br />
symbol przycisku i uruchomi sie tryb edycji<br />
symbolu.<br />
3. Zaznacz ujecie kluczowe Hit.<br />
4. Z menu Insert wybierz Keyframe .<br />
Wówczas zostanie utworzone nowe ujecie<br />
kluczowe, odpowiadajace stanowi Hit.<br />
5. Majac zaznaczone ujecie kluczowe Hit,<br />
narysuj uniwersalny ksztalt, który posluzy<br />
jako obszar aktywny twojego<br />
niewidzialnego przycisku (rys. 4.4).<br />
6. Powróc do glównej listwy czasowej.<br />
7. Tak jak w przypadku kazdego symbolu<br />
przycisku, przeciagnij klon symbolu<br />
z biblioteki na scene. Przezroczysty<br />
niebieski ksztalt, który pojawil sie na scenie,<br />
oznacza stan Hit (obszar aktywny) twojego<br />
niewidzialnego przycisku.<br />
8. Przesun, wyskaluj i obróc klon<br />
niewidzialnego przycisku, aby pokrywal sie<br />
z wybrana grafika.<br />
9. Na palecie Actions przypisz akcje klonowi<br />
przycisku. Kiedy wybierzesz Control/<br />
Enable Simple Buttons, przezroczysty<br />
niebieski obszar zniknie, ale wskaznik<br />
przyjmie postac raczki, wskazujac tym<br />
samym na obecnosc przycisku.<br />
Niewidzialne przyciski<br />
93
Rozdzial 4.<br />
Niewidzialne przyciski<br />
Etykietki narzedziowe czy pojawiajace sie<br />
komunikaty takze mozna tworzyc za pomoca<br />
niewidzialnych przycisków. Wystarczy<br />
przygotowac taka krótka informacje w stanie<br />
Over niewidzialnego przycisku, a nastepnie<br />
rozmiescic klony wszedzie tam, gdzie<br />
informacja ma sie pojawiac (rys. 4.5).<br />
W celu utworzenia<br />
etykietki narzedziowej<br />
z niewidzialnymi przyciskami:<br />
1. Utwórz niewidzialny przycisk w sposób<br />
przedstawiony w poprzednim cwiczeniu.<br />
2. Zaznacz stan Over i wstaw nowe ujecie<br />
kluczowe.<br />
3. W stanie Over dodaj grafike, która<br />
wyswietla informacje o konkretnym<br />
elemencie pojawiajacym sie na scenie lub<br />
w filmie (rys. 4.6).<br />
4. Powróc do glównej listwy czasowej filmu<br />
i rozmiesc klony niewidzialnego przycisku<br />
w potrzebnych punktach.<br />
Wskazówki<br />
• Zachowaj ostroznosc, kiedy obracasz lub<br />
skalujesz klon, poniewaz dzialania te maja<br />
wplyw takze na stan Over przycisku<br />
(rys. 4.7).<br />
• Musisz miec swiadomosc tego, w jaki<br />
sposób niewidzialne przyciski sa<br />
umieszczane w warstwach, a takze pamietac,<br />
ze zachowuja porzadek okreslony stosem.<br />
Przycisk znajdujacy sie nad innym<br />
przyciskiem jest wobec niego nadrzedny<br />
i w rezultacie dezaktywuje przypisana<br />
mu akcje.<br />
Rys. 4.5. Stan Over tego niewidzialnego<br />
przycisku zawiera dymek z instrukcja<br />
skorzystania ze slowniczka. Mozna<br />
wykorzystac kilka klonów do zaznaczenia<br />
róznych slów<br />
Rys. 4.6. Jezeli dla<br />
niewidzialnego<br />
przycisku<br />
zdefiniujesz tylko<br />
stan Over, bedzie<br />
sie on pojawial<br />
tylko wtedy, kiedy<br />
wskaznik myszy<br />
spocznie na<br />
aktywnym obszarze<br />
Rys. 4.7. Klon umieszczony nad slowami<br />
„muscle contraction” zostal rozciagniety.<br />
Spowodowalo to takze rozciagniecie stanu<br />
Over przycisku w podobny sposób<br />
94
Zaawansowane przyciski i interakcja z uzytkownikiem<br />
Animowane przyciski<br />
Skoro przyciski sa rodzajem symbolu, to<br />
znaczy, ze mozna je animowac – tak jak kazdy<br />
inny klon symbolu. Wprawienie przycisków<br />
w ruch stwarza mozliwosc projektowania<br />
poruszajacych sie menu czy elementów<br />
interfejsu, które oczywiscie reaguja na wskaznik<br />
myszy i wykonuja przypisane im akcje.<br />
Rys. 4.8. Akcja przypisana do tego klonu<br />
przycisku w ksztalcie balonika powoduje przejscie<br />
do etykiety happy birthday i rozpoczecie<br />
odtwarzania<br />
Sekwencje animacji<br />
ruchu klonu przycisku<br />
Rys. 4.9. Ten balonik unosi sie i opada<br />
w niekonczacej sie petli animacji<br />
Akcja<br />
gotoAndPlay(1)<br />
W celu wykonania automatycznej animacji<br />
ruch przycisku:<br />
1. Z menu Insert wybierz New Symbol<br />
i utwórz symbol przycisku.<br />
2. Powróc do glównej listwy czasowej<br />
i przeciagnij klon przycisku na scene.<br />
3. Zaznacz klon i otwórz palete akcji w trybie<br />
Normal Mode. Przypisz akcje twojemu<br />
klonowi (rys. 4.8).<br />
4. Utwórz animacje ruchu, tak samo, jak<br />
dla zwyklego klonu symbolu graficznego.<br />
Wstaw nowe ujecia kluczowe, przesun<br />
poszczególne klony lub dokonaj ich<br />
transformacji, a nastepnie wybierz<br />
Motion Tween w palety Frames.<br />
5. Na koncu animacji ruchu dodaj akcje<br />
gotoAndPlay(1). Flash utworzy<br />
niekonczaca sie petle animacji dla twojego<br />
przycisku (rys. 4.9).<br />
Animowane przyciski<br />
95
Rozdzial 4.<br />
6. Utwórz na listwie czasowej punkt,<br />
do którego akcja przypisana do klonu<br />
przycisku przenosi uzytkownika.<br />
7. Przetestuj swój film. W czasie odtwarzania<br />
animacji klon przycisku jest aktywny<br />
i reaguje na wskaznik myszy.<br />
Wskazówka<br />
• Animowane klony przycisków uzywaja akcji<br />
przypisanych do pierwszego ujecia<br />
kluczowego sekwencji animacji ruchu<br />
(rys. 4.10). Dobrym pomyslem jest najpierw<br />
przypisanie akcji do klonu przycisku,<br />
a dopiero potem wykonanie animacji. W ten<br />
sposób wszystkie wstawiane pózniej ujecia<br />
kluczowe beda zawierac ten sam klon,<br />
z tymi samymi akcjami.<br />
Akcje przypisane do klonu przycisku w tym<br />
ujeciu kluczowym beda obowiazywac do<br />
nastepnego ujecia kluczowego<br />
Rys. 4.10. Akcje przypisane animowanym<br />
klonom. W sekwencji animacji wykonywane<br />
sa akcje przypisane do pierwszego klonu<br />
Animowane przyciski<br />
96
Zaawansowane przyciski i interakcja z uzytkownikiem<br />
Klon klipu<br />
filmowego<br />
z motylem rezyduje<br />
w pojedynczej<br />
klatce na glównej<br />
listwie czasowej<br />
Wszystkie 10 klatek<br />
symbolu klipu<br />
filmowego wciaz<br />
moga byc<br />
odtwarzane<br />
Rys. 4.11. Klipy filmowe posiadaja niezalezne<br />
listwy czasowe<br />
Animowane przyciski<br />
i symbol klipu filmowego<br />
Animowane przyciski wyswietlaja animacje<br />
w jednym z trzech pierwszych ujec kluczowych<br />
(Up, Over i Down) symbolu przycisku.<br />
Na przyklad, przycisk móglby wirowac<br />
w momencie „najechania” na niego<br />
wskaznikiem myszy, jako ze stan Over zawiera<br />
animacje wirujacego przycisku. Ale jak<br />
wpasowac animacje w jedno tylko ujecie<br />
kluczowe symbolu przycisku? Odpowiedzia<br />
jest wykorzystanie klipu filmowego.<br />
Klipy filmowe stanowia specjalny rodzaj<br />
symbolu, który umozliwia przechowywanie<br />
animacji odtwarzanych, niezaleznie od ich<br />
polozenia czy liczby klatek zajmowanych przez<br />
klon symbolu. Jest to mozliwe dlatego, ze listwa<br />
czasowa klipu filmowego jest niezalezna od<br />
pozostalych listew, lacznie z listwami<br />
czasowymi innych klipów, jak równiez glównej<br />
listwy czasowej, w której klip moze rezydowac.<br />
Nie zaleznosc ta oznacza, ze w przypadku<br />
wprowadzenia do sceny klonu symbolu, beda<br />
odtwarzane wszystkie klatki animacji klipu<br />
filmowego, niezaleznie od jej umiejscowienia.<br />
Umieszczenie klonu klipu filmowego w ujeciu<br />
kluczowym symbolu przycisku sprawia, ze klip<br />
filmowy bedzie odtwarzany za kazdym razem<br />
po wyswietleniu tego ujecia kluczowego.<br />
Opisane zagadnienia to podstawy dzialania<br />
animowanych przycisków.<br />
Rozwazmy przyklad motyla trzepocacego<br />
skrzydlami. Animacja taka moglaby zajmowac<br />
dziesiec klatek w symbolu klipu filmowego.<br />
Jednak wstawienie klonu tego filmu do innego<br />
filmu na scenie, majacego tylko jedna klatke,<br />
wciaz pozwala ogladac animacje motyla<br />
w calosci (rys. 4.11). Wlasciwosc ta jest<br />
uzyteczna w projektowaniu cyklicznych<br />
animacji odtwarzanych niezaleznie od tego,<br />
co dzieje sie na glównej listwie czasowej.<br />
Animacje mrugajacych oczu, na przyklad,<br />
mozna umiescic w obrebie twarzy w postaci<br />
klipu filmowego. I wtedy cokolwiek dzialoby<br />
sie z twarza – jesli w ogóle cos by sie dzialo –<br />
oczy beda caly czas mrugac.<br />
Przyciski i symbol klipu filmowego<br />
97
Rozdzial 4.<br />
Przyciski i symbol klipu filmowego<br />
Klip filmowy jest unikalny pod jeszcze jednym<br />
wzgledem – jest obiektem Flasha, co oznacza,<br />
ze posiada metody i wlasciwosci, które mozesz<br />
kontrolowac za pomoca jezyka ActionScript.<br />
W kolejnych rozdzialach powiemy o tym<br />
wiecej, a na razie zobaczmy, w jaki sposób<br />
uzywa sie klipów filmowych w kontekscie<br />
przycisków.<br />
W celu utworzenia klipu filmowego:<br />
1. Z menu Insert wybierz New Symbol.<br />
Otworzy sie okno dialogowe Symbol<br />
Properties.<br />
2. Wpisz jakas opisowa nazwe dla twojego<br />
symbolu klipu filmowego, a nastepnie<br />
w opcji Behavior zaznacz pozycje Movie<br />
Clip i kliknij OK (rys. 4.12). Uruchomiony<br />
zostanie tryb edycji symbolu.<br />
3. Na listwie czasowej klipu filmowego<br />
przygotuj wybrana grafike i animacje<br />
(rys. 4.13).<br />
4. Powróc do glównej sceny. Twój klip<br />
filmowy bedzie przechowywany<br />
w bibliotece w postaci symbolu i bedziesz<br />
mógl wprowadzic go do sceny jako klon<br />
(rys. 4.14).<br />
Wskazówka<br />
• Nowe klony klipów filmowych sa<br />
automatycznie odtwarzane, poczynajac od<br />
pierwszej klatki. Dotyczy to takze klonów<br />
na róznych scenach. Wyobraz sobie, na<br />
przyklad, animacje klipu filmowego<br />
przedstawiajacego wskazówke zegara<br />
wykonujaca pelny obrót, a startujaca na<br />
godzinie dwunastej. Jesli umiescisz klon<br />
tego klipu w scenie 1., a potem bedziesz<br />
chcial kontynuowac odtwarzanie filmu<br />
w scenie 2., Flash przyjmie, ze klon<br />
w scenie 2. jest nowym elementem. To<br />
z kolei sprawi, ze animacja klipu filmowego<br />
zostanie zresetowana i jej odtwarzanie<br />
rozpocznie sie na nowo, ze wskazówka<br />
startujaca na godzinie dwunastej.<br />
Rys. 4.12. Stwórz nowy symbol klipu<br />
filmowego przez nadanie mu nazwy (Name)<br />
i okreslenie zachowania (Behavior)<br />
Rys. 4.13. Symbol klipu filmowego<br />
przedstawiajacego kregi na wodzie zawiera<br />
sekwencje animacji owalu, powiekszajacego<br />
sie i stopniowo znikajacego<br />
Rys. 4.14. Wprowadz klon symbolu klipu<br />
filmowego na scene, przeciagajac go<br />
z biblioteki<br />
98
Zaawansowane przyciski i interakcja z uzytkownikiem<br />
W celu<br />
utworzenia animowanego przycisku:<br />
1. Przygotuj symbol klipu filmowego,<br />
zawierajacy animacje w sposób opisany<br />
w poprzednim cwiczeniu.<br />
2. Utwórz symbol przycisku i zdefiniuj cztery<br />
ujecia kluczowe odpowiadajace stanom Up,<br />
Over, Down i Hit (rys. 4.15).<br />
3. W trybie edycji symbolu wybierz dla<br />
twojego przycisku którys ze stanów Up,<br />
Over lub Down, w zaleznosci od tego,<br />
kiedy ma byc odtwarzana animacja.<br />
Rys. 4.15. Prosty symbol przycisku z owalami<br />
umieszczonymi we wszystkich czterech ujeciach<br />
kluczowych<br />
Klon klipu filmowego a klon symbolu graficznego<br />
Co odróznia klon klipu filmowego od klonu<br />
symbolu graficznego? Odpowiedz znajdziesz<br />
po utworzeniu tej samej animacji jednoczesnie<br />
w symbolu klipu filmowego oraz symbolu<br />
graficznym, a nastepnie umieszczeniu obydwu<br />
klonów na scenie. Klon symbolu graficznego<br />
odtwarza zawarta w nim animacje w glównym<br />
srodowisku Flasha, wyswietlajac tyle klatek,<br />
ile jest aktualnie dostepnych na glównej listwie<br />
czasowej. Przykladowo, jesli symbol graficzny<br />
zawiera animacje dziesiecioklatkowa, a jego<br />
klon zajmuje cztery klatki na glównej listwie<br />
czasowej, to bedziesz mógl obejrzec jedynie<br />
cztery klatki animacji.<br />
Natomiast klipy filmowe nie funkcjonuja<br />
bezposrednio w srodowisku Flasha. Zeby<br />
zobaczyc je w dzialaniu, trzeba wczesniej<br />
wyeksportowac je do formatu SWF.<br />
W wyniku tego Flash bedzie odtwarzal klon<br />
klipu filmowego bez przerwy, niezaleznie<br />
od liczby klatek zajmowanych przez klon,<br />
a nawet po zakonczeniu odtwarzania<br />
samego filmu.<br />
Przyciski i symbol klipu filmowego<br />
99
Rozdzial 4.<br />
Przyciski i symbol klipu filmowego<br />
4. Umiesc na scenie klon twojego symbolu<br />
klipu filmowego (rys. 4.16).<br />
5. Wróc do glównej listwy czasowej<br />
i przeciagnij klon przycisku na scene.<br />
6. Z menu Control wybierz Test Movie.<br />
Animacja klipu filmowego bedzie<br />
odtwarzana nieprzerwanie po wskazaniu<br />
kursorem myszy utworzonego przycisku<br />
(rys. 4.17).<br />
Wskazówka<br />
• Cykliczne odtwarzanie klipu filmowego<br />
mozna przerwac po umieszczeniu akcji<br />
stop w ostatnim ujeciu kluczowym jego<br />
symbolu. Klipy filmowe posiadaja<br />
niezalezne listwy czasowe, dlatego poddaja<br />
sie dzialaniu akcji kontrolujacych ujecia.<br />
Z drugiej strony, symbole graficzne nie<br />
maja tej wlasciwosci.<br />
Rys. 4.16. Stan Over symbolu przycisku.<br />
Umiesc klon klipu filmowego,<br />
przedstawiajacego kregi na wodzie,<br />
wlasnie w tym ujeciu kluczowym, dzieki<br />
czemu animacja bedzie odtwarzana za<br />
kazdym razem, kiedy wskaznik myszy<br />
znajdzie sie nad przyciskiem<br />
Rys. 4.17. Ostateczna postac animowanego<br />
przycisku. Po wskazaniu przycisku mysza –<br />
rozpoczyna sie odtwarzanie klipu filmowego,<br />
przedstawiajacego rozchodzace sie kregi na<br />
wodzie<br />
100
Zaawansowane przyciski i interakcja z uzytkownikiem<br />
Rys. 4.18. Typowe przyklady menu rozwijanych:<br />
menu File w systemie Mac OS (po lewej) oraz<br />
menu Web w przegladarce Netscape Navigator<br />
(po prawej)<br />
Rys. 4.19. Podstawowy przycisk ze<br />
zdefiniowanymi czterema ujeciami kluczowymi<br />
Pierwsze ujecie<br />
kluczowe<br />
Drugie ujecie<br />
kluczowe<br />
Rys. 4.20. Listwa czasowa klipu filmowego<br />
z menu rozwijanym zawiera dwa ujecia kluczowe,<br />
jedno w klatce pierwszej, drugie w klatce trzeciej<br />
Zlozone przyciski<br />
Kombinacje niewidzialnych przycisków,<br />
przycisków zawierajacych animowane<br />
sekwencje, czy w pelni animowanych<br />
przycisków, jak równiez klipów filmowych<br />
mozna wykorzystac do przygotowania<br />
zlozonych przycisków, na przyklad menu<br />
rozwijanych. Menu rozwijane jest rodzajem<br />
przycisku, powszechnie spotykanym<br />
w komputerowych systemach operacyjnych<br />
i interfejsach witryn sieciowych,<br />
umozliwiajacym prezentowanie wielu<br />
mozliwosci wyboru pod pojedynczym<br />
naglówkiem. W dzialaniu wyglada to tak, ze<br />
jeden przycisk rozwija sie w liste zawierajaca<br />
wiecej przycisków, a nastepnie zwija do<br />
postaci jednego przycisku po dokonaniu<br />
wyboru (rys. 4.18).<br />
Budujac wlasne menu rozwijane, zaczynamy<br />
od umieszczenia przycisków w klipie<br />
filmowym. Przyciski okreslaja, które klatki<br />
z listwy czasowej klipu beda odtwarzane.<br />
Rozwijanie i zwijanie menu tez jest okreslane<br />
w klipie filmowym. Po umieszczeniu klonu<br />
klipu na scenie zyskujesz dostep zarówno do<br />
stanu rozwinietego, jak i zwinietego, niezaleznie<br />
od tego, co dzieje sie w twoim glównym filmie.<br />
W celu utworzenia<br />
prostego menu rozwijanego:<br />
1. Przygotuj symbol przycisku, który posluzy<br />
za przycisk naglówka menu, oraz przyciski<br />
wyboru na rozwijanej liscie. Wstaw<br />
wypelniony prostokat do ujec kluczowych<br />
Up, Over, Down i Hit (rys. 4.19).<br />
2. Utwórz nowy symbol klipu filmowego,<br />
a nastepnie przejdz do trybu edycji tego<br />
symbolu.<br />
3. Wstaw nowe ujecie kluczowe w dalszym<br />
punkcie na listwie czasowej klipu<br />
filmowego. Masz teraz dwa ujecia<br />
kluczowe. Pierwsze z nich bedzie zawierac<br />
widok twojego menu w stanie zwinietym,<br />
drugie – w stanie rozwinietym (rys. 4.20).<br />
Zlozone przyciski<br />
101
Rozdzial 4.<br />
Zlozone przyciski<br />
4. Przeciagnij jeden klon twojego symbolu<br />
przycisku do pierwszego ujecia kluczowego.<br />
Umiesc nad klonem tekst opisujacy<br />
przycisk. Utworzyles wlasnie widok menu<br />
w stanie zwinietym.<br />
5. Przeciagnij nastepne klony symbolu<br />
przycisku do drugiego ujecia kluczowego<br />
i wyrównaj je wzgledem siebie. Umiesc nad<br />
kazdym z nich tekst opisujacy dzialanie<br />
przycisku. W ten sposób utworzyles widok<br />
twojego menu w stanie rozwinietym<br />
(rys. 4.21).<br />
6. Dodaj nowa warstwe i wprowadz etykiety<br />
dla oznaczenia ujec kluczowych z menu<br />
rozwinietym oraz zwinietym. Na palecie<br />
Frame, w polu Label, wpisz collapsed<br />
dla pierwszego ujecia kluczowego<br />
i expanded dla drugiego ujecia<br />
kluczowego. Wprowadzenie etykiet pozwala<br />
wyraznie rozróznic poszczególne stany klipu<br />
filmowego i uzyc akcji gotoAndStop na<br />
etykietach ujec, a nie na ich numerach.<br />
7. Zaznacz klon w pierwszym ujeciu<br />
kluczowym. Na palecie akcji wybierz<br />
Basic Actions/Go To.<br />
8. Z menu rozwijanego Type wybierz Frame<br />
Label. W polu Frame wpisz expanded.<br />
Usun zaznaczenie z pola wyboru Go to and<br />
Play (rys. 4.22).<br />
9. Zaznacz wszystkie klony w ostatnim ujeciu<br />
kluczowym. Na palecie akcji wybierz<br />
Basic Actions/Go To.<br />
10. Z menu rozwijanego Type wybierz Frame<br />
Label. W polu Frame wpisz collapsed.<br />
Usun zaznaczenie z pola wyboru Go to and<br />
Play (rys. 4.23).<br />
Rys. 4.21. Dwa stany twojego menu<br />
rozwijanego. Stan wyjsciowy (menu zwiniete)<br />
jest umieszczony w pierwszym ujeciu<br />
kluczowym (po lewej); menu w stanie<br />
rozwinietym znajduje sie w drugim ujeciu<br />
kluczowym (po prawej). Menu rozwiniete<br />
zawiera cztery klony przycisków,<br />
reprezentujace mozliwosci wyboru<br />
Rys. 4.22. Ten przycisk nakazuje<br />
przegladarce rozpoczecie odtwarzania<br />
klatki o nazwie expanded i zatrzymanie<br />
po odtworzeniu tej klatki<br />
Rys. 4.23. Ten przycisk nakazuje<br />
przegladarce rozpoczecie odtwarzania<br />
klatki o nazwie collapsed i zatrzymanie<br />
po odtworzeniu tej klatki<br />
102
Zaawansowane przyciski i interakcja z uzytkownikiem<br />
Rys. 4.24. Ostateczny wyglad listwy czasowej<br />
klipu filmowego z menu rozwijanym. Akcja stop<br />
przypisana jest pierwszej klatce w górnej<br />
warstwie<br />
Klip filmowy w ujeciu<br />
kluczowym zawierajacym<br />
widok menu w stanie<br />
poczatkowym (zwinietym)<br />
Akcja stop<br />
Klip filmowy w ujeciu<br />
kluczowym zawierajacym<br />
widok menu w stanie<br />
rozwinietym<br />
Rys. 4.25. Obydwa stany menu rozwijanego<br />
funkcjonuja niezaleznie od glównej listwy<br />
czasowej<br />
11. Dodaj trzecia warstwe i w pierwszym ujeciu<br />
kluczowym wprowadz akcje stop. Gdybys<br />
nie przypisal tej akcji w pierwszej klatce<br />
twojego klipu filmowego, zobaczylbys, jak<br />
menu nieustannie otwiera sie i zamyka, co<br />
powodowalaby cyklicznosc odtwarzania<br />
klipów filmowych. Akcja stop powoduje,<br />
ze klip filmowy zatrzymuje sie na klatce 1.<br />
tak dlugo, az klikniesz przycisk menu<br />
(rys. 4.24).<br />
12. Powróc do listwy czasowej glównego filmu<br />
i umiesc na scenie klon twojego klipu<br />
filmowego.<br />
13. Z menu Control wybierz Test Movie<br />
i zobacz, jak dziala utworzone menu<br />
rozwijane. Okazuje sie, ze kiedy wcisniesz,<br />
a potem zwolnisz pierwszy przycisk,<br />
pojawia sie przyciski wyboru. Dzieje sie tak,<br />
poniewaz nakazujesz niejako przegladarce<br />
rozpoczecie odtwarzania ujecia kluczowego,<br />
zawierajacego menu w stanie rozwinietym.<br />
Po kliknieciu i zwolnieniu któregos<br />
z przycisków wyboru, przyciski te znikaja<br />
i wracasz do ujecia kluczowego na listwie<br />
czasowej klipu filmowego, zawierajacego<br />
menu w stanie zwinietym. Wszystko to<br />
dzieje sie niezaleznie od listwy czasowej<br />
glównego filmu, gdzie rezyduje klon<br />
przygotowanego przez ciebie klipu<br />
filmowego (rys. 4.25). Tak wiec udalo ci sie<br />
zaprojektowac zlozony przycisk, pelniacy<br />
role menu rozwijanego, które jednak nie robi<br />
nic (poza modyfikacja swojego wygladu).<br />
W rozdziale 5. nauczysz sie przypisywac<br />
przyciskom funkcje komunikacyjne, tym<br />
samym uzyskujac mozliwosc tworzenia<br />
zlozonych systemów nawigacji.<br />
Zlozone przyciski<br />
103
Rozdzial 4.<br />
Zlozone przyciski<br />
Kiedy zrozumiesz koncepcje funkcjonowania<br />
prostych menu rozwijanych, bedziesz mógl<br />
przejsc do tworzenia ich bardziej wyszukanych<br />
wersji, zawierajacych animacje przedstawiajace<br />
przejscie od stanu poczatkowego do stanu<br />
rozwiniecia. Móglbys na przyklad sprawic, zeby<br />
zamiast pojawiajacego sie nagle menu, przyciski<br />
ladnie rozwijaly sie w dól.<br />
W celu utworzenia<br />
animowanego menu rozwijanego:<br />
1. Przygotuj proste menu rozwijane w sposób<br />
opisany w poprzednim cwiczeniu.<br />
2. Przejdz do trybu edycji symbolu twojego<br />
klipu filmowego.<br />
3. W miejsce akcji gotoAndStop dla klonu<br />
przycisku w pierwszym ujeciu kluczowym<br />
przypisz akcje:<br />
gotoAndPlay ("expanded");<br />
Spowoduje to odtworzenie ujecia o nazwie<br />
expanded (rys. 4.26).<br />
4. Utwórz sekwencje animacji klonów<br />
przycisku w ostatnim ujeciu kluczowym<br />
(rys. 4.27).<br />
5. Wstaw ujecie kluczowe do ostatniej klatki<br />
klipu filmowego i przypisz akcje stop.<br />
6. Wróc do listwy czasowej glównego filmu<br />
i umiesc na scenie klon twojego klipu<br />
filmowego.<br />
7. Z menu Control wybierz Test Movie<br />
i przekonaj sie, jak dziala twoje menu<br />
rozwijane. Po kliknieciu i zwolnieniu<br />
pierwszego przycisku nastapi odtworzenie<br />
ujecia z klipu filmowego o etykiecie<br />
expanded, zawierajacego sekwencje<br />
animacji ruchu przycisków wyboru.<br />
Zaznacz to pole, zeby zmienic akcje<br />
gotoAndStop na akcje gotoAndPlay<br />
Rys. 4.26. Akcje przypisane pierwszemu<br />
przyciskowi w ujeciu kluczowym collapsed<br />
menu rozwijanego<br />
Sekwencja automatycznej animacji ruchu<br />
Rys. 4.27. Klip filmowy z menu rozwijanym.<br />
Przyciski pojawiajace sie po rozwinieciu<br />
menu umieszczono w oddzielnych warstwach,<br />
dzieki czemu mozna je animowac<br />
104
Zaawansowane przyciski i interakcja z uzytkownikiem<br />
Tabela 4.1. Opis zdarzen myszy<br />
Zdarzenie myszy Wyzwalane, gdy:<br />
on (press)<br />
Wskaznik jest w obrebie<br />
obszaru aktywnego (Hit)<br />
i wcisnieto klawisz myszy.<br />
on (release) Wskaznik jest w obrebie<br />
obszaru aktywnego, a klawisz<br />
myszy zostal wcisniety<br />
i zwolniony.<br />
on (release<br />
Outside)<br />
on (roll<br />
Over)<br />
Wskaznik jest w obrebie<br />
obszaru aktywnego, a klawisz<br />
myszy zostal wcisniety<br />
i zwolniony poza obszarem<br />
aktywnym.<br />
Wskaznik jest przesuwany<br />
w obrebie obszaru aktywnego.<br />
on (rollOut) Wskaznik jest przesuwany<br />
z obszaru aktywnego poza<br />
ten obszar.<br />
on (drag<br />
Over)<br />
Wskaznik znajduje sie<br />
w obrebie obszaru aktywnego<br />
i wcisnieto klawisz myszy.<br />
Nastepnie wskaznik jest<br />
przesuwany poza obszar<br />
aktywny i potem z powrotem<br />
nad ten obszar, przy czym<br />
klawisz myszy jest ciagle<br />
wcisniety.<br />
on (dragOut) Wskaznik znajduje sie<br />
w obrebie obszaru aktywnego<br />
i wcisniety jest klawisz myszy.<br />
Nastepnie wskaznik zostaje<br />
przesuniety poza obszar<br />
aktywny, przy czym klawisz<br />
myszy pozostaje wcisniety.<br />
Rys. 4.28. Blok edycji parametrów w przypadku<br />
akcji on zawiera liste pól wyboru róznych zdarzen<br />
Manipulatory zdarzen<br />
Manipulatory zdarzen to akcje, które<br />
odpowiadaja za reakcje na pewne czynnosci,<br />
nazywane zdarzeniami, wykonywane przez<br />
uzytkownika filmu Flasha. Naciskanie<br />
i zwalnianie klawisza myszy, wciskanie<br />
klawisza na klawiaturze – to przyklady zdarzen.<br />
Manipulatory zdarzen wykrywaja, czy nastapilo<br />
zdarzenie, a jezeli tak, to wykonuja<br />
w odpowiedzi okreslona akcje. Na przyklad,<br />
w poprzednich cwiczeniach przypis ywales<br />
przyciskom akcje, które pozwalaly wykryc<br />
zdarzenie zwolnienia przycisku myszy.<br />
W odpowiedzi, Flash odtwarzal ujecie kluczowe<br />
przedstawiajace zwiniete lub rozwiniete menu.<br />
Zdarzeniami myszy sa wszystkie zdarzenia<br />
zwiazane z ruchem wskaznika i naciskaniem<br />
klawiszy urzadzenia. Gdy przypisujesz akcje<br />
do klonu przycisku, Flash automatycznie<br />
umieszcza ja w nawiasach i dodaje domyslne<br />
zdarzenie myszy Release:<br />
on (release) {<br />
}<br />
Zdarzenie Release jest typowym sposobem na<br />
interaktywne wykorzystanie myszy. Dowolna<br />
akcja ujeta w klamrach bedzie wykonana, gdy<br />
wskaznik znajduje sie w obrebie aktywnego<br />
obszaru symbolu przycisku (stan Hit) – dopiero<br />
po zwolnieniu klawisza myszy. Dzieki temu<br />
uzytkownik moze zmienic zdanie i zwolnic<br />
klawisz w „bezpiecznym” miejscu, poza<br />
obszarem aktywnym przycisku, nawet jesli<br />
zdazyl juz go kliknac. Inne typy zdarzen myszy<br />
pozwalaja w jeszcze wiekszym zakresie<br />
projektowac interaktywne funkcje myszy.<br />
Wymieniono je wszystkie w tabeli 4.1.<br />
W celu wybrania zdarzenia myszy:<br />
1. Majac otwarta palete akcji w trybie Normal<br />
Mode, wybierz Actions/on. W bloku edycji<br />
parametrów pojawia sie rózne typy zdarzen<br />
wraz z polami wyboru (rys. 4.28).<br />
2. Zaznacz pole wyboru przy odpowiednim<br />
zdarzeniu, w zaleznosci od tego, jakiej akcji<br />
potrzebujesz.<br />
105
Rozdzial 4.<br />
Manipulatory zdarzen<br />
3. Wybierz akcje stanowiaca odpowiedz na<br />
wybrane zdarzenie.<br />
4. Z menu Control wybierz Test Movie<br />
i sprawdz dzialanie poszczególnych zdarzen<br />
myszy (rys. 4.29).<br />
Wskazówki<br />
• Dla wszystkich zdarzen myszy –<br />
z wyjatkiem Release – musisz wybrac<br />
Control/Test Movie, jesli chcesz zobaczyc<br />
dzialanie klonu przycisku. Zdarzenia te nie<br />
funkcjonuja w srodowisku edycyjnym, jesli<br />
wybierzesz Control/Enable Simple<br />
Buttons.<br />
• Mozliwe jest przypisanie pojedynczej akcji<br />
on wiecej niz jednego zdarzenia myszy. Dla<br />
przykladu: akcja on (press, release)<br />
wykryje moment, w którym klawisz myszy<br />
zostaje wcisniety, oraz moment, kiedy<br />
klawisz zostaje zwolniony, a takze wyzwoli<br />
akcje zapisana klamrach w przypadku<br />
wystapienia jednego z tych zdarzen<br />
(rys. 4.30).<br />
• Jesli dla jednego klonu przycisku chcesz<br />
okreslic dwa zdarzenia o róznych<br />
konsekwencjach, musisz utworzyc oddzielne<br />
wyrazenia zawierajace akcje on.<br />
Przykladowo, gdy zdarzenie Roll Over ma<br />
rozpoczynac, a zdarzenie rollOut konczyc<br />
odtwarzanie twojego filmu, to zapis akcji<br />
powinien wygladac tak:<br />
on (rollOver) {<br />
}<br />
play ();<br />
on (rollOut) {<br />
}<br />
stop ();<br />
Rys. 4.29. Menu rozwijane ze zdarzeniem<br />
Roll Over. Kiedy poruszysz wskaznik nad<br />
przyciskiem, menu zostanie natychmiast<br />
rozwiniete<br />
Rys. 4.30. W przypadku wykrycia zdarzenia<br />
Press lub Release, wykonana zostanie akcja<br />
play<br />
106
Zaawansowane przyciski i interakcja z uzytkownikiem<br />
To ujecie kluczowe powinno zawierac<br />
wylacznie grafike lub klipy filmowe<br />
• Nie myl zdarzenia myszy rollOver ze<br />
stanem Over symbolu przycisku.<br />
Oczywiscie dzialanie obydwu tych<br />
elementów obejmuje wykrycie momentu,<br />
w którym wskaznik znajdzie sie w obrebie<br />
obszaru aktywnego. Jednak stan Over<br />
opisuje wyglad przycisku, gdy wskaznik<br />
znajduje sie nad nim, natomiast zdarzenie<br />
rollOver przypisuje akcje w przypadku<br />
takiego ustawienia wskaznika. Tak wiec<br />
ujecia kluczowe symbolu przycisku<br />
definiuja jego wyglad, podczas gdy akcja<br />
zdarzenia myszy okresla, co przycisk<br />
powoduje (rys. 4.31).<br />
Rys. 4.31. Stan Over symbolu przycisku (u góry)<br />
definiuje jego wyglad w momencie, gdy wskaznik<br />
znajdzie sie w obrebie obszaru aktywnego.<br />
Manipulator zdarzenia Roll Over, przypisany<br />
do klonu (u dolu), okresla dzialanie przycisku<br />
gdy wskaznik jest w obrebie obszaru aktywnego<br />
Manipulatory zdarzen<br />
107
Rozdzial 4.<br />
Sposoby funkcjonowania przycisków<br />
Sposoby<br />
funkcjonowania przycisków<br />
Klon przycisku moze byc zdefiniowany za<br />
pomoca palety Instance na jeden z dwóch<br />
sposobów: Track as Button (traktuj jako<br />
przycisk) lub Track as Menu Item (traktuj jako<br />
element menu) (rys. 4.32). Wybór wlasciwego<br />
sposobu decyduje o tym, czy klon przycisku<br />
otrzyma zdarzenie nawet po tym, gdy nastapilo<br />
ono dla innego klonu. Na taka sytuacje zezwala<br />
jedynie druga opcja, czyli Track as Menu<br />
Item. Opcja domyslna jest jednak Track<br />
as Button i okresla ona typowe zachowanie<br />
przycisków, czyli powoduje, ze jedno zdarzenie<br />
myszy oddzialuje na jeden klon przycisku.<br />
Bardziej zlozone przypadki, w rodzaju menu<br />
rozwijanych, wymagaja wspólpracy wielu<br />
klonów jednoczesnie. Wyobraz sobie na<br />
przyklad, ze wciskasz i przytrzymujesz przycisk<br />
menu, chcac zobaczyc mozliwosci wyboru,<br />
nastepnie wskazujesz wybrana pozycje i wtedy<br />
zwalniasz przycisk. Flash musi wiec rozpoznac<br />
zdarzenie Release (zwolnienie) w menu<br />
rozwinietym, chociaz zdarzenie Press<br />
(wcisniecie) wystapilo dla innego klonu<br />
przycisku (w zasadzie takze dla innej klatki),<br />
przedstawiajacego menu w postaci zwinietej.<br />
Wybór opcji Track as Menu Item pozwala<br />
zaakceptowac te zdarzenia i jednoczesnie daje<br />
ci swobode w tworzeniu róznych kombinacji<br />
zdarzen myszy.<br />
W celu<br />
wybrania dla zdarzenia Press<br />
opcji Track as Menu Item:<br />
1. Utwórz menu rozwijane w sposób opisany<br />
w jednym z poprzednich cwiczen,<br />
a nastepnie przejdz do trybu edycji symbolu<br />
klipu filmowego.<br />
2. Zaznacz klon przycisku w pierwszym ujeciu<br />
kluczowym i zmien zdarzenie myszy na<br />
press (rys. 4.33).<br />
Rys. 4.32. Okreslanie sposobu<br />
funkcjonowania przycisku w oknie<br />
palety Instance<br />
Rys. 4.33. Przyciskowi menu zwinietego<br />
przypisujemy zdarzenie Press<br />
108
Zaawansowane przyciski i interakcja z uzytkownikiem<br />
3. Zaznacz wszystkie klony przycisków<br />
w ujeciu kluczowym odpowiadajacym menu<br />
rozwinietemu i w polu Options palety<br />
Instance wybierz Track as Menu Item<br />
(rys. 4.34).<br />
Teraz klony przycisku w menu rozwinietym<br />
beda akceptowac zdarzenie release<br />
po tym, jak zdarzenie press wystapi<br />
w odniesieniu do innego klonu.<br />
4. Wróc do glównej listwy czasowej<br />
i przetestuj swój film. Teraz musisz<br />
nacisnac klawisz myszy i przytrzymac, jesli<br />
chcesz, by menu pozostalo otwarte.<br />
Rys. 4.34. Wszystkie klony przycisku dla menu<br />
rozwinietego musza miec ustawiona opcje Track<br />
as Menu Item. Dotyczy to przycisków button 1 do<br />
button 4 w ujeciach kluczowych 9. i 12<br />
Wskazówka<br />
• Jesli ustalisz dla powyzszego menu<br />
rozwijanego opcje Track as Menu Item,<br />
klony przycisków przyjmuja stan Down,<br />
kiedy przesuwasz po nich wskaznik myszy.<br />
Dzieje sie tak dlatego, ze przycisk myszy<br />
zostal co prawda wcisniety, jednak zdarzenie<br />
to nastapilo wczesniej, w odniesieniu do<br />
innego klonu.<br />
Sposoby funkcjonowania przycisków<br />
109
Rozdzial 4.<br />
Sposoby funkcjonowania przycisków<br />
Spróbujmy teraz udoskonalic funkcjonowanie<br />
menu rozwijanego, wprowadzajac zdarzenie<br />
myszy Drag Over, dzieki czemu menu zostanie<br />
zwiniete takze w przypadku, gdy nie dokona sie<br />
wyboru zadnego z elementów. Wazne jest<br />
bowiem, aby menu widoczne bylo w postaci<br />
rozwinietej jedynie w czasie, gdy uzytkownik<br />
dokonuje wyboru opcji menu.<br />
W celu<br />
wybrania dla zdarzenia Drag Over<br />
opcji Track as Menu Item:<br />
1. Kontynuujac prace nad menu rozwijanym<br />
skonstruowanym w poprzednich<br />
cwiczeniach, przejdz do trybu edycji<br />
symbolu klipu filmowego.<br />
2. Dodaj nowa warstwe, umieszczajac ja<br />
ponizej istniejacych warstw.<br />
3. W nowej warstwie utwórz niewidzialny<br />
przycisk, a nastepnie umiesc jego klon<br />
w nowym ujeciu kluczowym,<br />
odpowiadajacym ujeciu kluczowemu<br />
przedstawiajacemu menu rozwiniete. Twój<br />
niewidzialny przycisk powinien byc nieco<br />
wiekszy niz rozwiniete menu (rys. 4.35).<br />
4. Zaznacz klon niewidzialnego przycisku i na<br />
palecie Instance wybierz opcje Track<br />
as Menu Item.<br />
5. Korzystajac z palety akcji, przypisz<br />
nastepujaca akcje:<br />
on (dragOver) {<br />
}<br />
gotoAndStop ("collapsed");<br />
6. Wróc do glównej listwy czasowej<br />
i przetestuj swój film. Klon niewidzialnego<br />
przycisku, umieszczony pod rozwinietym<br />
menu, wykryje moment, w którym wskaznik<br />
myszy opuszcza obszar któregos<br />
z pozostalych klonów przycisków, a wtedy<br />
odtwarzanie klipu filmowego zostanie<br />
cofniete do klatki 1., zwijajac tym samym<br />
menu.<br />
Rozwiniete menu<br />
Niewidzialny<br />
przycisk<br />
Rys. 4.35. Kiedy wskaznik myszy opuszcza<br />
obszar jednego z przycisków widocznych<br />
w rozwinietym menu, jest jednoczesnie<br />
przesuwany nad obszarem niewidzialnego<br />
przycisku rezydujacego w dolnej warstwie.<br />
W tym momencie jest wykrywane zdarzenie<br />
myszy Drag Over i rozpoczyna sie<br />
odtwarzanie klatki z etykieta collapsed<br />
110
Zaawansowane przyciski i interakcja z uzytkownikiem<br />
Rys. 4.36. Blok edycji parametrów dla akcji<br />
on zawiera m. in. zdarzenie Key Press<br />
Klon niewidzialnego<br />
przycisku<br />
Scena<br />
Rys. 4.37. Klon przycisku dla zdarzenia<br />
Key Press umieszczamy tuz obok sceny<br />
Informacje<br />
wprowadzane z klawiatury<br />
Klawiatura jest równie waznym elementem<br />
w funkcjonowaniu interfejsu, co mysz, tak wiec<br />
Flash pozwala takze na detekcje zdarzen<br />
wyzwalanych wcisnieciem pojedynczego<br />
klawisza. Stwarza to mozliwosc projektowania<br />
systemów nawigacji bazujacych na klawiaturze<br />
(korzystajacych np. z klawiszy strza lek lub<br />
klawiatury numerycznej) lub skrótów<br />
klawiaturowych powielajacych schematy<br />
nawigacyjne oparte na myszy. Co wiecej,<br />
mozliwe jest biezace kontrolowanie tekstu<br />
wprowadzanego przez uzytkownika w pustych<br />
polach okna filmu, chociaz takie pola tekstowe<br />
nie sa zwykle powiazane ze zdarzeniami<br />
i wymagaja osobnego omówienia (patrz –<br />
rozdzial 10.). Teraz zajmiemy sie<br />
zastosowaniem pojedynczych kombinacji<br />
klawiszy, wyzwalajacych okreslone dzialania<br />
przy uzyciu zdarzenia Key Press oraz obiektu<br />
Key.<br />
Zdarzenia klawiaturowe<br />
Zdarzenie Key Press stanowi opcje dostepna<br />
w bloku edycji parametrów dla akcji on<br />
(rys. 4.36). Zeby skorzystac ze zdarzenia Key<br />
Press, musisz wczesniej utworzyc symbol<br />
przycisku i umiescic jego klon na listwie<br />
czasowej. Klon symbolu przycisku zachowuje<br />
sie jak pojemnik na zdarzenia i skojarzone<br />
z nimi akcje, powinienes wiec uczynic przycisk<br />
niewidzialnym lub tez umiescic go poza scena.<br />
Nie bedzie wtedy widoczny w ostatecznym<br />
pliku wyeksportowanym do formatu SWF.<br />
W celu<br />
utworzenia zdarzenia Key Press:<br />
1. Utwórz symbol niewidzialnego przycisku<br />
w sposób opisany wczesniej w tym<br />
rozdziale.<br />
2. Umiesc klon przycisku na scenie lub zaraz<br />
obok sceny – w pierwszym ujeciu<br />
kluczowym (rys. 4.37).<br />
Informacje wprowadzane z klawiatury<br />
111
Rozdzial 4.<br />
Informacje wprowadzane z klawiatury<br />
3. Zaznacz klon i otwórz palete akcji.<br />
4. Wybierz Actions/on. W oknie skryptu<br />
pojawi sie manipulator zdarzenia on<br />
(release).<br />
5. W bloku edycji parametrów usun<br />
zaznaczenie opcji Release i zaznacz<br />
Key Press.<br />
6. Wybierz specyficzny znak lub symbol<br />
z klawiatury i po prostu wpisz go w pustym<br />
polu obok pola wyboru Key Press<br />
(rys. 4.38).<br />
7. Wybierz akcje wyzwalana po wykryciu<br />
zdarzenia Key Press (rys. 4.39).<br />
8. Z menu Control wybierz Test Movie<br />
i zobacz, jak odpowiada zdarzenie Key<br />
Press (rys. 4.40).<br />
Rys. 4.38. Pole Key Press pozwala<br />
wprowadzic pojedynczy znak – w tym<br />
przypadku strzalke w prawo (Right)<br />
Rys. 4.39. Zaznaczamy akcje Go To i w polu<br />
Type wybieramy Next Frame<br />
Akcja Stop<br />
Obrazki umieszczone na scenie<br />
w oddzielnych ujeciach kluczowych<br />
Klon niewidzialnego przycisku z przypisanym<br />
zdarzeniem klawiaturowym<br />
Rys. 4.40. Ten film zawiera cztery<br />
wyswietlane na scenie – jeden po drugim –<br />
obrazy. Zdarzenie on (keyPress ””)<br />
z odpowiedzia w postaci opcji nextFrame<br />
umozliwia przejscie do nastepnego obrazu<br />
po wcisnieciu klawisza prawej strzalki<br />
112
Zaawansowane przyciski i interakcja z uzytkownikiem<br />
Rys. 4.41. Nowa akcja on zostala dodana zaraz<br />
po klamrze zamykajacej pierwsza akcje on<br />
Rys. 4.42. Kolejne zdarzenie Key Press wymaga<br />
dwóch oddzielnych wyrazen dla akcji on<br />
Klon przycisku<br />
Rys. 4.43. Klawisz strzalki w prawo (Right)<br />
zostal przypisany do dwóch zdarzen, on (release)<br />
oraz on (keyPress ””). Obydwa<br />
zdarzenia powoduja przejscie do odtwarzania<br />
kolejnej klatki<br />
• Klawisz Escape oraz klawisze funkcyjne<br />
nie sa odpowiednie do przypisywania im<br />
zdarzen.<br />
• Zdarzenie Key Press nie rozpoznaje<br />
kombinacji klawiszy, jakkolwiek Flash<br />
odróznia litery wielkie od malych.<br />
W celu<br />
utworzenia zlozonego zdarzenia<br />
Key Press:<br />
1. Zaznacz klon przycisku zawierajacy<br />
pierwsze zdarzenie Key Press.<br />
2. Otwórz palete Object Actions.<br />
3. Dodaj oddzielna akcje on (rys. 4.41).<br />
4. W bloku edycji parametrów – dla drugiej<br />
akcji on zmien zdarzenie na Key Press<br />
i wybierz inny klawisz.<br />
5. Dodaj kolejna akcje wyzwalana po wykryciu<br />
drugiego zdarzenia Key Press (rys. 4.42).<br />
Chociaz zlozone zdarzenia klawiaturowe<br />
moga byc skojarzone z jednym klonem<br />
przycisku, kazde zdarzenie wymaga<br />
oddzielnego wyrazenia.<br />
W celu<br />
polaczenia zdarzenia Key Press<br />
ze zdarzeniem myszy:<br />
1. Utwórz symbol przycisku i zdefiniuj jego<br />
stany Up, Over, Down i Hit.<br />
2. Umiesc na scenie klon przycisku.<br />
3. Zaznacz klon i otwórz palete akcji.<br />
4. Wybierz Actions/on.<br />
5. W bloku edycji parametrów dla akcji on<br />
zaznacz pola wyboru Release oraz<br />
Key Press.<br />
6. Wybierz akcje dla manipulatora zdarzenia<br />
i przetestuj swój film (rys. 4.43). Teraz<br />
klikniecie mysza lub wcisniecie klawisza<br />
na klawiaturze spowoduje, ze film wykona<br />
wybrana przez ciebie akcje.<br />
Wskazówki<br />
• Kiedy twój film Flasha jest odtwarzany<br />
w przegladarce, musisz najpierw kliknac<br />
okno filmu, zanim bedzie moglo byc<br />
wykryte jakiekolwiek zdarzenie<br />
klawiaturowe, a jest to konieczne z uwagi<br />
na ustalenie aktywnego okna.<br />
Informacje wprowadzane z klawiatury<br />
113
Rozdzial 4.<br />
Obiekt Key<br />
Obiekt Key<br />
Obiekt Key stanowi klase w jezyku<br />
ActionScript, odpowiedzialna za detekcje<br />
klawiszy wciskanych na klawiaturze (rys. 4.44).<br />
Z rozdzialu 3. dowiedziales sie, ze aby móc<br />
uzyc klasy, trzeba najpierw utworzyc jej klon.<br />
Jednakze obiekt Key jest jednym<br />
z podstawowych obiektów, niepotrzebujacych<br />
funkcji konstruktora do przygotowania klonu<br />
przed uzyciem tego obiektu.<br />
Obiekt Key posiada metody pozwalajace<br />
okreslic ostatnio wcisniety klawisz lub<br />
sprawdzic, czy konkretny klawisz zostal<br />
wcisniety. Najczesciej uzywana jest metoda<br />
isDown, której argumentem jest specyficzny<br />
klawisz na klawiaturze. Metoda ta sprawdza,<br />
czy klawisz ten zostal wcisniety, a jezeli tak,<br />
to zwraca wartosc prawdy.<br />
Wszystkie klawisze posiadaja we Flashu<br />
odpowiednie oznaczenia cyfrowe, nazywane ich<br />
wartoscia kodowa (dodatek B). Kodów tych<br />
uzywa sie lacznie z metoda isDown do<br />
konstruowania wyrazen warunkowych,<br />
wprowadzajacych interakcje za pomoca<br />
klawiatury. Przykladowo, Key.isDown(32)<br />
zwraca prawde lub falsz, w zaleznosci od tego,<br />
czy wcisnieto klawisz spacji, którego wartosc<br />
kodowa wynosi 32.<br />
Rys. 4.44. Okno narzedzi palety akcji zawiera<br />
metody i wlasciwosci obiektu Key<br />
Dlaczego mialbys uzywac obiektu Key i jego<br />
metod oraz wlasciwosci, zamiast przycisku ze<br />
zdefiniowanym zdarzeniem Key Press?<br />
Wlasciwie jest to sprawa wyboru pomiedzy<br />
wyrafinowaniem a latwoscia w uzyciu<br />
(i upraszczaniem sobie zycia). Obiekt Key jest<br />
znacznie bardziej uzyteczny, niz zdarzenie<br />
klawiaturowe przypisane do klonu przycisku –<br />
z uwagi na mozliwosc konstruowania bardziej<br />
zlozonego kodu dla obiektu Key. Na przyklad,<br />
mozesz sprawdzac kombinacje klawiszy,<br />
wymagajac – przed wykonaniem akcji<br />
stanowiacych odpowiedz – sprawdzenia<br />
prawdziwosci dwóch metod isDown.<br />
Obiekt Key a zdarzenie Key Press<br />
Uzywanie wartosci kodowych klawiszy<br />
daje dostep praktycznie do calej klawiatury.<br />
Takze klawisze funkcyjne i klawisz Escape<br />
posiadaja wartosci kodowe, tak wiec sa<br />
dostepne dla obiektu Key.<br />
Z drugiej strony, zdarzenia Key Press sa<br />
o wiele latwiejsze w uzyciu. Jezeli nie<br />
potrzebujesz w swoim filmie rozbudowanej<br />
interakcji za pomoca klawiatury albo<br />
chcialbys jedynie udostepnic skróty<br />
klawiaturowe, towarzyszace zdarzeniom<br />
myszy, uzywaj raczej akcji on<br />
(keyPress).<br />
114
Zaawansowane przyciski i interakcja z uzytkownikiem<br />
Rys. 4.45. Wyrazenie if zawiera warunek, który<br />
bedzie sprawdzany. W przypadku jego spelnienia<br />
zostanie wykonana akcja ujeta w klamrach<br />
Rys. 4.46. Pole Condition w bloku edycji<br />
parametrów wyrazenia if. Metoda isDown<br />
wymaga podania wartosci kodowej<br />
Rys. 4.47. Wlasciwosc key.SPACE wprowadzono<br />
jako kod klawisza dla metody isDown<br />
Rys. 4.48. Okno skryptu prezentujace odpowiedz<br />
na zdarzenie, polegajace na wcisnieciu klawisza<br />
spacji<br />
Na szczescie nie musisz nieustannie siegac<br />
po nieporeczne kody klawiszy. Najczesciej<br />
uzywane klawisze sa domyslnie przypisane<br />
obiektowi Key jako jego wlasciwosci. Te<br />
wlasciwosci to stale, których mozna uzywac<br />
w miejsce kodów klawiszy. Na przyklad,<br />
wyrazenie Key.isDown(32) jest równowazne<br />
wyrazeniu Key.isDown(Key.SPACE).<br />
Pelna liste metod i wlasciwosci obiektu Key<br />
znajdziesz w dodatku A.<br />
W celu<br />
uzycia metody isDown obiektu Key:<br />
1. Zaznacz pierwsze ujecie kluczowe na listwie<br />
czasowej i otwórz palete akcji w trybie<br />
Normal Mode.<br />
2. Wybierz Actions/if. W oknie skryptu pojawi<br />
sie niedokonczone wyrazenie if, z pustym<br />
polem Condition w bloku edycji<br />
parametrów (rys. 4.45).<br />
3. Zaznacz puste pole Condition w bloku<br />
edycji parametrów.<br />
4. Wybierz Objects/Key/isDown lub<br />
przeciagnij metode isDown do pola<br />
Condition. Metoda isDown pojawi sie<br />
w polu Condition. Dla tej metody wymaga<br />
sie argumentu keyCode (rys. 4.46).<br />
5. Wybierz Objects/Key/SPACE lub<br />
przeciagnij wlasciwosc SPACE do pola<br />
Condition. Wlasciwosc Key.SPACE<br />
pojawi sie jako argument metody isDown<br />
(rys. 4.47).<br />
6. Wybierz akcje stanowiaca odpowiedz dla<br />
tego wyrazenia warunkowego (rys. 4.48).<br />
Obiekt Key<br />
115
Rozdzial 4.<br />
7. Wstaw nowe ujecie kluczowe zaraz za<br />
pierwszym, a nastepnie przypisz akcje<br />
kontrolujaca ujecia:<br />
gotoAndPlay(1).<br />
Drugie ujecie kluczowe wraca do<br />
pierwszego, a dzieje sie to w petli, wiec<br />
warunek w wyrazeniu jest nieustannie<br />
sprawdzany. Jest to tez najprostszy sposób<br />
na sprawdzanie wyrazenia if (rys. 4.49).<br />
Z kolejnych rozdzialów dowiesz sie wiecej<br />
o stosowaniu warunków i petli akcji. Jednak<br />
juz w tej chwili potrafisz sprawdzic metode<br />
isDown i rózne wlasciwosci obiektu Key,<br />
korzystajac z tej podstawowej petli.<br />
Metoda Key zostaje<br />
wywolana i sprawdzona<br />
Akcja gotoAndPlay(1)<br />
powoduje utworzenie petli<br />
Obraz<br />
przedstawiajacy<br />
kobiete skaczaca<br />
wzwyz w klatce 10.<br />
Obiekt Key<br />
W celu<br />
utworzenia kombinacji klawiszy<br />
z metoda isDown obiektu Key:<br />
1. Zaznacz pierwsze ujecie kluczowe<br />
w projekcie, nad którym pracowales<br />
w poprzednim cwiczeniu, i otwórz palete<br />
akcji w trybie Normal Mode .<br />
2. Wybierz wyrazenie if. W bloku edycji<br />
ujrzysz warunek (Condition) wraz z metoda<br />
i wlasciwoscia obiektu Key.<br />
3. W bloku edycji parametrów kliknij pole<br />
Condition, nacisnij spacje, a nastepnie<br />
wybierz Actions/Operators/&&. Jeszcze<br />
raz nacisnij spacje (rys. 4.50).<br />
4. W polu Condition, za operatorem &&,<br />
wybierz Objects/Key/isDown. Metoda<br />
isDown pojawi sie w polu Condition<br />
za operatorem &&. Dla tej metody jest<br />
wymagany kolejny argument (rys. 4.51).<br />
5. Wybierz Objects/Key/CONTROL lub<br />
przeciagnij wlasciwosc CONTROL do pola<br />
Condition (rys. 4.52).<br />
Wlasciwosc key.CONTROL pojawi sie jako<br />
argument drugiej metody isDown. Warunek<br />
zostanie spelniony i spowoduje wykonanie<br />
akcji ujetej w klamrach tylko wtedy, gdy<br />
jednoczesnie zostana wcisniete klawisz<br />
spacji oraz Control .<br />
Rys. 4.49. Ten film bedzie odtwarzany w petli<br />
od klatki 1. do klatki 2. – do momentu<br />
wcisniecia klawisza spacji<br />
Rys. 4.50. Dodaj operator && dostepny<br />
w oknie narzedzi lub po prostu wpisz go<br />
w polu Condition za pierwsza metoda Key<br />
Rys. 4.51. Druga metoda isDown wystepuje<br />
zaraz za pierwsza i jest z nia powiazana<br />
operatorem &&<br />
Rys. 4.52. Dla spelnienia tego warunku<br />
konieczne jest jednoczesne wcisniecie<br />
klawiszy spacji oraz Control<br />
116
Zarzadzanie<br />
zasobami Flasha<br />
5<br />
Czesci skladowe jezyka HTML<br />
Zeby tworzyc elementy prawdziwej interakcji z uzytkownikiem i umozliwic mu ogladanie,<br />
sluchanie i wykonywanie dokladnie tego, co chcialbys, zeby robil, musisz nauczyc sie, jak<br />
kontrolowac odtwarzanie filmu wzdluz róznych listew czasowych. Wewnetrzny odtwarzacz<br />
Flasha zawsze pokazuje to, co jest na scenie, odtwarza dowolne dzwieki i wyzwala dowolne<br />
akcje wlaczone do listwy czasowej. Przeskakiwanie od klatki do klatki wzdluz listwy czasowej<br />
glównego filmu jest wystarczajaco proste, gdy uzywa sie podstawowych akcji, z którymi zdazyles<br />
sie juz zaznajomic, jak Go To, Play i Stop. Kiedy jednak dolaczysz do swojego filmu dodatkowe<br />
klipy filmowe, bedziesz mial do czynienia z innymi listwami czasowymi, którymi mozna<br />
indywidualnie zarzadzac. Glówna listwa czasowa moze kontrolowac listwe czasowa klipu<br />
filmowego. Z drugiej strony, listwa czasowa klipu filmowego moze kontrolowac glówna listwe<br />
czasowa, ale takze, listwa czasowa jednego klipu filmowego moze kontrolowac listwe czasowa<br />
innego klipu. Celem tego rozdzialu jest pomóc ci opanowac zasady tej zlozonej interakcji<br />
i nawigacji pomiedzy poszczególnymi listwami czasowymi.<br />
Zarzadzanie zasobami Flasha<br />
117
Rozdzial 5.<br />
Nawigowanie klipów filmowych<br />
Nawigowanie<br />
po listwach czasowych<br />
klipów filmowych<br />
Niezalezne listwy czasowe symbolów klipów<br />
filmowych umozliwiaja tworzenie<br />
skomplikowanych schematów nawigacyjnych<br />
(rys. 5.1). W czasie odtwarzania zawartosci<br />
glównej listwy czasowej, moga byc<br />
jednoczesnie odtwarzane filmy z pozostalych<br />
listew czasowych, oddzialujac na siebie<br />
i okreslajac, które klatki maja byc odtwarzane<br />
lub tez kiedy przerwac odtwarzanie. Tak<br />
naprawde, powszechna jest praktyka<br />
wprowadzania do sceny wielu klipów<br />
filmowych oddzialujacych miedzy soba,<br />
podczas gdy listwa czasowa glównego filmu<br />
zawiera tylko jedna klatke, niezbedna do<br />
zadzialania calosci. Oczywiscie, nawigowanie<br />
pomiedzy poszczególnymi listwami czasowymi<br />
odbywa sie przy udziale jezyka ActionScript.<br />
Podstawowe akcje, uzywane do nawigowania<br />
wzdluz glównej listwy czasowej (Go To, Stop<br />
i Play), moga byc takze uzywane do<br />
nawigowania listwa czasowa dowolnego klipu<br />
filmowego. Jest to mozliwe z uwagi na to, ze<br />
klipy filmowe stanowia czesc predefiniowanych<br />
we Flashu klas klipów filmowych, umozliwiajac<br />
ci prace z klipami filmowymi jako obiektami.<br />
To, ze klip filmowy jest jednoczesnie symbolem<br />
oraz obiektem, czyni go unikalnym w sposobie<br />
funkcjonowania i tworzenia. Jako klon symbolu,<br />
klip filmowy moze byc wykorzystany w petlach<br />
animacji i animowanych przyciskach. Kiedy jest<br />
obiektem, mozesz wywolywac jego metody,<br />
potrzebne do kontrolowania, odtwarzania lub<br />
szacowania wlasciwosci wplywajacych na<br />
sposób pojawiania sie klipu. Klipy filmowe<br />
tworzy sie i przechowuje w bibliotece –<br />
podobnie jak inne symbole. Jednak uzywanie<br />
ich jako obiektów wymaga przygotowania ich<br />
klonów. Po jednokrotnym utworzeniu klonu,<br />
obiekt klipu filmowego staje sie dostepny dla<br />
wszystkich metod i wlasciwosci klasy klipów<br />
filmowych.<br />
Rys. 5.1. Film moze zawierac wiele listew<br />
czasowych oddzialujacych na siebie<br />
nawzajem. Powyzszy przyklad przedstawia<br />
scene Scene 1 jako glówna listwe czasowa.<br />
Skladaja sie na nia dwa klipy filmowe: jeden<br />
z nich zawiera drugi. Strzalki prezentuja tylko<br />
kilka z mozliwych kierunków komunikacji<br />
118
Zarzadzanie zasobami Flasha<br />
Obiekt klipu<br />
filmowego<br />
Obiekt Date<br />
Rys. 5.2. Tworzenie klonu symbolu klipu<br />
filmowego oraz tworzenie klonu obiektu Date<br />
Nazywanie klonów<br />
Tworzenie klonu twojego symbolu klipu<br />
filmowego zawiera sie w dwóch krokach:<br />
umieszczenie klonu na scenie, a nastepnie<br />
nadanie mu nazwy. Daje to taki sam efekt, jaki<br />
inne obiekty Flasha osiagaja przy pomocy<br />
funkcji konstruktora (rys. 5.2). Otrzymujemy<br />
wiec nazwany obiekt lub klon, stworzony na<br />
podstawie klasy. Mozna go pózniej uzywac<br />
przez wywolanie jego metod lub szacowanie<br />
jego wlasciwosci.<br />
W celu<br />
nazwania klonu klipu filmowego:<br />
1. Utwórz symbol klipu filmowego.<br />
2. Przeciagnij klon klipu filmowego<br />
z biblioteki na scene.<br />
3. Zaznacz klon.<br />
4. Na palecie Instance, w polu Name , wpisz<br />
unikalna nazwe dla twojego klonu klipu<br />
filmowego (rys. 5.3).<br />
Od teraz klon klipu filmowego moze byc<br />
identyfikowany w srodowisku ActionScript<br />
za pomoca utworzonej nazwy.<br />
Nazywanie klonów<br />
Rys. 5.3. Ustawienia w palecie Instance dla klipu<br />
filmowego. Nazwa tego obiektu klipu filmowego<br />
to myCircle<br />
119
Rozdzial 5.<br />
Wskazówka<br />
• Nazwa symbolu twojego klipu filmowego<br />
(ta, która pojawia sie w bibliotece) oraz<br />
nazwa, która wprowadzasz na palecie<br />
Instance, to dwa rózne identyfikatory<br />
(rys. 5.4). Nazwa pojawiajaca sie<br />
w bibliotece jest tylko wlasciwoscia<br />
symbolu, która pelni funkcje organizatora.<br />
Nazwa wpisywana na palecie Instance jest<br />
wazniejsza, bowiem stanowi wlasciwa<br />
nazwe obiektu i bedzie uzywana<br />
w sciezkach dostepu. Chociaz obie nazwy<br />
moga byc takie same, staraj sie nadawac<br />
symbolom ogólne, a klonom bardziej<br />
specyficzne nazwy – dla lepszego<br />
rozróznienia miedzy nimi.<br />
Nazwa symbolu<br />
klipu filmowego<br />
Nazywanie klonów<br />
Nazwa klonu klipu filmowego<br />
Rys. 5.4. Nazwa symbolu klipu filmowego<br />
pojawia sie w bibliotece, podczas gdy nazwa<br />
klipu widnieje na palecie Instance<br />
120
Zarzadzanie zasobami Flasha<br />
Sciezki dostepu<br />
Sciezka dostepu jest w zasadzie nazwa<br />
obiektu, ewentualnie grupa nazw obiektów<br />
oddzielonych kropkami, co pozwala Flashowi<br />
okreslic, gdzie znajduje sie wskazany obiekt.<br />
Przejscie do edycji listwy czasowej klipu<br />
filmowego wymaga podania sciezki dostepu<br />
do tego klipu oraz podstawowej akcji. Sciezka<br />
dostepu wskazuje na miejsce, w którym nalezy<br />
szukac klonu klipu filmowego, natomiast akcja<br />
decyduje o tym, co Flash ma z owym klonem<br />
zrobic. Podstawowe akcje kontrolujace proces<br />
odtwarzania to Go To, Play i Stop.<br />
Na przyklad, jesli nadales dla klonu klipu<br />
filmowego nazwe bigClock, to napisanie<br />
wyrazenia jezyka ActionScript<br />
bigClock.gotoAndStop(37) spowoduje<br />
przejscie do klatki 37. klonu klipu filmowego<br />
bigClock i zatrzymanie odtwarzania.<br />
W przykladzie tym sciezka dostepu jest<br />
bigClock, a akcja gotoAndStop.<br />
W bloku edycji parametrów palety akcji<br />
znajduje sie ikona przycisku o nazwie Insert<br />
a target path, otwierajaca okno dialogowe<br />
Insert Target Path, a to z kolei pozwala<br />
wprowadzic sciezke dostepu (rys. 5.5). W oknie<br />
tym ukazuje sie drzewo hierarchiczne<br />
wszystkich klonów klipów filmowych.<br />
Wystarczy wybrac pozadany klip, a pojawi sie<br />
wlasciwa dla niego sciezka dostepu.<br />
Drzewo<br />
hierarchii<br />
plików<br />
Dostepne listwy<br />
czasowe<br />
Pole okreslania<br />
sciezki dostepu<br />
Sciezki dostepu<br />
Paleta akcji<br />
Ikona przycisku<br />
Insert a target path<br />
Okno dialogowe<br />
Insert Target Path<br />
Rys. 5.5. Okno dialogowe Insert Target Path umozliwia wybranie sciezki<br />
dostepu przez klikniecie ikony klipu filmowego widocznego w hierarchii<br />
121
Rozdzial 5.<br />
Sciezki dostepu<br />
W celu utworzenia sciezki dostepu<br />
do klonu klipu filmowego<br />
z poziomu glównej listwy czasowej:<br />
1. Utwórz symbol klipu filmowego i umiesc<br />
jego klon na scenie. Za pomoca palety<br />
Instance nadaj mu nazwe.<br />
2. Utwórz symbol przycisku i umiesc jego klon<br />
na scenie razem z klonem klipu filmowego<br />
(rys. 5.6).<br />
Przycisk na glównej listwie czasowej bedzie<br />
kontrolowal listwe czasowa klipu<br />
filmowego.<br />
3. Zaznacz klon przycisku, a nastepnie otwórz<br />
palete akcji.<br />
4. Wybierz Actions/evaluate . Ponizej<br />
manipulatora zdarzenia on (release)<br />
pojawi sie nowa linia skryptu (rys. 5.7).<br />
5. W bloku edycji parametrów kliknij przycisk<br />
Insert a target path. Pojawi sie okno<br />
dialogowe Insert Target Path.<br />
6. Zaznacz opcje Relative w polu Mode,<br />
a nastepnie wybierz klon klipu filmowego,<br />
dostepny w drzewie hierarchii. W polu<br />
Target pojawi sie sciezka dostepu (rys. 5.8).<br />
Klon<br />
przycisku<br />
Klon klipu<br />
filmowego<br />
o nazwie<br />
bigClock<br />
Rys. 5.6. Klony przycisku i klipu filmowego<br />
na glównej listwie czasowej<br />
Rys. 5.7. Uzyj wyrazenia evaluate dla<br />
okreslenia sciezki dostepu do klipu oraz<br />
odpowiedniej dla niego akcji<br />
Rys. 5.8. Okno dialogowe Insert Target Path.<br />
Wybór klipu filmowego widocznego w oknie<br />
hierarchii powoduje podstawienie sciezki<br />
dostepu w polu Target<br />
122
Zarzadzanie zasobami Flasha<br />
Rys. 5.9. Pole Expression palety akcji<br />
Rys. 5.10. Akcja gotoAndStop(37) stanowi<br />
metode obiektu klipu filmowego o nazwie<br />
bigClock. Wyrazenie to powoduje przejscie<br />
do klatki 37. na listwie czasowej klipu bigClock<br />
i zatrzymanie odtwarzania<br />
Rys. 5.11. Umiesc klon klipu filmowego<br />
smallClock wewnatrz klipu bigClockMC.<br />
Osadzonemu klonowi klipu filmowego nadaj<br />
nazwe smallClock, a klonowi klipu – widocznego<br />
na scenie – nazwe bigClock. Teraz bigClock jest<br />
rodzicem, a smallClock – dzieckiem<br />
7. Kliknij OK. Sciezka dostepu bedzie teraz<br />
widniala w polu Expression (rys. 5.9).<br />
8. W polu Expression, zaraz za sciezka dostepu,<br />
wpisz kropke, a nastepnie pozadana metode<br />
wraz z odpowiednimi argumentami (rys. 5.10).<br />
9. Przetestuj swój film. Utworzony klon<br />
przycisku kontroluje teraz listwe czasowa –<br />
wskazanego sciezka dostepu – klipu<br />
filmowego.<br />
Mozliwe jest takze umieszczanie jednego klipu<br />
filmowego w drugim. W takim ukladzie jeden<br />
z nich pelni role obiektu-rodzica, a drugi jest<br />
obiektem-dzieckiem. Jakiekolwiek zmiany<br />
dokonane na obiekcie -rodzicu beda mialy<br />
wplyw jednoczesnie na obiekt -dziecko. Jesli<br />
chcialbys kontrolowac listwe czasowa klipu<br />
filmowego-dziecka z poziomu glównej listwy<br />
czasowej, w sciezce dostepu musza znalezc sie<br />
nazwy zarówno dziecka, jak i rodzica.<br />
W celu utworzenia sciezki dostepu<br />
do klonu klipu filmowego-dziecka<br />
z poziomu glównej listwy czasowej:<br />
1. Utwórz symbol klipu filmowego, a nastepnie<br />
umiesc jego klon na scenie i nadaj mu nazwe.<br />
2. Utwórz kolejny symbol klipu filmowego,<br />
umieszczajac go wewnatrz pierwszego<br />
z symboli. Nadaj nowemu klonowi nazwe,<br />
korzystajac z palety Instance (rys. 5.11).<br />
3. Utwórz symbol przycisku i umiesc jego klon<br />
na scenie w glównej listwie czasowej.<br />
Przycisku tego uzyjemy do kontrolowania<br />
listwy czasowej klipu filmowego-dziecka.<br />
4. Zaznacz klon przycisku i otwórz palete<br />
akcji. Wybierz Actions/evaluate.<br />
5. W bloku edycji parametrów kliknij przycisk<br />
Insert a target path, a nastepnie – w oknie<br />
dialogowym Insert Target Path – wybierz<br />
tryb Relative (w polu Mode).<br />
Sciezki dostepu<br />
123
Rozdzial 5.<br />
6. W drzewie hierarchii obiektów kliknij ikone<br />
trójkata widniejaca przy ikonie klipu<br />
filmowego-rodzica. Drzewo zostanie<br />
rozwiniete, pokazujac klip filmowy-dziecko,<br />
zawarty w klipie-rodzicu (rys. 5.12).<br />
7. Jako sciezke dostepu wybierz klip filmowydziecko.<br />
Kliknij OK. W polu Expression<br />
palety akcji pojawi sie sciezka dostepu<br />
w postaci: Parent.Child.<br />
8. W polu Expression dopisz kropke,<br />
a nastepnie akcje dla obiektu, do którego<br />
utworzyles sciezke dostepu.<br />
9. Przetestuj film. Kiedy klikniesz i zwolnisz<br />
przycisk, akcja zostanie wykonana na klipie<br />
filmowym-dziecku, ale nie na klipie-rodzicu<br />
(rys. 5.13). Z wyjatkiem relacji rodzicdziecko,<br />
listwy czasowe poszczególnych<br />
klipów pozostaja niezalezne.<br />
Kliknij te ikone<br />
trójkata...<br />
... drzewko zostanie<br />
rozwiniete<br />
Rys. 5.12. Drzewo hierarchii obiektów<br />
w oknie dialogowym Insert Target Path.<br />
Hierarchia ta ukazuje relacje rodzic-dziecko<br />
Sciezki dostepu<br />
Rys. 5.13. Klikniecie przycisku (u góry)<br />
powoduje skok do klatki 5. klipu filmowegodziecka<br />
smallClock i zatrzymanie<br />
odtwarzania, podczas gdy odtwarzanie klipu<br />
filmowego-rodzica bigClock jest caly czas<br />
kontynuowane<br />
124
Zarzadzanie zasobami Flasha<br />
Wzgledne i bezwzgledne sciezki<br />
dostepu<br />
W oknie dialogowym Flasha Insert Target<br />
Path mozesz wybierac pomiedzy dwiema<br />
opcjami: Relative (wzglednie) oraz Absolute<br />
(bezwzglednie). W poprzednim przykladzie,<br />
metoda bigClock.smallClock.<br />
gotoAndStop(5) pochodzila od przycisku<br />
rezydujacego w glównej listwie czasowej.<br />
Kiedy Flash wykonuje te akcje, próbuje<br />
odnalezc w tej listwie obiekt o nazwie<br />
bigClock, zawierajacy w sobie inny obiekt,<br />
nazwany smallClock. Jest to przyklad sciezki<br />
korzystajacej z trybu Relative . Wszystko jest<br />
wzgledne w stosunku do miejsca, w którym<br />
rezyduje wyrazenie akcji – w tym przypadku<br />
jest to glówna listwa czasowa. Alternatywna<br />
metoda wstawiania sciezki dostepu jest uzycie<br />
trybu Absolute, w którym nie istnieje zadne<br />
ujecie odniesienia. Mozna przyjac, ze wzgledne<br />
(Relative ) sciezki dostepu sa jak wytyczne<br />
podawane z punktu widzenia twojej biezacej<br />
lokacji, w rodzaju „idz dwa bloki dalej, a potem<br />
skrec w lewo”. Natomiast bezwzgledne<br />
(Absolute) sciezki dostepu dzialaja niezaleznie<br />
od miejsca, w którym sie znajdujesz,<br />
przypominajac wskazówke „udaj sie na ul.<br />
Chopina 6”.<br />
W jakim celu umozliwiono ci wybór pomiedzy<br />
tymi dwoma trybami? Otóz, gdybys chcial<br />
wskazac sciezke dostepu do listwy czasowej<br />
znajdujacej sie na wyzszym poziomie wzgledem<br />
listwy, nad która aktualnie pracujesz, musisz<br />
posluzyc sie trybem Absolute. Wyobraz sobie<br />
na przyklad, ze chcialbys, aby jakis klip<br />
filmowy kontrolowal glówna listwe czasowa,<br />
ta, w której rezyduje. Tryb Relative<br />
udostepnilby ci jedynie listwy czasowe<br />
zawierajace sie w aktywnej w tym momencie<br />
listwie. Dopiero w trybie Absolute widzialbys<br />
wszystkie dostepne listwy czasowe, niezaleznie<br />
od poziomu, na jakim sie aktualnie znajdujesz.<br />
Tryb Absolute daje ci niejako widok z lotu<br />
ptaka jednoczesnie na wszystkie klipy filmowe<br />
obecne na scenie.<br />
Sciezki wzgledne i bezwzgledne<br />
125
Rozdzial 5.<br />
Listwy czasowe this oraz _root<br />
W trybie Relative biezaca listwa czasowa nosi<br />
nazwe this. Wszystkie inne listwy czasowe sa<br />
wzgledne wobec this. W trybie Absolute,<br />
listwa czasowa glównego filmu jest nazywana<br />
_root, a wszystkie inne listwy sa<br />
zorganizowane wzgledem listwy czasowej<br />
_root (rys. 5.14).<br />
Klip<br />
filmowy<br />
bigClock<br />
Klip filmowy<br />
smallClock<br />
(wewnatrz<br />
klipu bigClock)<br />
Tryb Absolute<br />
Tryb Relative<br />
Sciezki wzgledne i bezwzgledne<br />
W celu utworzenia sciezki dostepu<br />
do glównej listwy czasowej<br />
z poziomu klonu klipu filmowego:<br />
1. Utwórz symbol klipu filmowego i umiesc<br />
jego klon na scenie. Za pomoca palety<br />
Instance nadaj mu nazwe.<br />
2. Utwórz symbol przycisku i umiesc jego klon<br />
wewnatrz symbolu klipu filmowego.<br />
Przycisku tego uzyjesz do kontrolowania<br />
glównej listwy czasowej (rys. 5.15).<br />
3. Zaznacz klon przycisku i otwórz palete<br />
akcji. Wybierz Actions/evaluate.<br />
4. W bloku edycji parametrów kliknij przycisk<br />
Insert a target path.<br />
5. W oknie dialogowym Insert Target Path<br />
wybierz tryb Absolute. Ujrzysz wszystkie<br />
klipy filmowe oraz listwe czasowa<br />
glównego filmu, a nie tylko te, które sa<br />
zawarte w listwie czasowej biezacego klipu<br />
filmowego.<br />
6. Zaznacz glówna listwe czasowa jako sciezke<br />
dostepu. Kliknij OK. W polu Expression<br />
pojawi sie sciezka dostepu _root.<br />
7. W polu Expression wpisz kropke, a dalej<br />
akcje odpowiadajaca obiektowi, dla którego<br />
wskazales sciezke dostepu (rys. 5.16).<br />
Przycisk<br />
Rys. 5.14. Sciezki dostepu w trybach Absolute<br />
oraz Relative. Powyzszy przyklad ukazuje<br />
przycisk oraz klip filmowy smallClock,<br />
zawarte w klipie filmowym bigClock. Kiedy<br />
przypisujemy sciezke dostepu do przycisku,<br />
this w trybie Relative odnosi sie do bigClock<br />
w trybie Absolute<br />
Rys. 5.15. Umiesc klon przycisku wewnatrz<br />
klipu filmowego bigClock. Klon klipu<br />
filmowego (o nazwie bigClock) znajduje<br />
sie na scenie<br />
Rys. 5.16. Pole Expression na palecie akcji<br />
126
Zarzadzanie zasobami Flasha<br />
Rys. 5.17. Przycisk wewnatrz klipu filmowego<br />
bigClock powoduje przeskok do klatki 2. na<br />
listwie _root lub glównej listwie czasowej<br />
Klip filmowy<br />
secondClock<br />
To jest klatka 2<br />
Klip Filmowy<br />
bigClock<br />
Przycisk (wewnatrz<br />
klipu bigClock)<br />
Rys. 5.18. Dwa klipy filmowe (z przyciskiem<br />
wewnatrz jednego z nich) umieszczone na scenie<br />
8. Przetestuj film. Kiedy klikniesz i zwolnisz<br />
przycisk, Flash przejdzie z biezacej listwy<br />
czasowej do listwy _root i wykona<br />
okreslona tam akcje (rys. 5.17).<br />
W celu utworzenia sciezki dostepu<br />
do klonu klipu filmowego<br />
z poziomu innego klonu<br />
klipu filmowego:<br />
1. Utwórz symbol klipu filmowego i umiesc<br />
jego klon na scenie. Za pomoca palety<br />
Instance nadaj mu nazwe.<br />
2. Utwórz jeszcze jeden symbol klipu<br />
filmowego i takze umiesc jego klon na<br />
scenie. Korzystajac z palety Instance,<br />
nadaj mu nazwe.<br />
3. Utwórz symbol przycisku i umiesc jego klon<br />
wewnatrz pierwszego z utworzonych<br />
symboli klipów filmowych.<br />
Przycisku tego uzyjesz do kontrolowania<br />
drugiego klipu filmowego (rys. 5.18).<br />
4. Zaznacz klon przycisku i otwórz palete<br />
akcji. Wybierz Actions/evaluate.<br />
5. W bloku edycji parametrów kliknij przycisk<br />
Insert a target path. W oknie dialogowym<br />
Insert Target Path wybierz tryb Absolute.<br />
6. Zaznacz klon drugiego klipu filmowego.<br />
Kliknij OK.<br />
W polu Expression palety akcji pojawi sie<br />
sciezka dostepu _root.secondClock.<br />
7. W polu Expression, zaraz za widniejaca<br />
sciezka, dopisz kropke, a dalej akcje<br />
wybrana dla obiektu, do którego podales<br />
sciezke dostepu.<br />
8. Przetestuj film.<br />
Kiedy klikniesz i zwolnisz przycisk, Flash<br />
odszuka listwe czasowa _root, a nastepnie<br />
przejdzie do obiektu o nazwie secondClock<br />
i wykona przypisana mu akcje (rys. 5.19).<br />
Sciezki wzgledne i bezwzgledne<br />
Rys. 5.19. Akcja przypisana do tego przycisku<br />
jest wykonywana wzgledem klipu filmowego<br />
secondClock rezydujacego w listwie czasowej<br />
_root<br />
127
Rozdzial 5.<br />
Sciezki wzgledne i bezwzgledne<br />
W celu utworzenia sciezki dostepu<br />
do listwy czasowej<br />
konkretnego klipu filmowego:<br />
1. Utwórz symbol klipu filmowego i umiesc<br />
jego klon na scenie. Za pomoca palety<br />
Instance nadaj mu nazwe.<br />
2. Utwórz symbol przycisku i umiesc jego klon<br />
wewnatrz symbolu klipu filmowego.<br />
Przycisku tego uzyjesz do kontrolowania<br />
listwy czasowej klipu filmowego (rys. 5.20).<br />
3. Zaznacz klon przycisku i otwórz palete<br />
akcji. Wybierz Actions/evaluate.<br />
4. Kliknij przycisk Insert a target path,<br />
a otworzy sie okno dialogowe Insert<br />
Target Path. Wybierz tryb Relative<br />
i zaznacz this.<br />
lub<br />
Kliknij przycisk Insert a target path,<br />
a otworzy sie okno dialogowe Insert<br />
Target Path. Wybierz tryb Absolute<br />
i zaznacz sciezke dostepu _root.<br />
lub<br />
Nie wybieraj akcji evaluate w punkcie 3.<br />
Zamiast tego, po prostu wybierz<br />
którakolwiek z podstawowych akcji –<br />
Go To, Stop lub Play (rys. 5.21).<br />
Wskazówka<br />
• Uzywanie listew this lub _root dla<br />
podania sciezki dostepu do listwy czasowej<br />
klipu filmowego nie jest konieczne, tak jak<br />
zbedne jest uzywanie ich w nawigacji po<br />
glównej listwie czasowej. To zrozumiale,<br />
ze akcje rezydujace w danym klipie<br />
filmowym odnosza sie do niego lub sa mu<br />
przypisywane.<br />
Rys. 5.20. Umiesc przycisk wewnatrz klipu<br />
filmowego bigClockMC. Klon klipu<br />
filmowego (o nazwie bigClock) znajduje<br />
sie na scenie<br />
Rys. 5.21. Trzy sposoby na utworzenie sciezki<br />
dostepu do listwy czasowej klipu bigClock –<br />
z poziomu tego wlasnie klipu filmowego<br />
128
Zarzadzanie zasobami Flasha<br />
Rys. 5.22. Umiesc przycisk wewnatrz klipu<br />
filmowego smallClock. Klon klipu filmowego<br />
smallClockMC (o nazwie smallClock) znajduje<br />
sie wewnatrz klipu bigClockMC. Klon klipu<br />
filmowego bigClockMC (o nazwie bigClock)<br />
znajduje sie na scenie<br />
Rys. 5.23. Przycisk wewnatrz klipu filmowego<br />
smallClock tworzy sciezke dostepu do klipu<br />
filmowego bigClock za pomoca wyrazenia<br />
okreslajacego wzglednosc _parent<br />
Uzywanie terminu _parent<br />
w sciezkach dostepu<br />
Chociaz niewidoczny w oknie dialogowym<br />
Insert Target Path, termin okreslajacy<br />
wzglednosc _parent moze byc przez ciebie<br />
uzywany do tworzenia sciezek dostepu do klipu<br />
filmowego, usytuowanego o jeden poziom<br />
wyzej w stosunku do biezacej listwy czasowej.<br />
W celu utworzenia sciezki dostepu<br />
do obiektu-rodzica<br />
konkretnego klipu filmowego:<br />
1. Utwórz symbol klipu filmowego i umiesc<br />
jego klon na scenie. Za pomoca palety<br />
Instance nadaj mu nazwe.<br />
2. Utwórz jeszcze jeden symbol klipu<br />
filmowego i umiesc jego klon wewnatrz<br />
pierwszego klipu. Za pomoca palety<br />
Instance nadaj mu nazwe.<br />
3. Utwórz symbol przycisku i umiesc jego klon<br />
wewnatrz klipu filmowego-dziecka<br />
(rys. 5.22).<br />
4. Zaznacz klon przycisku i otwórz palete<br />
akcji. Wybierz Actions/evaluate.<br />
5. W polu Expression wpisz _parent i dalej<br />
kropke oraz wybrana akcje.<br />
6. Przetestuj film.<br />
Kiedy klikniesz i zwolnisz przycisk, Flash<br />
odszuka listwe czasowa biezacego obiektu<br />
(rodzica) i wykona okreslona tam akcje<br />
(rys. 5.23). W tabeli 5.1 oraz na rys. 5. 24<br />
znajdziesz podsumowanie sposobów na<br />
tworzenie wzglednych i bezwzglednych<br />
sciezek dostepu do róznych klipów<br />
filmowych.<br />
Sciezki wzgledne i bezwzgledne<br />
129
Rozdzial 5.<br />
Sciezki wzgledne i bezwzgledne<br />
Dlaczego sciezki wzgledne?<br />
Po co w ogóle uzywac sciezek<br />
wzglednych? Bezwzgledne sciezki<br />
dostepu wydaja sie tworzyc<br />
bezpieczniejsze konstrukcje, poniewaz<br />
jasno identyfikuja obiekt niezaleznie od<br />
tego, na jakim poziomie projektu sie<br />
znajdujesz. Sa jednak co najmniej dwa<br />
przypadki, kiedy s ciezki wzgledne<br />
bywaja uzyteczne.<br />
Po pierwsze, kiedy tworzysz klip<br />
filmowy z akcjami oddzialujacymi na<br />
inne klipy filmowe wzgledne<br />
w stosunku do pierwszego klipu,<br />
mozesz przemieszczac cala grupe<br />
i ciagle zachowywac dzialajace sciezki<br />
dostepu, uzywajace terminów<br />
okreslajacych wzglednosc. W takiej<br />
sytuacji znacznie latwiej jest pracowac<br />
ze zlozonymi schematami nawigacji,<br />
jako ze mozliwe staje sie kopiowanie,<br />
wklejanie i przemieszczanie<br />
poszczególnych fragmentów bez<br />
przepisywania sciezek dostepu.<br />
Przykladem zastosowania moze byc<br />
zarzadzanie witryna sieciowa<br />
zawierajaca lacza do innych stron. Jesli<br />
miales zamiar utworzyc bezwzgledne<br />
sciezki dostepu do laczy zawierajacych<br />
twoje CV, a nastepnie przeniesc twoja<br />
strone domowa na inny serwer, to<br />
musialbys przepisac sciezki dla<br />
poszczególnych laczy. Bardziej<br />
praktyczna metoda jest utworzenie laczy<br />
na stronie domowej za pomoca<br />
wzglednych sciezek dostepu.<br />
Drugi przypadek ma miejsce wówczas,<br />
gdy dynamicznie tworzysz klipy<br />
filmowe. Wkrótce nauczysz sie, jak<br />
tworzyc obiekty klipów filmowych na<br />
bazie istniejacych klipów i nadawac im<br />
nazwy „w locie” za pomoca jezyka<br />
ActionScript. W takich sytuacjach klipy<br />
filmowe nie pozostaja statyczne<br />
i wzgledne sciezki dostepu potrzebne<br />
sa do tego, zeby je wszystkie ogarnac.<br />
Rys. 5.24. Ilustracja filmu zawierajacego<br />
kilka róznych klipów filmowych. Glówna<br />
listwa czasowa (Scene 1) zawiera klipy<br />
filmowe Square oraz Circle. Klip Triangle<br />
znajduje sie w klipie filmowym Circle. Nazwy<br />
te reprezentuja klony. Tabela 5.1 przedstawia<br />
wzgledne i bezwzgledne sciezki dostepu,<br />
utworzone z poziomu klipu filmowego Circle<br />
(czyli klipu, na którego poziomie aktualnie sie<br />
znajdujesz)<br />
Tabela 5.1. Wzgledne i bezwzgledne<br />
sciezki dostepu<br />
Dostep do... Sciezka Sciezka<br />
(z poziomu bezwzgledna wzgledna<br />
Circle) (Absolute) (Relative )<br />
Scene 1 _root _parent<br />
Square<br />
Circle<br />
Triangle<br />
_root.Square _parent.<br />
Square<br />
_root.Circle This<br />
_root.Circle.<br />
Triangle<br />
Triangle<br />
130
Zarzadzanie zasobami Flasha<br />
Klip filmowy<br />
myMouth<br />
(wewnatrz<br />
klipu<br />
myFace)<br />
Klip filmowy<br />
myFace<br />
Klip filmowy<br />
myEyes<br />
(wewnatrz<br />
klipu myFace)<br />
Rys. 5.25. Zagniezdzone wyrazenia typu with<br />
stanowia odpowiednik zlozonych sciezek dostepu<br />
tworzonych w oparciu o wyrazenia evaluate<br />
Uzywanie akcji with<br />
w tworzeniu sciezek dostepu<br />
Jeszcze inny sposób tworzenia sciezek dostepu<br />
do klipów filmowych polega na wykorzystaniu<br />
akcji with. Akcja ta, w odróznieniu od<br />
evaluate , umozliwia wprowadzenie kilku akcji<br />
w miejsce jednej, które to obiekt bedzie<br />
wykonywal. Wyrazenie zawierajace akcje with<br />
moze wygladac np. tak:<br />
with (bigClock) {<br />
}<br />
gotoAndStop (5)<br />
Zastosowanie akcji with – jak wyzej –<br />
powoduje tymczasowe ustawienie sciezki<br />
dostepu do obiektu bigCl ock, tak wiec<br />
wyrazenie gotoAndStop ujete w klamrach<br />
odnosi sie do tego akurat obiektu. Po<br />
wykonaniu akcji with, jakiekolwiek<br />
pojawiajace sie pózniej wyrazenie odnosi sie<br />
juz do biezacego klipu filmowego.<br />
Wyrazenie with moze równiez zostac<br />
zagniezdzone i oddzialywac na kilka obiektów<br />
jednoczesnie. Oto przyklad:<br />
with (myFace) {<br />
}<br />
with (myEyes) {<br />
}<br />
gotoAndStop (2);<br />
with (myMouth) {<br />
}<br />
gotoAndStop (2);<br />
Takie zagniezdzone wyrazenie daje taki sam<br />
efekt jak ponizsze wyrazenia wykorzystujace<br />
akcje evaluate (rys. 5.25):<br />
myFace.myEyes.gotoAndStop(2);<br />
myFace.myMouth.gotoAndStop(2);<br />
Uzywanie akcji with<br />
131
Rozdzial 5.<br />
Uzywanie akcji with<br />
W celu wprowadzenia akcji with:<br />
1. Zaznacz przycisk lub ujecie i otwórz palete<br />
akcji.<br />
2. Wybierz Actions/with. W bloku edycji<br />
parametrów pojawi sie pole Object.<br />
3. W polu Object wprowadz sciezke dostepu<br />
lub kliknij przycisk Insert a target path<br />
(rys. 5.26).<br />
4. Wybierz akcje dla wskazanego obiektu.<br />
Akcja ta bedzie widoczna przy wyrazeniu<br />
with jako ujeta w klamry (rys. 5.27).<br />
W celu wprowadzenia<br />
zagniezdzonych akcji with:<br />
1. Zaznacz przycisk lub ujecie i otwórz palete<br />
akcji.<br />
2. Wybierz Actions/with.<br />
3. W polu Object wprowadz pierwsza sciezke<br />
dostepu.<br />
4. Ponownie wybierz Actions/with.<br />
5. W polu Object wprowadz pierwsza<br />
zagniezdzona sciezke dostepu (rys. 5.28).<br />
6. Wybierz akcje dla pierwszego<br />
zagniezdzonego obiektu.<br />
7. Zaznacz zamykajaca klamre pierwszego<br />
zagniezdzonego wyrazenia with<br />
(rys. 5.29). Jezeli tego nie zrobisz przed<br />
przejsciem do nastepnego kroku, drugie<br />
zagniezdzone wyrazenie typu with pojawi<br />
sie wewnatrz poprzedniego.<br />
8. Ponownie wybierz Actions/with.<br />
9. W polu Object wprowadz druga<br />
zagniezdzona sciezke dostepu, a nastepnie<br />
wybierz akcje dla drugiego zagniezdzonego<br />
obiektu (rys. 5.30).<br />
Rys. 5.26. Akcja with widoczna w oknie<br />
palety akcji. Pole Object zawiera sciezke<br />
dostepu do obiektu myFace<br />
Rys. 5.27. Akcja<br />
gotoAndStop(2), jak<br />
równiez wszystkie<br />
inne akcje ujete<br />
w wewnetrznych<br />
klamrach odnosza sie<br />
do obiektu myFace<br />
Rys. 5.28. Akcja with<br />
(myEyes) zostala<br />
zagniezdzona w akcji<br />
with (myFace)<br />
Rys. 5.29. Zaznaczenie<br />
zamykajacej klamry<br />
daje pewnosc, ze twoje<br />
nastepne wyrazenie<br />
zostanie wstawione<br />
wewnatrz akcji with<br />
(myFace), a nie akcji<br />
with (myEyes)<br />
Rys. 5.30.<br />
Ostateczna<br />
postac<br />
zagniezdzonych<br />
wyrazen z akcja<br />
with<br />
132
Zarzadzanie zasobami Flasha<br />
Rys. 5.31. Opcje wyboru skladni dostepne sa<br />
u dolu okna dialogowego Insert Target Path<br />
Tabela 5.2. Odpowiedniki oznaczen w skladni<br />
uzywajacej ukosnika oraz w skladni z kropka<br />
Kropka<br />
. /<br />
_root /<br />
this .<br />
_parent ..<br />
Ukosnik<br />
. : (separator zmiennych)<br />
Ukosnik zamiast kropki<br />
i akcja Tell Target<br />
Jak dotad, w konstruowaniu sciezek dostepu<br />
uzywales kropki do oddzielania zagniezdzonych<br />
obiektów klipów filmowych. Jednak Flash<br />
umozliwia oprócz tego wprowadzanie sciezek<br />
dostepu z ukosnikiem podstawianym w miejsce<br />
kropki. Taka skladnia (z ukosnikiem)<br />
funkcjonowala w poprzednich wersjach<br />
programu, dlatego tez moze stanowic wygodna<br />
alternatywe dla uzytkowników zwiazanych od<br />
dawna z Flashem. W oknie dialogowym Insert<br />
Target Path mozesz zdecydowac, czy chcesz<br />
uzywac ukosnika, czy tez kropki (rys. 5.31).<br />
Ukosnika uzywa sie w sposób podobny do tego,<br />
jak komputer przedstawia organizacje<br />
katalogów na dysku – z ukosnikiem wlasnie,<br />
jako znakiem oddzielajacym kolejne katalogi.<br />
I tak jak w przypadku komputerowych<br />
katalogów, mozesz przebiegac hierarchie listew<br />
czasowych w góre lub w dól za pomoca kropek.<br />
Pojedyncza kropka wskazuje na biezaca listwe<br />
czasowa, dwie kropki – nastepna listwe powyzej<br />
biezacej. Pojedynczy ukosnik pokazuje glówna<br />
listwe czasowa (root).<br />
Zwróc uwage, jak w skladni z ukosnikiem<br />
uzywa sie kropek do wskazywania sciezek<br />
wzglednych – widac, jak bardzo mylace moze<br />
sie okazac jednoczesne uzywanie skladni<br />
z kropka oraz skladni z ukosnikiem. Na<br />
szczescie Flash nie pozwala na laczenie tych<br />
dwóch skladni, poniewaz zapisane w ten<br />
sposób wyrazenia bylyby niezrozumiale. Jesli<br />
wprowadzasz wyrazenie evaluate, wywolujace<br />
metode Go To obiektu, w przypadku skladni<br />
uzywajacej kropki wygladaloby to tak:<br />
Parent.Child.gotoAndStop(5);<br />
Jednak w skladni uzywajacej ukosnika<br />
funkcjonalnosc wyrazenia ginie, jako ze nie<br />
ma sensu zapis:<br />
Parent/Child.gotoAndStop(5);<br />
Ukosnik i akcja Tell Target<br />
133
Rozdzial 5.<br />
Ukosnik i akcja Tell Target<br />
Skladnia uzywajaca ukosnika nie dziala<br />
z wyrazeniami evaluate, podobnie jak<br />
z wyrazeniami with. Z tego typu skladni<br />
powinno sie w zasadzie korzystac wylacznie<br />
w towarzystwie akcji Tell Target, której<br />
uzywanie jest samo w sobie zniechecajace.<br />
Akcja Tell Target, podobnie jak skladnia<br />
z ukosnikiem, stanowi spadek po<br />
wczesniejszych wersjach Flasha. Wlasciwie<br />
byla to bardzo potezna w dzialaniu akcja, jednak<br />
nowe mozliwosci wywolywania metod<br />
i szacowania wlasciwosci obiektów za pomoca<br />
skladni z kropka czynia akcje Tell Target<br />
zbedna. Chociaz wiec mozesz wywolac akcje<br />
Tell Target z palety akcji, program traktuje ja<br />
jako odrzucona. Odrzucone akcje nie sa<br />
polecane z powodu ich niezgodnosci z nowa<br />
skladnia oraz wyrazeniami jezyka ActionScript.<br />
Wszystkie odrzucone akcje mozesz obejrzec<br />
w menu Options na palecie akcji (rys. 5.32).<br />
Najlepiej bedzie unikac skladni uzywajacej<br />
ukosnika oraz akcji Tell Target z powodu ich<br />
silnych zwiazków z przeszloscia, a zamiast tego<br />
skoncentrowac sie na korzystaniu z akcji<br />
evaluate , with oraz na poslugiwaniu sie<br />
skladnia oparta na kropce.<br />
Rys. 5.32. Wybranie Show Deprecated Syntax<br />
z menu Options na palecie akcji podswietla<br />
w oknie narzedzi palety wszystkie akcje, które<br />
stanowia pozostalosci poprzednich wersji<br />
Flasha, a ich dluzsze uzywanie nie jest<br />
polecane<br />
134
Zarzadzanie zasobami Flasha<br />
Rys. 5.33. Klip filmowy w roli pojemnika. Ten<br />
klip zawiera akcje stop w pierwszym ujeciu<br />
kluczowym. Pozostale – oznaczone etykieta –<br />
ujecia kluczowe moga przechowywac przyciski,<br />
grafike, animacje i kazdy inny rodzaj informacji<br />
charakterystyczny dla Flasha. Do tego rodzaju<br />
informacji mozna latwo dotrzec, podajac sciezke<br />
dostepu i przeskakujac do zadanego ujecia<br />
Rys. 5.34. Klip filmowy w formie menu<br />
rozwijanego zawiera jednoczesnie dwa stany<br />
menu – rozwiniete i zwiniete<br />
Klipy filmowe jako pojemniki<br />
Z tego,co dotychczas zaprezentowalismy w tym<br />
rozdziale, miales okazje nauczyc sie, w jaki<br />
sposób nazywac twoje obiekty klipów<br />
filmowych, jak tworzyc do nich sciezki dostepu<br />
oraz nawigowac po ich listwach czasowych<br />
z poziomu dowolnej innej listwy czasowej<br />
twojego filmu. Ale jakie znaczenie ma ta<br />
zdolnosc kontrolowania listwy czasowej klipu<br />
filmowego dla prawdziwej interaktywnosci<br />
tworzonych projektów Flasha? Kluczem do<br />
rozwiazania tej kwestii jest potraktowanie<br />
klipów filmowych jako pojemników do<br />
przechowywania róznych elementów –<br />
animacji, przycisków, dzwieku, nawet danych.<br />
Przemieszczajac sie po listwie czasowej klipu<br />
filmowego do przodu i do tylu, czy tez<br />
odtwarzajac poszczególne jej partie, zyskujesz<br />
dostep do dowolnych sposród wymienionych<br />
elementów i to niezaleznie od tego, co aktualnie<br />
dzieje sie na scenie. W starszych wersjach<br />
Flasha uzywanie klipów filmowych w tym<br />
znaczeniu bylo jedynym sposobem na<br />
symulowanie zmiennych, liczników i innych<br />
rodzajów znaków-wypelniaczy. Chociaz wiec<br />
rozbudowany we Flashu 5 jezyk ActionScript<br />
oferuje nowoczesne zamienniki tych starych<br />
technik, ciagle efektywne jest poslugiwanie sie<br />
klipami filmowymi jako pojemnikami,<br />
szczególnie pojemnikami na grafike i animacje<br />
(rys. 5.33).<br />
Na przyklad, powszechnym sposobem<br />
wykorzystania klipów filmowych jest<br />
wprowadzenie na ich listwy czasowe<br />
odmiennych stanów, które przechodza jeden<br />
w drugi. W rozdziale 4. budowales rozwijane<br />
menu, które zachowuja sie wlasnie w taki<br />
sposób. W ogóle menu rozwijane jest wlasciwie<br />
takim obiektem klipu filmowego, zmieniajacym<br />
swój stan miedzy rozwinietym i zwinietym.<br />
Przyciski zawarte w klipie filmowym<br />
kontroluja, który z dwóch stanów mozesz<br />
aktualnie ogladac, a jednoczesnie umozliwiaja<br />
nawigacje poza listwa czasowa klipu filmowego<br />
(rys. 5.34).<br />
Klipy filmowe jako pojemniki<br />
135
Rozdzial 5.<br />
Klipy filmowe jako pojemniki<br />
Innym przykladem jest przycisk wyboru (radio<br />
button). Tworzenie przycisku wyboru jest<br />
sposobem definiowania dwóch róznych stanów,<br />
zmieniajacych sie pomiedzy stanem wlaczenia<br />
(on) i wylaczenia (off).<br />
W celu utworzenia przycisku wyboru:<br />
1. Utwórz symbol klipu filmowego. Przejdz do<br />
trybu edycji i wstaw nowe ujecie kluczowe.<br />
2. Nadaj pierwszemu ujeciu kluczowemu<br />
etykiete on, a drugiemu off.<br />
3. Wstaw nowa warstwe. Zaznacz w nowej<br />
warstwie ujecie kluczowe odpowiadajace<br />
etykiecie off i otwórz palete akcji. Wybierz<br />
Basic Actions/Stop.<br />
Akcja stop zabezpiecza klip filmowy przed<br />
odtwarzaniem bez konca.<br />
4. Wstaw jeszcze jedna warstwe. Utwórz<br />
symbol przycisku i umiesc jeden z jego<br />
klonów w ujeciu kluczowym<br />
odpowiadajacym etykiecie off; kolejny klon<br />
umiesc w ujeciu kluczowym<br />
odpowiadajacym etykiecie on symbolu klipu<br />
filmowego.<br />
5. Zaznacz pierwszy klon przycisku i otwórz<br />
palete akcji. Przypisz mu akcje:<br />
on (release) {<br />
}<br />
gotoAndStop (on);<br />
6. Zaznacz drugi klon przycisku i przypisz mu<br />
akcje:<br />
on (release) {<br />
}<br />
gotoAndStop (off);<br />
7. Utwórz w nowych warstwach grafiki dla<br />
obydwu etykiet, on i off, obrazujace ich stan<br />
i postac (rys. 5.35).<br />
8. Przeciagnij klon klipu filmo wego<br />
z biblioteki na scene do glównej listwy<br />
czasowej. Przetestuj film.<br />
Rys. 5.35. Klip filmowy przycisku wyboru<br />
zawiera akcje stop w pierwszym ujeciu<br />
kluczowym i dwa zmieniajace sie stany.<br />
Przycisk w stanie off (u góry) powoduje<br />
przejscie do stanu on (u dolu) i odwrotnie<br />
136
Zarzadzanie zasobami Flasha<br />
Puste pierwsze<br />
ujecie<br />
kluczo we<br />
Rys. 5.36. Klip filmowy z pustym pierwszym<br />
ujeciem kluczowym bedzie niewidoczny na scenie.<br />
Klip ten zawiera akcje Stop w warstwie Layer 2<br />
i grafike w warstwie Layer 1, startujaca<br />
w klatce 2<br />
Klon klipu<br />
filmowego<br />
Rys. 5.37. Klon klipu filmowego z pustym<br />
pierwszym ujeciem kluczowym pojawia sie<br />
w postaci pustego kóleczka<br />
Akcja Stop<br />
Wszystko, co robisz, tworzac niewidzialny<br />
przycisk, ma takze zastosowanie wobec klipu<br />
filmowego. To znaczy, pierwsze widoczne dla<br />
uzytkownika ujecie kluczowe pozostawia sie<br />
puste, dzieki czemu klon jest poczatkowo<br />
niewidoczny na scenie. Jesli pierwsze ujecie<br />
kluczowe klipu filmowego jest puste i zawiera<br />
akcje kontrolujaca ujecia stop, zatrzymujaca<br />
odtwarzanie w tym miejscu, mozesz decydowac<br />
o tym, w którym momencie wyswietlic inne<br />
ujecia z listwy czasowej tego klipu filmowego.<br />
Przykladowo, móglbys stworzyc klip filmowy<br />
przedstawiajacy eksplozje, ale zostawiajac puste<br />
pierwsze ujecie kluczowe. Umiesc ten klip<br />
filmowy nad ilustracja lodzi podwodnej<br />
i w odpowiednim czasie przejdz do kolejnego<br />
ujecia, zeby odslonic eksplozje.<br />
Zauwaz, ze istnieja jeszcze inne sposoby<br />
na wykorzystanie jezyka ActionScript do<br />
ukrywania i odslaniania zawartosci klipu<br />
filmowego, a poznasz je w nastepnych<br />
rozdzialach. Jednak pamietanie zarówno<br />
o metodzie prostej (bazujacej na ujeciach,<br />
jak zilustrowano wyzej), jak i zaawansowanej<br />
(bazujacej bezposrednio na skrypcie) pomoze ci<br />
podjac nowe wyzwania zwiazane z tworzeniem<br />
animacji i budowaniem interaktywnosci.<br />
W celu utworzenia<br />
„niewidzialnego” klipu filmowego:<br />
1. Utwórz nowy symbol klipu filmowego<br />
i dodaj nowe ujecie kluczowe.<br />
2. Zaznacz pierwsze ujecie kluczowe i otwórz<br />
palete akcji. Wybierz Basic Actions/Stop.<br />
3. Zostaw pierwsze ujecie kluczowe puste<br />
i zacznij umieszczac w drugim ujeciu<br />
kluczowym grafike, animacje lub przyciski<br />
(rys. 5.36).<br />
4. Przeciagnij klon klipu filmowego<br />
z biblioteki na scene do glównej listwy<br />
czasowej.<br />
Klon pojawi sie na scenie w postaci pustego<br />
kóleczka (rys. 5.37). Reprezentuje ono punkt<br />
srodkowy klonu, dzieki czemu mozliwe staje<br />
sie precyzyjne umieszczenie klonu<br />
w wybranym miejscu.<br />
Klipy filmowe jako pojemniki<br />
137
Manipulatory klipów filmowych<br />
Rozdzial 5.<br />
Manipulatory zdarzen<br />
klipów filmowych<br />
Jeden ze sposobów, w jaki obiekt klipu<br />
filmowego komunikuje sie w srodowisku<br />
Flasha, polega na wykorzystaniu jego wlasnego<br />
manipulatora zdarzen, zwanego Clip Event<br />
(zdarzenie klipu filmowego). Miales juz<br />
sposobnosc zobaczyc, jak zdarzenia myszy,<br />
zdarzenia klawiaturowe i obiekt Key wykrywaja<br />
uzycie myszy lub klawiatury. Zdarzenie klipu<br />
filmowego jest wyjatkowe pod tym wzgledem,<br />
ze obejmuje nie tylko reakcje czynione za<br />
pomoca my szy czy klawiatury, ale i kilka mniej<br />
oczywistych zdarzen, w rodzaju wczytywania<br />
i usuwania klipu filmowego, odtwarzania<br />
poszczególnych klatek klipu filmowego<br />
i wczytywania do klipu dodatkowych danych<br />
z zewnatrz (rys. 5.38). Zwiazek miedzy tymi<br />
zdarzeniami polega na tym, ze wszystkie one<br />
sa przypisane do klonu klipu filmowego. Akcje<br />
wykonywane przez zdarzenia klipu filmowego<br />
sa zwiazane z tym klonem, dopóki nie ustali sie<br />
inaczej.<br />
Zdarzenia klipu filmowego sa uzywane<br />
w róznych wariacjach podstawowego kontekstu<br />
ich zastosowania. Na przyklad, Mouse up,<br />
Mouse down, Key up i Key down po prostu<br />
wykrywaja moment, w którym wystepuja te<br />
podstawowe zdarzenia (odpowiednio:<br />
wcisniecie – zwolnienie klawisza myszy,<br />
wcisniecie – zwolnienie klawisza na<br />
klawiaturze). Jako ze powyzsze zdarzenia sa<br />
przypisane do klipu filmowego, a nie do<br />
przycisku, nie istnieje strefa aktywna (Hit),<br />
a zdarzenia Mouse down oraz Mouse up sa<br />
wykrywane w kazdym punkcie sceny. Podobnie<br />
zdarzenia Key up i Key down nie zawieraja<br />
specyficznej informacji o tym, który klawisz<br />
mialby byc wcisniety, wiec dowolny klawisz<br />
moze wyzwolic zdarzenia.<br />
Zwykle jednak zdarzenia klipu filmowego sa<br />
uzywane w polaczeniu z drugim zestawem<br />
wyrazen ActionScript, sluzacym do<br />
maksymalnego wyzyskiwania zdarzen lub<br />
dokonywania dodatkowych manipulacji<br />
informacja zwiazana ze zdarzeniem.<br />
Rys. 5.38. Opcje zdarzenia klipu filmowego<br />
dostepne dla akcji onClipEvent<br />
138
Zarzadzanie zasobami Flasha<br />
Rys. 5.39. Zdarzenie klipu filmowego Mouse up<br />
Zdarzenia Key up i Key down w kombinacji<br />
z wyrazeniami warunkowy mi, sprawdzajacymi,<br />
który klawisz nacisnieto (za pomoca obiektu<br />
Key), przynosza lepsze efekty w detekcji<br />
nacisnietego klawisza, niz którekolwiek z nich –<br />
zastosowane pojedynczo. W poprzednim<br />
rozdziale, na przyklad, utworzyles wyrazenie<br />
warunkowe z obiektem Key, ale musiales<br />
jednoczesnie stworzyc petle w glównej listwie<br />
czasowej, aby wyrazenie bylo nieustannie<br />
sprawdzane. Po przypisaniu zdarzenia Key up<br />
lub Key down do klipu filmowego nie bedziesz<br />
wiecej potrzebowal petli.<br />
Zdarzenie EnterFrame jest wyzwalane zgodnie<br />
z dana predkoscia odtwarzania (FPS) filmu. Tak<br />
wiec, jesli wynosi ona 12 klatek na sekunde,<br />
zdarzenie to jest wyzwalane 12 razy w ciagu<br />
sekundy. Warto zwrócic uwage, ze wyrazenia<br />
przypisane do zdarzenia EnterFrame Flash<br />
bedzie wykonywal nieustannie. Skoro klipy<br />
filmowe naturalnie sie zapetlaja, to i wyrazenia<br />
przypisane do zdarzenia EnterFrame beda<br />
wykonywane nieprzerwanie.<br />
Takze zdarzenie Mouse move jest uzywane<br />
w zwiazku z dodatkowymi wyrazeniami,<br />
umozliwiajac sledzenie polozenia kursora.<br />
Kiedy tylko mysz zostanie przesunieta,<br />
zaktualizowana zostanie jej pozycja. Nauczysz<br />
sie wykorzystywac te i inne zdarzenia klipu<br />
filmowego w kolejnych rozdzialach,<br />
podejmujacych zagadnienia zwiazane<br />
z kontrolowaniem wlasciwosci klipów<br />
filmowych i wprowadzaniem do Flasha<br />
róznych elementów z zewnatrz.<br />
W celu wykrycia podstawowego zdarzenia<br />
zwolnienia klawisza myszy:<br />
1. Utwórz symbol klipu filmowego<br />
i przeciagnij jego klon z biblioteki na scene.<br />
2. Zaznacz klon klipu filmowego i otwórz<br />
palete akcji.<br />
3. Z okna narzedzi palety wybierz Actions/<br />
onClipEvent.<br />
4. W bloku edycji parametrów wybierz<br />
Mouse up (rys. 5.39).<br />
Manipulatory klipów filmowych<br />
139
Rozdzial 5.<br />
Manipulatory klipów filmowych<br />
5. W oknie narzedzi wybierz Actions/<br />
evaluate .<br />
6. W polu Expression wprowadz sciezke<br />
dostepu, nastepnie wpisz kropke i dalej<br />
podstawowa akcje (rys. 5.40). Akcja ta<br />
zostanie wykonana po wykryciu zdarzenia<br />
klipu filmowego.<br />
7. Przetestuj film.<br />
Jak tylko zwolnisz klawisz myszy<br />
(w którymkolwiek miejscu na scenie), wykryte<br />
zostanie zdarzenie klipu filmowego Mouse up<br />
i Flash wykona akcje okreslona w wyrazeniu<br />
evaluate .<br />
Wskazówka<br />
• Po zaznaczeniu klipu filmowego wystarczy<br />
tylko wybrac akcje i Flash automatycznie<br />
wstawi manipulator zdarzenia klipu<br />
filmowego przed akcje. Domyslne zdarzenia<br />
klipu filmowego to onClipEvent (load).<br />
Zeby je zmienic, zaznacz to wyrazenie,<br />
a nastepnie wybierz inne zdarzenie.<br />
W celu uzycia zdarzen Key up<br />
lub Key down wraz z obiektem Key:<br />
1. Utwórz symbol klipu filmowego<br />
i przeciagnij jego klon z biblioteki na scene.<br />
2. Zaznacz klon i otwórz palete akcji.<br />
3. W oknie narzedzi palety wybierz Actions/<br />
onClipEvent.<br />
4. W bloku edycji parametrów wybierz Key up<br />
lub Key down (rys. 5.41).<br />
5. Wybierz Actions/if. W bloku edycji<br />
parametrów pojawi sie pole Condition.<br />
6. W polu Condition wprowadz wyrazenie:<br />
Key.getCode()==Key.SPACE<br />
Pierwszy fragment wyrazenia wywoluje<br />
metode getCode() obiektu Key,<br />
zwracajaca ostatnio wcisniety klawisz.<br />
Ostatni fragment wyrazenia stanowi<br />
wlasciwosc obiektu Key, specyfikujaca<br />
klawisz spacji. Podwójny znak równosci (=)<br />
oznacza sprawdzenie równosci.<br />
Rys. 5.40. Pole Expression dla wyrazenia<br />
evaluate<br />
Rys. 5.41. Zdarzenie klipu filmowego Key up<br />
140
Zarzadzanie zasobami Flasha<br />
Rys. 5.42. Akcja nextFrame() pojawia sie<br />
w glównej listwie czasowej, kiedy wystapi<br />
zdarzenie Key up i warunek if okaze sie<br />
prawdziwy<br />
Rys. 5.43. Zdarzenie klipu filmowego<br />
EnterFrame<br />
Rys. 5.44. Akcja nextFrame() wystepuje<br />
w glównej listwie czasowej kiedy spelniony<br />
zostaje warunek w wyrazeniu if<br />
Wskazówka<br />
• Zawsze, gdy chcesz, zeby wyrazenie<br />
ActionScript bylo wykonywane nieustannie,<br />
uzywaj zdarzenia klipu filmowego<br />
onClipEvent (enterFrame).<br />
Z nastepnych akapitów dowiesz sie, jak<br />
wykorzystac to zdarzenie do sprawdzenia<br />
czasu wczytywania sie filmu do okna<br />
witryny sieciowej.<br />
7. Wybierz Actions/evaluate .<br />
8. W polu Expression w bloku edycji<br />
parametrów wprowadz sciezke dostepu, po<br />
niej wpisz kropke i na koncu podstawowa<br />
akcje (rys. 5.42).<br />
9. Przetestuj film. Metoda getCode() obiektu<br />
Key zwraca ostatnio wcisniety klawisz. Jesli<br />
jednak uzyjesz zdarzenia klipu filmowego<br />
Key up, Flash tylko sprawdzi warunek<br />
obiektu Key, kiedy klawisz zostanie<br />
zwolniony. Kombinacja tych dwóch<br />
elementów daje ci dostep jednoczesnie<br />
do wlasciwosci obiektu Key i zdarzenia<br />
Key up, odpowiedzialnego za zwolnienie<br />
klawisza.<br />
W celu utworzenia petli akcji<br />
za pomoca zdarzenia EnterFrame:<br />
1. Utwórz symbol klipu filmowego<br />
i przeciagnij jego klon z biblioteki na scene.<br />
2. Zaznacz klon i otwórz palete akcji.<br />
3. Wybierz Actions/onClipEvent.<br />
4. W bloku edycji parametrów wybierz<br />
EnterFrame (rys. 5.43).<br />
5. Wybierz Actions/if. W bloku edycji<br />
parametrów pojawi sie pole Condition.<br />
6. W polu Condition wprowadz wyrazenie:<br />
Key.getCode()==Key.SPACE<br />
Jest to takie samo wyrazenie warunkowe,<br />
jakie skonstruowales w poprzednim<br />
cwiczeniu. Jednak w tym przypadku Flash<br />
nie czeka ze sprawdzeniem warunku na<br />
pojawienie sie zdarzenia Key up lub Key<br />
down. Tutaj warunek jest sprawdzany przy<br />
kazdym odtworzeniu klatki klipu<br />
filmowego.<br />
7. Wybierz Actions/evaluate .<br />
8. W polu Expression w bloku edycji<br />
parametrów wprowadz sciezke dostepu,<br />
kropke i na koncu podstawowa akcje<br />
(rys. 5.44).<br />
9. Przetestuj film.<br />
Manipulatory klipów filmowych<br />
141
Rozdzial 5.<br />
Animacje wstepne<br />
Animacje wstepne<br />
Caly wysilek wlozony w przygotowanie<br />
zlozonych elementów interaktywnych,<br />
dzialajacych na wielu listwach czasowych,<br />
pójdzie na marne, jesli odbiorca filmu bedzie<br />
musial czekac zbyt dlugo na jego wczytanie do<br />
okna witryny sieciowej lub wrecz zrezygnuje<br />
z jej ogladania. Mozna tego uniknac dzieki<br />
przygotowaniu krótkich animacji zajmujacych<br />
uwage uzytkownika i niedopuszczajacych do<br />
odtworzenia glównego filmu Flasha do<br />
momentu, kiedy do komputera uzytkownika<br />
zostanie przekazana z sieci wystarczajaca ilosc<br />
danych. Oznacza to, ze odtwarzanie jest<br />
opózniane, dopóki nie beda gotowe wszystkie<br />
klatki filmu. Dopiero wtedy rozpoczyna sie<br />
odtwarzanie od pierwszego ujecia. W czasie<br />
oczekiwania na ukonczenie ladowania filmu<br />
powszechnie stosowanym urozmaiceniem sa<br />
animacje wstepne (preloaders) lub inne<br />
króciutkie, zapetlone animacje, przykuwajace<br />
uwage odbiorców. Takie animacje wstepne<br />
musza miec niewielkie rozmiary, z uwagi na to,<br />
iz maja sie wczytywac niemal natychmiast,<br />
a takze powinny byc komunikatywne,<br />
pozwalajac ocenic odbiorcom, na co czekaja,<br />
ewentualnie – jak dlugo to ma potrwac.<br />
Istnieja dwa sposoby tworzenia wyrazen<br />
warunkowych wewnatrz animacji wstepnych,<br />
pozwalajacych sprawdzic ilosc wczytanych<br />
klatek. Pierwszy z nich opiera sie na akcji<br />
ifFrameLoaded. Chociaz jest to jedna<br />
z odrzuconych akcji, latwo zrobic z niej uzytek,<br />
poniewaz wystarczy tylko okreslic pozadana<br />
liczbe klatek w jednym prostym wyrazeniu.<br />
Wada akcji ifFrameLoaded jest to, ze nie<br />
podaje ona informacji o tym, ile klatek zostalo<br />
wczytanych w stosunku do calkowitej liczby<br />
klatek twojego filmu. Dla uzyskania takiej<br />
informacji uzywa sie wlasciwosci<br />
_framesloaded i _totalframes. Kiedy te<br />
dwie wlasciwosci sa porównywane w wyrazeniu<br />
warunkowym z akcja if, mozna przygotowac<br />
animacje wstepna, mierzaca ilosc wczytanych<br />
klatek i wyswietlajaca pasek postepu.<br />
142
Zarzadzanie zasobami Flasha<br />
Akcja stop<br />
W czasie odtwarzania animacji<br />
wstepnej jednoczesnie sprawdzany jest<br />
postep we wczytywaniu<br />
Po wczytaniu wszystkich klatek rozpoczyna sie ich<br />
odtwarzanie, a klon animacji wstepnej jest usuwany<br />
z glównej listwy czasowej<br />
Rys. 5.45. Zasada funkcjonowania animacji<br />
wstepnej. Klip filmowy jest odtwarzany, dopóki<br />
nie bedzie dostepna wystarczajaca ilosc klatek.<br />
Dopiero wtedy rozpoczyna sie odtwarzanie ujec<br />
z glównej listwy czasowej<br />
W przypadku obu typów animacji<br />
wstepnych strategia jest taka sama. Taka<br />
animacja to z reguly klip filmowy<br />
rezydujacy w pierwszym ujeciu na glównej<br />
listwie czasowej. Omawiane ujecie zawiera<br />
akcje stop, zabezpieczajaca film przed<br />
odtworzeniem. Zdarzenie klipu filmowego<br />
EnterFrame sprawdza, czy okreslone ujecia<br />
z glównej listwy czasowej zostaly juz<br />
wczytane. Jesli warunek jest spelniony,<br />
Flash przechodzi do odtwarzania ujec<br />
z glównej listwy czasowej. W przypadku,<br />
gdy warunek nie zostanie spelniony,<br />
w dalszym ciagu odtwarzana bedzie<br />
animacja zawarta w klipie filmowym<br />
(rys. 5.45).<br />
W celu utworzenia<br />
prostej animacji wstepnej:<br />
1. Utwórz symbol klipu filmowego<br />
zawierajacy krótka animowana petle, sluzaca<br />
jako zabawne urozmaicenie (rys. 5.46).<br />
2. Przeciagnij klon symbolu z biblioteki na<br />
scene.<br />
3. Zaznacz pierwsze ujecie kluczowe na<br />
glównej listwie czasowej i przypisz mu<br />
akcje stop.<br />
Animacje wstepne<br />
Rys. 5.46. Ten wstepny klip filmowy zawiera<br />
animacje goscia przytupujacego sobie noga<br />
i wyswietla wyjasniajacy tekst. Animacja<br />
bedzie odtwarzana w petli<br />
143
Rozdzial 5.<br />
Animacje wstepne<br />
4. Wstaw nowe ujecie kluczowe w klatce 2.<br />
i utwórz swoja glówna animacje, zaczynajac<br />
od tego punktu (5.47).<br />
5. Zaznacz klip filmowy i otwórz palete akcji.<br />
6. Wybierz Actions/onClipEvent. W bloku<br />
edycji parametrów wybierz EnterFrame.<br />
7. Wybierz Actions/onClipEvent. W bloku<br />
edycji parametrów wybierz odpowiednia<br />
klatke (rys. 5.48). Warunek zostanie<br />
spelniony w momencie wczytania podanej<br />
ilosci klatek, a wówczas Flash wykona akcje<br />
podana w wyrazeniu ifFrameLoaded.<br />
8. Wybierz Actions/evaluate . W polu<br />
Expression wprowadz:<br />
_root.gotoAndPlay(2)<br />
Wpisanie _root jest konieczne z uwagi<br />
na fakt, ze zdarzenie klipu filmowego<br />
przypisane jest do listwy czasowej klipu<br />
filmowego, nie do listwy czasowej<br />
glównego filmu.<br />
9. Przetestuj film. Z menu View wybierz<br />
Bandwidth Profiler. Jest to okno<br />
informacyjne powyzej twojego filmu,<br />
dostepne w trybie Test Movie, a pokazujace<br />
liczbe klatek filmu oraz ilosc danych<br />
w kazdym ujeciu – w postaci pionowych<br />
slupków (rys. 5.49). Jesli slupki wykraczaja<br />
poza dolna pozioma czerwona linie, to<br />
znaczy, ze ilosc danych jest zbyt duza –<br />
jak na wybrane ustawienie przepustowosci<br />
(bandwidth) – i beda one odczytywane<br />
skokowo.<br />
10. Z menu View wybierz Show Streaming.<br />
Akcja stop<br />
Klip filmowy<br />
animacji wstepnej<br />
Rys. 5.47. Glówna listwa czasowa zawiera<br />
animacje wstepna w pierwszym ujeciu,<br />
a takze reszte filmu pojawiajacego sie pózniej<br />
Rys. 5.48. Zeby warunek ifFrameLoaded<br />
zostal spelniony, klatka 10. musi zostac<br />
wczytana do konca. Skoro Flash wczytuje<br />
ujecia sekwencyjnie, to znaczy, ze najpierw<br />
musza byc wczytane klatki od 1. do 9.<br />
Przepustowosc polaczenia<br />
Ujecia filmu, które<br />
zostana wczytane<br />
Powoduje przerwy<br />
w odtwarzaniu<br />
Klatka 10.<br />
Rys. 5.49. Okno narzedzia Bandwidth<br />
Profiler pokazuje pojedyncze klatki<br />
powodujace przerwy w odtwarzaniu, gdyz<br />
ilosc danych przekracza ustawiona<br />
przepustowosc polaczenia. Dodatkowe jasne<br />
i ciemne slupki reprezentuja rózne ujecia<br />
144
Zarzadzanie zasobami Flasha<br />
Aktualnie<br />
odtwarzane ujecie<br />
Wskaznik postepu<br />
ladowania<br />
Flash umozliwia zasymulowanie okreslonej<br />
przepustowosci polaczenia (rys. 5.50). Zielony<br />
pasek u góry jest wskaznikiem postepu.<br />
Trójkatny znacznik wskazuje punkt poczatkowy<br />
odtwarzania – znajduje sie on w klatce 1. do<br />
momentu, kiedy wskaznik postepu minie klatke<br />
podana przez ciebie w parametrze<br />
ifFrameLoaded. Dopiero wtedy nastapi skok<br />
do klatki 2. i rozpocznie sie odtwarzanie filmu.<br />
Wskazówka<br />
Wskaznik postepu<br />
ladowania<br />
Rys. 5.50. Okno narzedzia Bandwidth Profiler<br />
po wybraniu Show Streaming<br />
Bandwidth Profiler jest bardzo porecznym<br />
narzedziem, pozwalajacym ocenic sposób<br />
przeplywu danych w twoich filmach Flasha<br />
oraz szybkosc wczytywania do okna witryny<br />
sieciowej. W trybie Test Movie wybierz<br />
View/Bandwidth Profiler (lub wcisnij<br />
Ctrl+B ), aby uzyskac taka informacje. W<br />
lewym segmencie okna podawane sa<br />
informacje o filmie, np. rozmiar sceny,<br />
predkosc odtwarzania, rozmiar pliku, calkowity<br />
czas trwania filmu oraz animacji wstepnej<br />
(w klatkach i sekundach). Znajdziesz tam takze<br />
ustawienia przepustowosci, symulujace<br />
rzeczywista szybkosc transferu dla ustawionej<br />
wartosci. Wartosc te mozna zmienic w menu<br />
Debug, wybierajac prawdopodobna predkosc<br />
modemu odbiorcy filmu. Wybrac mozna np.<br />
pomiedzy wartosciami 28,8 i 56 kb.<br />
Wykres po prawej stronie okna narzedzia<br />
Bandwidth Profiler pokazuje, jaka ilosc<br />
danych zawiera kazda z klatek w twoim filmie.<br />
Narzedzie Bandwidth Profiler<br />
• Nie ujrzysz animacji wstepnej w dzialaniu,<br />
dopóki twoja glówna animacja nie bedzie<br />
zawierala odpowiednio duzych grafik,<br />
wymagajacych dluzszego czasu ladowania.<br />
Jezeli przygotowales mala animacje,<br />
animacja wstepna tylko mignie, jako ze dane<br />
zostana wczytane bardzo szybko i niemal<br />
natychmiast rozpocznie sie odtwarzanie<br />
glównego filmu.<br />
Wykres ten mozna wyswietlic na dwa<br />
sposoby: w trybie Streaming Graph<br />
(View/Streaming Graph) lub w trybie<br />
Frame By Frame Graph (View/Frame<br />
By Frame Graph). Pierwszy tryb prezentuje<br />
przebieg ladowania filmu na strone metoda<br />
strumieniowa, drugi pozwala zobaczyc ilosc<br />
danych w poszczególnych klatkach. W trybie<br />
Streaming Graph mozesz okreslic, które<br />
z ujec beda prawdopodobna przyczyna<br />
opóznien w odtwarzaniu. Wystarczy, ze<br />
spojrzysz na slupki przekraczajace ustawiona<br />
wartosc przepustowosci.<br />
Zeby poznac rzeczywista szybkosc transmisji<br />
twojego filmu, wybierz View/Show<br />
Streaming. Flash zasymuluje odtwarzanie<br />
filmu na witrynie sieciowej przy zadanej<br />
szybkosci polaczenia. Zielony poziomy pasek<br />
w górze okna pokazuje klatki, które zostaly<br />
juz wczytane, podczas gdy ikona trójkata<br />
oznacza aktualnie odtwarzana klatke.<br />
Animacje wstepne<br />
145
Rozdzial 5.<br />
Animacje wstepne<br />
W celu utworzenia<br />
zlozonej animacji wstepnej:<br />
1. Utwórz symbol klipu filmowego<br />
zawierajacy krótka sekwencje animacji<br />
z czytelnie zaznaczonymi poczatkiem<br />
i zakonczeniem (rys. 5.51).<br />
2. Przeciagnij klon symbolu z biblioteki<br />
na scene.<br />
3. Zaznacz pierwsze ujecie kluczowe na<br />
glównej listwie czasowej i przypisz mu<br />
akcje stop.<br />
4. Wstaw nowe ujecie kluczowe w klatce 2.<br />
i utwórz swoja glówna animacje, zaczynajac<br />
od tego punktu.<br />
5. Zaznacz klip filmowy i otwórz palete akcji.<br />
6. Wybierz Actions/onClipEvent, a w bloku<br />
edycji parametrów – EnterFrame .<br />
7. Wybierz Actions/if.<br />
8. W polu Condition wpisz:<br />
_root._framesloaded >=<br />
_root._totalframes<br />
Pierwszy czlon wyrazenia zwraca ilosc<br />
klatek juz wczytanych do glównej listwy<br />
czasowej. Drugi czlon zwraca calkowita<br />
liczbe ujec w glównej listwie czasowej.<br />
Znak „wieksze niz” (>) oraz znak równosci<br />
(=), wystepujace razem, oznaczaja „wieksze<br />
lub równe niz” .<br />
9. Wybierz Actions/evaluate . W polu<br />
Expression wpisz:<br />
_root.gotoAndPlay(2)<br />
10. Teraz wybierz Actions/else. Wyrazenie<br />
else wprowadza alternatywe dla<br />
pierwszego warunku w wyrazeniu if. Jezeli<br />
warunek zostanie spelniony, Flash przejdzie<br />
do klatki 2. na glównej lis twie czasowej<br />
i rozpocznie odtwarzanie. W przypadku<br />
niespelnienia warunku, Flash mimo<br />
wszystko wykona wszelkie akcje<br />
poprzedzone wyrazeniem else.<br />
Rys. 5.51. Ten klip filmowy zawiera animacje<br />
wypelniajacego sie paska oraz wyjasniajacy<br />
tekst umieszczony powyzej<br />
146
Zarzadzanie zasobami Flasha<br />
Rys. 5.52. Kompletny kod ActionScript dla tej<br />
nieco bardziej skomplikowanej animacji wstepnej<br />
Rys. 5.53. Narzedzie Bandwidth Profiler po<br />
wybraniu Show Streaming. Zwróc uwage, jak<br />
postep w ladowaniu (5 z 10 klatek zostalo<br />
calkowicie wczytanych) wplywa na proporcje<br />
pokazywane na wskazniku (okolo 50 procent)<br />
w czasie jego animacji (klip filmowy animacji<br />
wstepnej)<br />
11. Wybierz Actions/evaluate . W polu<br />
Expression wpisz:<br />
this.gotoAndStop<br />
(Math.floor<br />
((_root._framesloaded/<br />
_root._totalframes)*<br />
this._totalframes))<br />
To wyrazenie wyglada dosc<br />
skomplikowanie, ale okaze sie proste, kiedy<br />
juz raz je odczytasz. Oblicza ono ilosc klatek<br />
zaladowanych do glównej listwy czasowej,<br />
a nastepnie przeskakuje do odpowiedniej<br />
klatki na listwie czasowej animacji wstepnej.<br />
Spróbujmy przeanalizowac kod. Po<br />
pierwsze, wewnetrzne wyrazenie<br />
_root._framesloaded/_root.<br />
_totalframes<br />
podaje ilosc wczytanych klatek. Ta linia<br />
zostaje pomnozona przez wyrazenie<br />
this._totalframes, które okresla ilosc<br />
klatek w animacji wstepnej. Dalej uzywamy<br />
metody floor obiektu Math, zamieniajacej<br />
dowolna wartosc na liczbe calkowita<br />
(i zaokraglajacej w dól). Wkrótce nauczysz<br />
sie wiecej o obiekcie Math; na razie<br />
wystarczy wiedziec, ze umozliwia on<br />
wykonywanie obliczen matematycznych.<br />
Kiedy wiec Flash ma juz liczbe calkowita<br />
(czyli taka, która nie zawiera ulamków lub<br />
czesci dziesietnych), uzywa jej jako numeru<br />
ujecia w wyrazeniu this.gotoAndStop<br />
(rys. 5.52).<br />
12. Przetestuj film za pomoca narzedzia<br />
Bandwidth Profiler w trybie Show<br />
Streaming (rys. 5.53).<br />
Animacje wstepne<br />
147
Rozdzial 5.<br />
Animacje wstepne<br />
Wskazówki<br />
• Wartosc zwracana przez wyrazenie<br />
_framesloaded/_totalframes nie<br />
odpowiada dokladnie wskazaniom postepu<br />
wczytywania. Odpowiada ona procentowej<br />
ilosci ujec, ale niekoniecznie procentowej<br />
ilosci danych. Jesli twój film zawiera dane<br />
rozrzucone po róznych ujeciach, wartosc<br />
wyrazenia _framesloaded/<br />
_totalframes nie da ci obrazu ilosci<br />
danych dotychczas zaladowanych i ilosci<br />
wciaz jeszcze oczekiwanej.<br />
• To tylko jeden z wielu sposobów na<br />
przygotowanie animacji wstepnej,<br />
obrazujacej postep wczytywania filmu.<br />
Jednak podstawowa idea dzialania tej<br />
funkcji jest jednakowa dla kazdego z nich.<br />
Najpierw porównujesz wlasciwosci<br />
_framesloaded oraz _totalframes.<br />
Potem sprawiasz, zeby twój klip filmowy<br />
animacji wstepnej odpowiadal w jakis<br />
sposób rosnacej powoli wartosci zwracanej<br />
przez wyrazenie _framesloaded/<br />
_totalframes. W kolejnych rozdzialach<br />
nauczysz sie, w jaki sposób szacowac inne<br />
wlasciwosci filmu, np. ich rozmiar lub<br />
krycie. Tak wiec, zamiast odtwarzac<br />
niektóre tylko klatki, mozna – w zaleznosci<br />
od postepu w ladowaniu – zwiekszac<br />
rozmiar okna klipu filmowego lub jego<br />
krycie.<br />
148
Zarzadzanie<br />
zasobami zewnetrznymi<br />
6<br />
Czesci skladowe jezyka HTML<br />
Flash udostepnia potezne narzedzia do zarzadzania komunikacja z innymi aplikacjami oraz<br />
zewnetrznymi danymi, skryptami i plikami, zwiekszajacymi funkcjonalnosc programu. Uzywajac<br />
Flasha do laczenia sie z siecia, mozesz tworzyc strony laczace animacje i interaktywnosc Flasha<br />
z innymi mediami dostepnymi dla przegladarki, a w efekcie projektowac dynamiczne interfejsy<br />
i przyciski we Flashu, dajace dostep do dokumentów PDF, scen QuickTime VR, a nawet apletów<br />
jezyka Java. Uzywaj Flasha do laczenia sie z witrynami FTP, wysylania poczty, komunikowania<br />
z jezykiem JavaScript lub wymiany informacji z serwerami korzystajacymi z metod CGI Get<br />
i Post. Flash wspiera takze standard XML, pozwalajacy tworzyc indywidualny kod na potrzeby<br />
rozwiazan dla elektronicznego biznesu. Niniejszy rozdzial wprowadzi cie w zagadnienia<br />
komunikacji Flasha z formatami HTML, JavaScript, CGI i XML. Flasha mozna tez uzywac do<br />
komunikacji z innymi filmami Flasha w sieci, ladujac jeden lub wiecej filmów tylko wtedy, gdy<br />
sa potrzebne. Dzieki temu mozliwe staje sie tworzenie latwych w edycji i niewielkich<br />
w rozmiarach modularnych projektów. Na przyklad, twój glówny film Flasha móglby sluzyc<br />
za rodzaj interfejsu, wczytujacego kolejne filmy w momencie, kiedy uzytkownik je wybierze.<br />
Ponadto Flash integruje sie z narzedziem Macromedia Generator, udostepniajacym w sieci<br />
wizualna zawartosc projektu w czasie rzeczywistym. Jesli wbudujesz do dokumentów Flasha<br />
szablony Generatora mozliwe stanie sie uaktualnianie danych „w locie” z poziomu bazy danych<br />
klienta.<br />
W tym rozdziale dowiesz sie tez, czym sa samodzielne odtwarzacze Flasha, zwane projektorami<br />
(projectors), i jak specjalne instrukcje pozwalaja okreslic ich wyglad, funkcje oraz charakter<br />
wspólpracy z innymi programami. Jako ze projektory nie potrzebuja przegladarki, by móc<br />
funkcjonowac, sa one idealnym sposobem dystrybucji dokumentów Flasha za pomoca nosników<br />
CD-ROM lub innych mediów.<br />
Na koniec zobaczysz, w jaki sposób Flash komunikuje sie z drukarka. Program umozliwia<br />
odbiorcy wydrukowanie tekstu i grafiki calej sceny lub jej czesci, w tym elementów<br />
niewidocznych na scenie.<br />
Z taka róznorodnoscia opcji drukowania, wyrafinowanymi sposobami komunikacji z siecia<br />
i serwerami, a takze mozliwoscia dokonywania natychmiastowych aktualizacji, Flash staje sie<br />
kluczowym elementem w budowaniu dynamicznych, komercyjnych aplikacji.<br />
Zarzadzanie zasobami zewnetrznymi<br />
149
Rozdzial 6.<br />
Komunikacja<br />
Komunikacja<br />
za posrednictwem przegladarki<br />
internetowej<br />
Flash laczy sie z przegladarka internetowa za<br />
posrednictwem podstawowej akcji getURL<br />
dostepnej z palety akcji (rys. 6.1). Akcja ta jest<br />
bardzo zblizona do znacznika <br />
w HTML-u, gdzie adres URL witryny podaje<br />
sie w formie – http://www.nazwadomeny.<br />
com/katalog. Adresów URL bezwzglednych<br />
(kompletnych adresów okreslonego pliku)<br />
uzywa sie do laczenia z dowolna witryna<br />
sieciowa, natomiast adresów URL wzglednych<br />
(sciezek dostepu do pliku pozostajacego<br />
w relacji z biezacym katalogiem) uzywa sie<br />
do laczenia z plikami lokalnymi, znajdujacymi<br />
sie na dysku lub nosniku CD-ROM. Ponadto<br />
akcja getURL umozliwia dostep do róznych<br />
ujec tworzonych wewnatrz okna przegladarki,<br />
a takze calkiem nowych okien przegladarki.<br />
Mozesz tworzyc filmy Flasha funkcjonujace<br />
w obrebie tych ujec oraz okien i miec kontrole<br />
od tym, co jest wczytywane do kazdego z nich.<br />
Laczenie sie z siecia<br />
Wykorzystaj akcje getURL do nawiazania<br />
polaczenia z siecia, poslugujac sie<br />
standardowym schematem http://, za którym<br />
podaje sie reszte adresu sieciowego. Uzywaj<br />
schematów odpowiednich dla rodzaju<br />
protokolu, np. ftp:// dla transmisji plików,<br />
czy mailto: w przypadku poczty.<br />
Jesli odtworzysz swój film Flasha za pomoca<br />
polecenia Control/Test Movie lub uzywajac<br />
odtwarzacza Flasha, akcja getURL spowoduje<br />
automatyczne uruchomienie domyslnej<br />
przegladarki internetowej i wczytanie podanej<br />
witryny w nowym oknie.<br />
Rys. 6.1. Akcja getURL na palecie akcji<br />
Rys. 6.2. Akcja getURL posiada parametry:<br />
adres URL (URL), nazwe okna (Window)<br />
oraz metody wstawiania zmiennych do<br />
skryptów CGI (Variables)<br />
Rys. 6.3. Wprowadz adres URL w bloku<br />
edycji parametrów akcji getURL<br />
150
Zarzadzanie zasobami zewnetrznymi<br />
Rys. 6.4. Jezeli pole Window pozostawisz puste,<br />
film Flasha (u góry) polaczy sie z witryna firmy<br />
Macromedia, korzystajac z tego samego okna<br />
(u dolu)<br />
Rys. 6.5. Adres<br />
sieciowy wpisany<br />
w polu URL<br />
zakladki<br />
Character palety<br />
Character<br />
zmienia statyczny<br />
tekst w lacze do<br />
podanej strony<br />
W celu nawiazania polaczenia<br />
z witryna sieciowa<br />
za pomoca akcji getURL:<br />
1. Utwórz symbol przycisku i przeciagnij jego<br />
klon z biblioteki na scene.<br />
2. Zaznacz klon przycisku, otwórz palete akcji<br />
i wybierz Basic Actions/Get URL<br />
(Esc + gu). Przed akcja getURL zostanie<br />
automatycznie wstawiony manipulator<br />
zdarzenia on (release) (rys. 6.2).<br />
3. W polu URL, w bloku edycji parametrów<br />
palety akcji, wpisz pelny adres witryny<br />
sieciowej (rys. 6.3). Pole Expression<br />
pozostaw niezaznaczone.<br />
4. Wyeksportuj swój film i odtwórz za pomoca<br />
odtwarzacza Flasha lub przegladarki. Po<br />
kliknieciu utworzonego przycisku, witryna<br />
sieciowa zostanie wczytana do okna twojego<br />
filmu Flasha (rys. 6.4). Kliknij przycisk<br />
Back (z powrotem) w przegladarce,<br />
a powrócisz do filmu.<br />
Wskazówki<br />
• Z siecia mozesz polaczyc sie takze za pomoca<br />
statycznego bloku tekstowego. W tym celu, za<br />
pomoca narzedzia tekstowego (Text Tool)<br />
utwórz statyczny tekst, a nastepnie – w polu<br />
URL zakladki Character na palecie<br />
Character – wprowadz adres witryny<br />
(rys. 6.5). Po kliknieciu tekstu, w oknie<br />
przegladarki zajmowanym przez film Flasha<br />
zostanie wczytana podana strona internetowa.<br />
• Oprócz klonów przycisków, akcja getURL<br />
moze zostac przypisana takze do ujecia<br />
kluczowego. W takim przypadku akcja<br />
getURL wyzwoli polaczenie z witryna<br />
w momencie odtworzenia tego okreslonego<br />
ujecia. Metoda ta jest uzyteczna przy<br />
automatycznym ladowaniu laczy do innych<br />
witryn – np. po efektownej animacji<br />
wstepnej, ewentualnie jako sposób<br />
nasladowania automatycznie ladowanych<br />
bannerów. Co prawda nie pozwalasz<br />
odbiorcy kontrolowac tego, co sie dzieje, ale<br />
przynajmniej zapraszasz go na przechadzke.<br />
Komunikacja<br />
151
Rozdzial 6.<br />
Komunikacja<br />
W celu rozpoczecia transferu pliku<br />
za posrednictwem protokolu FTP:<br />
1. Tak jak w poprzednim cwiczeniu, utwórz<br />
symbol przycisku i przeciagnij jego klon<br />
z biblioteki na scene.<br />
2. Zaznacz klon przycisku, otwórz palete akcji<br />
i wybierz Basic Actions/Get URL.<br />
Przed akcje getURL zostanie automatycznie<br />
wstawiony manipulator zdarzenia on<br />
(release).<br />
3. W polu URL bloku edycji parametrów<br />
wpisz ftp://, dalej nazwe uzytkownika,<br />
dwukropek, symbol „@” i na koncu pelny<br />
adres FTP lokacji pozadanego pliku<br />
(rys. 6.6). Pole Expression zostaw<br />
niezaznaczone.<br />
4. Wyeksportuj twój film Flasha i uruchom<br />
go w oknie przegladarki lub odtwarzacza<br />
Flasha. Klikniecie utworzonego przycisku<br />
spowoduje wczytanie witryny FTP do okna<br />
zajmowanego przez film Flasha, dajac ci<br />
dostep do zasobów serwera (rys. 6.7).<br />
Rys. 6.6. Adres FTP wpisywany do pola URL<br />
akcji getURL moze zawierac nazwe<br />
uzytkownika i haslo lub po prostu adres FTP<br />
w przypadku anonimowego dostepu<br />
Rys. 6.7. Typowy katalog FTP w oknie<br />
przegladarki<br />
152
Zarzadzanie zasobami zewnetrznymi<br />
Rys. 6.8. Wprowadz adres odbiorcy wiadomosci<br />
po instrukcji mailto: w polu URL. Dodatkowe<br />
adresy oddzielaj za pomoca przecinków<br />
Rys. 6.9. Projekt nowej wiadomosci e-mail<br />
pojawia sie w nowym oknie nad filmem Flasha<br />
Rys. 6.10. Ten adres e-mail jest takze przyciskiem<br />
uruchamiajacym przegladarke za posrednictwem<br />
akcji mailto:<br />
W celu utworzenia<br />
domyslnego adresu e-mail:<br />
1. Ponownie utwórz symbol przycisku<br />
i przeciagnij jego klon z biblioteki na scene.<br />
2. Zaznacz klon przycisku, otwórz palete akcji<br />
i wybierz Basic Actions/Get URL.<br />
3. W polu URL bloku edycji parametrów<br />
wpisz mailto: i adres e-mail osoby, która<br />
powinna otrzymac wiadomosc (rys. 6.8).<br />
Pole Expression pozostaw niezaznaczone.<br />
4. Wyeksportuj film i odtwórz go w oknie<br />
przegladarki lub odtwarzacza Flasha. Po<br />
kliknieciu utworzonego przycisku pojawi sie<br />
projekt nowej wiadomosci z domyslnie<br />
wypelnionym polem adresu odbiorcy<br />
(rys. 6.9). Uzytkownikowi pozostaje wpisac<br />
tresc wiadomosci i jej wyslanie. Utworzony<br />
w ten sposób, za pomoca akcji getURL,<br />
domyslny adres e-mail mozesz wykorzystac<br />
jako sposób na kontakt odbiorców z twoja<br />
witryna i uzyskanie dodatkowych<br />
informacji.<br />
Wskazówka<br />
• Dobrym pomyslem jest wprowadzanie<br />
przeliterowanego adresu e-mail odbiorcy<br />
w akcji getURL mailto: (rys. 6.10). Jesli<br />
przegladarka uzytkownika nie jest<br />
skonfigurowana tak, by móc wysylac<br />
wiadomosci, zamiast projektu nowej<br />
wiadomosci pojawi sie komunikat o bledzie<br />
(rys. 6.11). Dzieki podaniu adresu w pelnym<br />
brzmieniu uzytkownik bedzie mógl go uzyc<br />
w dowolnej aplikacji do przesylania poczty.<br />
Komunikacja<br />
Rys. 6.11. Niektórzy uzywaja oddzielnych<br />
programów do obslugi poczty i przegladania<br />
witryn sieciowych. W takich przypadkach ich<br />
przegladarki nie sa skonfigurowane tak, zeby<br />
wysylac wiadomosci za pomoca laczy Flasha<br />
153
Rozdzial 6.<br />
Komunikacja<br />
Laczenie z plikami lokalnymi<br />
Do okreslania plików lokalnych, a nie plików<br />
w sieci, uzywaj raczej wzglednych sciezek<br />
dostepu niz pelnych adresów URL. Dzieki temu<br />
mozna umieszczac filmy Flasha na dyskietkach<br />
lub plytach CD-ROM bez koniecznosci laczenia<br />
z Internetem. Przykladowo, zamiast uzywac<br />
pelnego adresu URL, http://www.<br />
myServer.com/images/photo.jpg,<br />
wystarczy podac po prostu images/<br />
photo.jpg, a Flash – szukajac pliku o nazwie<br />
photo.jpg – przeszuka tylko folder images.<br />
W celu polaczenia z plikiem lokalnym:<br />
1. Tak jak w poprzednim cwiczeniu, utwórz<br />
symbol przycisku i przeciagnij jego klon<br />
z biblioteki na scene.<br />
2. Zaznacz klon przycisku, otwórz palete akcji<br />
i wybierz Basic Actions/Get URL. Przed<br />
akcje getURL zostanie automatycznie<br />
wstawiony manipulator zdarzenia<br />
on (release).<br />
3. W polu URL bloku edycji parametrów<br />
wprowadz wzgledna sciezke dostepu do<br />
pozadanego pliku. Uzywaj ukosnika (/) do<br />
oddzielania katalogów i dwóch kropek (..)<br />
do przesuwania sie do góry o jeden poziom<br />
w strukturze katalogów (rys. 6.12). Pole<br />
Expression pozostaw niezaznaczone.<br />
4. Wyeksportuj film, a nastepnie umiesc<br />
go wraz z plikiem laczacym w katalogu<br />
zgodnym z hierarchia na dysku (rys. 6.13).<br />
Odtwórz film w przegladarce lub<br />
odtwarzaczu Flasha. Po kliknieciu<br />
utworzonego przycisku Flash wyszuka plik,<br />
korzystajac z podanej sciezki dostepu,<br />
a nastepnie otworzy go w tym samym oknie<br />
przegladarki (rys. 6.14).<br />
Rys. 6.12. Ten wzgledny adres URL<br />
powoduje przejscie do katalogu o jeden<br />
poziom wyzej i odszukanie folderu o nazwie<br />
images, zawierajacego plik photo.jpg<br />
Rys. 6.13. Twój film Flasha (SWF) wraz<br />
z towarzyszacym plikiem HTML znajduja sie<br />
w katalogu na tym samym poziomie<br />
w strukturze, co katalog zawierajacy plik<br />
photo.jpg<br />
154
Zarzadzanie zasobami zewnetrznymi<br />
Wskazówki<br />
• W polu URL akcji getURL mozna wpisac<br />
sciezke dostepu do dowolnego pliku.<br />
Wczytywac mozna pliki HTML, JPEG, GIF,<br />
QuickTime, PDF, jak równiez filmy Flasha.<br />
Trzeba pamietac jedynie o tym, czy<br />
przegladarka odbiorcy jest wyposazona<br />
w odpowiednie pluginy, umozliwiajace<br />
otwieranie wyzej wymienionych formatów<br />
plików.<br />
• W przegladarce Microsoft Internet Explorer<br />
4 lub wczesniejszej w wersji dla Mac OS –<br />
lacze getURL jest wzgledne wobec filmu<br />
Flasha (SWF), ale nie wobec<br />
towarzyszacego pliku HTML. Zwykle<br />
eksportuje sie film Flasha (SWF) wraz<br />
z plikiem HTML do tego samego folderu,<br />
lecz jesli rozdzielisz te dwa pliki, pamietaj,<br />
ze tylko Internet Explorer 5 dla Mac OS<br />
poprawnie odczyta lacze getURL (rys. 6.15).<br />
Komunikacja<br />
Rys. 6.14. Film Flasha (u góry) otwiera plik<br />
lokalny w tym samym oknie przegladarki (u dolu)<br />
Rys. 6.15. Oddzielenie pliku SWF od<br />
towarzyszacego pliku HTML sprawia, ze<br />
w Microsoft Internet Explorerze 4 w wersji<br />
dla MacOS odpowiadajacy tym plikom adres<br />
URL funkcjonuje inaczej. Uzywajac adresu<br />
URL photo.jpg, Internet Explorer szuka<br />
odpowiadajacego mu pliku SWF i moze<br />
próbowac odnalezc go w katalogu data.<br />
Internet Explorer 4 dla Windows i inne<br />
przegladarki wyszukuja plik HTML, wiec<br />
odwolaja sie raczej do katalogu my_Files.<br />
Problem ten nie istnieje jednak w Internet<br />
Explorerze 5 dla MacOS<br />
155
Rozdzial 6.<br />
Komunikacja<br />
Zestawy ramek i okna przegladarki<br />
Kiedy odtwarzasz swój film Flasha w oknie<br />
przegladarki, akcja getURL wczytuje nowa<br />
witryne w tym samym oknie, zajmujac miejsce<br />
filmu Flasha. Jesli chcesz, zeby witryna zostala<br />
wczytana do nowego okna lub nowej ramki, nie<br />
zastepujac filmu Flasha, skorzystaj z opcji<br />
Window akcji getURL (rys. 6.16).<br />
Jaka jest róznica pomiedzy oknem i ramka?<br />
Okna przegladarki moga byc dzielone na<br />
odrebne obszary lub ramki (frames),<br />
zawierajace pojedyncze witryny sieciowe.<br />
Grupa ramek nazywa sie zestawem ramek<br />
(frameset), a odpowiedni plik HTML pozwala<br />
zdefiniowac proporcje i nazwe kazdej ramki<br />
wchodzacej w sklad grupy (rys. 6.17).<br />
Parametr Window moze uzywac nazwy, która<br />
plik HTML zestawu ramek przypisuje ramce<br />
w tym celu, zeby zaladowac adres URL<br />
bezposrednio do wskazanej ramki. Podobnie<br />
uzywa sie atrybutu TARGET znacznika HTML<br />
. Na przyklad, jesli podzielisz<br />
witryne sieciowa na dwie ramki, ramke po<br />
lewej mozesz nazywac Navigator (nawigacja),<br />
a ramke po prawej Contents (zawartosc).<br />
Umiesc film Flasha w ramce Navigator<br />
z przyciskami, którym przypisano akcje<br />
getURL. Wprowadzajac nazwe ramki Conte nts<br />
w polu parametru Window akcji getURL,<br />
nakazujesz ramce po prawej (czyli Contents)<br />
wczytac podany adres URL.<br />
Parametr Window przewiduje takze<br />
wprowadzanie pewnych zarezerwowanych<br />
nazw, mozliwych do wykorzystania (rys. 6.18).<br />
Ponizsza tabela opisuje kazda z nich.<br />
Rys. 6.16. Pole Window daje dostep do menu<br />
rozwijanego, z którego mozesz wybrac<br />
zarezerwowane slowo kluczowe<br />
Rys. 6.17. Typowa witryna korzystajaca<br />
z ramek do dzielenia zawartosci. Okno<br />
podzielone jest poziomo na dwie ramki. Dolna<br />
ramka dodatkowo zostala podzielona na dwie<br />
pionowe ramki. Bannery, suwaki i zawartosc<br />
zwykle sa oddzielane w ten sposób<br />
Ramka<br />
Navigator<br />
Ramka<br />
Górna ramka<br />
Film Flasha<br />
(SWF)<br />
Dolna ramka<br />
156<br />
Rys. 6.18. U góry, zestaw ramek dzieli okno<br />
na lewa i prawa ramke. Prawa ramka<br />
zawiera kolejny zestaw ramek, dzielacy ja na<br />
ramke górna oraz dolna. Film Flasha (SWF)<br />
jest odtwarzany w górnej ramce drugiego<br />
zestawu. Nazwa okna okresla miejsce<br />
ladowania adresu URL
Zarzadzanie zasobami zewnetrznymi<br />
Rys. 6.19. Plik z zestawem ramek (u góry) dzieli<br />
okno na dwie kolumny: lewa, o nazwie Navigator,<br />
majaca 20% szerokosci okna przegladarki<br />
i prawa, o nazwie Contents, majaca 80%<br />
szerokosci okna (u dolu)<br />
Rys. 6.20. Blok edycji parametrów akcji getURL<br />
okresla witryne Google.com jako domyslnie<br />
ladowana do ramki Contents<br />
Tabela 6.1. Parametry Window akcji getURL<br />
Nazwa okna Objasnienie<br />
_self<br />
_blank<br />
_parent<br />
_top<br />
Okresla biezaca ramke aktywnego<br />
okna przegladarki. Jest to domyslne<br />
zachowanie, gdy nie podano<br />
zadnego parametru Window.<br />
Okresla nowe okno przegladarki.<br />
Okresla zestaw ramek zawierajacy<br />
biezaca ramke.<br />
Okresla najwyzszy w hierarchii<br />
zestaw ramek biezacego okna<br />
przegladarki.<br />
W celu uruchomienia<br />
witryny sieciowej<br />
w ramce o okreslonej nazwie:<br />
1. Utwórz zestaw ramek HTML zawierajacy<br />
dwie ramki, z których kazda bedzie miala<br />
unikatowa nazwe. Film Flasha zostanie<br />
uruchomiony w jednej ramce, a lacza do<br />
innych stron pojawia sie w drugiej<br />
(rys. 6.19).<br />
2. Tak jak w poprzednich cwiczeniach, utwórz<br />
symbol przycisku i przeciagnij jego klon<br />
z biblioteki na scene.<br />
3. Zaznacz klon przycisku, otwórz palete akcji<br />
i wybierz Basic Actions/Get URL. Przed<br />
akcje getURL zostanie automatycznie<br />
wstawiony manipulator zdarzenia<br />
on (release).<br />
4. W polu URL, w bloku edycji parametrów<br />
palety akcji, wpisz adres witryny sieciowej,<br />
zaczynajac od http://. Pole Expression<br />
pozostaw niezaznaczone.<br />
5. W polu Window, w bloku edycji<br />
parametrów palety akcji, wpisz nazwe<br />
ramki ustalona w zestawie ramek HTML<br />
(rys. 6.20).<br />
6. Opublikuj film Flasha wraz<br />
z towarzyszacym plikiem HTML. Utwórz<br />
kolejny plik HTML dla nastepnej ramki<br />
z zestawu.<br />
Komunikacja<br />
157
Rozdzial 6.<br />
Komunikacja<br />
7. Nadaj obu plikom HTML nazwy, stosownie<br />
do znaczników <br />
w dokumencie zestawu ramek, a nastepnie<br />
umiesc wszystkie pliki w tym samym<br />
folderze (rys. 6.21).<br />
8. Otwórz w przegladarce dokument zestawu<br />
ramek. Twój film Flasha jest odtwarzany<br />
w jednej ramce, a utworzony przycisk<br />
powoduje wczytanie witryny sieciowej<br />
do kolejnej ramki (rys. 6.22).<br />
W celu uruchomienia<br />
witryny sieciowej w nowym oknie:<br />
1. Utwórz przycisk i przypisz akcje getURL<br />
do jego klonu.<br />
2. W polu URL bloku edycji parametrów<br />
palety akcji wprowadz adres witryny<br />
sieciowej.<br />
3. W polu Window – z menu rozwijanego<br />
wybierz _blank (rys. 6.23).<br />
4. Wyeksportuj film i odtwórz go w oknie<br />
przegladarki lub w odtwarzaczu Flasha.<br />
Klikniecie utworzonego przycisku otwiera<br />
nowe okno, do którego zostaje zaladowana<br />
witryna sieciowa.<br />
lub<br />
1. W polu parametru Window akcji getURL,<br />
zamiast wybierac z menu rozwijanego opcje<br />
_blank, po prostu wpisz unikatowa nazwe<br />
dla twojego nowego okna (rys. 6.24).<br />
2. Wyeksportuj film i odtwórz go w oknie<br />
przegladarki lub w odtwarzaczu Flasha.<br />
Po kliknieciu utworzonego przycisku Flash<br />
wyszuka ramke lub okno o nazwie<br />
okreslonej w polu parametru Window akcji<br />
getURL. W przypadku niemoznosci<br />
zlokalizowania, Flash utworzy nowe okno<br />
o tej samej nazwie.<br />
Rys. 6.21. Plik frameset.html powoduje<br />
umieszczenie pliku contents.html w ramce<br />
Contents i pliku navigator.html w ramce<br />
Navigator. Plik navigator.html wstawia<br />
tez film Flasha (navigator.swf)<br />
Rys. 6.22. Pokazano tu skrypt dla przycisku<br />
umieszczonego w ramce Navigator. Witryna<br />
Google wczytuje sie do drugiej ramki<br />
Rys. 6.23. Po wybraniu opcji _blank z menu<br />
rozwijanego parametru Window, witryna<br />
Peachpit zostanie wczytana do nowego,<br />
nienazwanego okna<br />
Rys. 6.24. Witryna Peachpit zostanie<br />
wczytana do nowego okna o nazwie<br />
myNewWindow, jesli taka wlasnie nazwe<br />
wprowadzono w polu Window<br />
158
Zarzadzanie zasobami zewnetrznymi<br />
Rys. 6.25. Zlozone akcje getURL, z parametrem<br />
Window ustawionym na _blank (u góry) oraz<br />
w przypadku wykorzystania unikatowej nazwy<br />
(u dolu)<br />
Wskazówki<br />
• Istnieje zasadnicza róznica pomiedzy<br />
otwieraniem nowego okna za pomoca opcji<br />
_blank i uzywaniem wlasnorecznie<br />
wprowadzonej nazwy. Jesli skorzystasz<br />
z opcji _blank, to za kazdym razem, gdy<br />
klikniesz przycisk laczacy cie z kolejna<br />
witryna sieciowa, utworzone zostanie nowe<br />
okno. W przypadku posluzenia sie nazwa<br />
wprowadzana w polu Window, klikniecie<br />
przycisku po raz pierwszy spowoduje<br />
otworzenie nowego okna. Kolejne klikniecia<br />
tak naprawde tylko odnajduja nowo<br />
utworzone okno i Flash ponownie odswieza<br />
witryne w istniejacym juz oknie (rys. 6.25).<br />
Obydwie metody sa uzyteczne, w zaleznosci<br />
od tego, czy chcesz umieszczac lacza<br />
w oddzielnych oknach, czy tez lacza te maja<br />
sie zastepowac w pierwszym nowo<br />
utworzonym oknie.<br />
• Zachowuj ostroznosc, tworzac nowe okna<br />
przegladarki, i pamietaj, gdzie sie znajduja.<br />
Czasem moga pozostawac ukryte pod<br />
aktywnym oknem, wczytujac witryny,<br />
których odbiorca nie jest w stanie zobaczyc.<br />
Komunikacja<br />
159
Rozdzial 6.<br />
Uzywanie jezyka JavaScript<br />
do kontrolowania<br />
parametrów nowego okna<br />
Wprawdzie parametr Window akcji getURL<br />
umozliwia skierowanie nowo otwieranych<br />
witryn do nowych okien przegladarki, jednak<br />
wyglad i umiejscowienie tych okien zaleza od<br />
preferencji samej przegladarki. Dla przykladu,<br />
jesli odtworzysz film Flasha w przegladarce<br />
wyswietlajacej pasek adresowy i pasek narzedzi,<br />
a potem otworzysz nowe okno, to bedzie ono<br />
takze zawierac podobne paski. Takich<br />
parametrów okna nie mozna kontrolowac<br />
z poziomu Flasha, ale da sie to zrobic za<br />
pomoca jezyka JavaScript.<br />
W dokumencie HTML przechowujacym twój<br />
film Flasha mozesz zdefiniowac funkcje<br />
JavaScript kontrolujace sposób otwierania,<br />
a nawet zamykania nowych okien przegladarki.<br />
W filmie Flasha, owe funkcje mozna wywolac<br />
za pomoca akcji getURL. Zamiast podawac<br />
w polu URL adres sieciowy, wpisujesz<br />
javascript:, a nastepnie nazwe funkcji. Flash<br />
odnajduje JavaScript w dokumencie HTML<br />
i przegladarka wywoluje podana funkcje.<br />
Jezyka JavaScript mozna uzywac do<br />
kontrolowania wielu wlasciwosci okna.<br />
Wlasciwosci te okreslaja wyglad okien, ich<br />
dzialanie i umiejscowienie na ekranie<br />
(rys. 6.26), a definiuje sie je w funkcji<br />
JavaScript dokumentu HTML za pomoca<br />
okreslen tak (1) lub nie (0), ewentualnie liczby<br />
specyfikujacej rozmiary lub koordynaty.<br />
Ponizsza tabela zawiera zestawienie najczesciej<br />
uzywanych wlasciwosci, zgodnych zarówno<br />
z Internet Explorerem, jak i Netscape<br />
Navigatorem (Tabela 6.2).<br />
Komunikacja<br />
Szerokosc<br />
Góra<br />
Pasek menu<br />
Pasek narzedziowy<br />
Miejsca docelowe<br />
Adres<br />
Wysokosc<br />
Pasek stanu<br />
Pasek przewijania<br />
Lewy róg<br />
Rys. 6.26. Wlasciwosci okna przegladarki mozna ustawiac za pomoca<br />
jezyka JavaScript<br />
Skalowanie<br />
160
Zarzadzanie zasobami zewnetrznymi<br />
Tabela 6.2. Wlasciwosci okna w JavaScript<br />
Wlasciwosc<br />
height<br />
width<br />
left<br />
top<br />
Opis<br />
Rozmiar pionowy w pikselach.<br />
Rozmiar poziomy w pikselach.<br />
Wspólrzedna x lewej krawedzi.<br />
Wspólrzedna y górnej krawedzi.<br />
resizable Obszar skalowania w prawym<br />
dolnym rogu, umozliwiajacy<br />
zmiane rozmiarów okna – tak (nie)<br />
lub 1 (0).<br />
scrollbars Pionowy i poziomy pasek<br />
przewijania – tak (nie) lub 1 (0).<br />
directories Inaczej pasek osobisty, dajacy<br />
dostep do niektórych zakladek –<br />
tak (nie) lub 1 (0).<br />
locations Pasek adresowy, zawierajacy<br />
pole do wpisywania adresu URL –<br />
tak (nie) lub 1 (0).<br />
menubar<br />
status<br />
toolbar<br />
Kod<br />
JavaScript<br />
Pasek menu, zawierajacy menu<br />
rozwijane, np. Plik i Edycja.<br />
Wystepuje tylko w systemie<br />
Windows – tak (nie) lub 1 (0).<br />
Pasek stanu w lewym dolnym<br />
rogu, wyswietlajacy status<br />
przegladarki i zabezpieczenia – tak<br />
(nie) lub 1 (0).<br />
Pasek narzedziowy, z przyciskami<br />
Dalej i Wstecz oraz innymi<br />
ikonami nawigacji – tak (nie) lub 1<br />
(0).<br />
Zdefiniuj wlasciwosci<br />
w metodzie window.open<br />
Rys. 6.27. Kod JavaScript w naglówku dokumentu<br />
HTML. Film Flasha osadzony w tym dokumencie<br />
bedzie wywolywal funkcje openWindow (URL)<br />
W celu uruchomienia nowego okna<br />
za pomoca JavaScriptu:<br />
1. Najpierw musisz zdefiniowac funkcje<br />
w dokumencie HTML, przechowujacym twój<br />
film Flasha. Dodaj nastepujacy fragment<br />
skryptu do naglówka dokumentu HTML:<br />
<br />
function openWindow(URL) {<br />
newWindow = window.open(URL);<br />
}<br />
<br />
Powyzszy skrypt definiuje funkcje<br />
openWindow z argumentem URL. Po<br />
wywolaniu tej funkcji tworzony jest obiekt<br />
newWindow z adresem URL jako adresem<br />
witryny do zaladowania.<br />
2. Teraz dodaj do skryptu wlasciwosci okna,<br />
umieszczajac je w nawiasach przy metodzie<br />
window.open:<br />
<br />
function openWindow(URL) {<br />
newWindow = window.open(URL,<br />
"myNewWindow", "toolbar=0,<br />
location=0,directories=0,<br />
status=0,menubar=0,scrollbars=0,<br />
resizable=0,width=200,height=250,<br />
left=80,top=180")<br />
}<br />
<br />
3. Dodaj nastepujacy parametr wewnatrz<br />
znacznika za parametrami width<br />
i height w kodzie HTML – w miejscu,<br />
w którym wystepuje odwolanie do twojego<br />
filmu Flasha (SWF):<br />
SwLiveConnect=true<br />
To bardzo istotny parametr uruchamiajacy<br />
w interfejsie przegladarki funkcje<br />
zezwalajaca na komunikacje filmu Flasha<br />
z JavaScriptem. Dokument HTML powinien<br />
wygladac podobnie jak na rys. 6.27.<br />
Komunikacja<br />
161
Rozdzial 6.<br />
Komunikacja<br />
4. Teraz zaprojektuj film Flasha komunikujacy<br />
sie z nowo utworzonymi funkcjami<br />
JavaScript. Przygotuj przycisk i przypisz<br />
akcje getURL do jego klonu na scenie.<br />
5. W polu URL wpisz:<br />
javascript:openWindow<br />
('http://www.peachpit.com')<br />
Pole Expression pozostaw niezaznaczone,<br />
a pole Window puste. Adres witryny ujety<br />
w pojedynczy cudzyslów i nawiasy zostaje<br />
podstawiony do funkcji JavaScript jako<br />
argument URL (rys. 6.28).<br />
6. Wyeksportuj film Flasha i otwórz<br />
w przegladarce dokument HTML<br />
przechowujacy plik SWF.<br />
Po kliknieciu utworzonego przycisku –<br />
Flash podstawia adres witryny do funkcji<br />
JavaScript o nazwie openWindow.<br />
Nastepnie funkcja JavaScript tworzy nowe<br />
okno, o parametrach zdefiniowanych<br />
w dokumencie HTML (rys. 6.29).<br />
Wskazówki<br />
• Powyzsza metoda komunikacji Flasha<br />
z JavaScriptem nie bedzie dzialac ze<br />
starszymi wersjami Internet Explorera<br />
(wersja 3. i wczesniejsze), a takze Internet<br />
Explorerem 4.5 lub wczesniejszym dla<br />
Macintosha.<br />
• Istnieje wiecej wlasciwosci okna<br />
w JavaScripcie, lecz wiele z nich dziala<br />
tylko z jedna z dwóch najpopularniejszych<br />
przegladarek. Na przyklad, wlasciwosci<br />
innerHeight oraz innerWidth definiuja<br />
wlasciwy obszar zawartosci okna, ale sa to<br />
wlasciwosci unikalne dla Netscape<br />
Navigatora. Najbezpieczniej jest uzywac<br />
wlasciwosci wymienionych w tabeli 6.2.<br />
Rys. 6.28. Wyrazenie javascript: wywoluje<br />
funkcje openWindow w dokumencie HTML,<br />
zawierajacym film Flasha<br />
Rys. 6.29. Okno bez zadnych dodatkowych<br />
cech nazywa sie oknem „bez wodotrysków”.<br />
„Wodotryski” oznaczaja wszystkie cechy<br />
interfejsu okna<br />
• Tak jak podstawiasz argument URL do<br />
funkcji JavaScript z poziomu Flasha, tak<br />
tez mozesz wymusic na twojej funkcji<br />
openWindow akceptacje wiekszej ilosci<br />
argumentów. W ten sposób mozliwe<br />
staje sie definiowanie wysokosci,<br />
szerokosci i innych wlasciwosci okna<br />
z poziomu Flasha, zamiast<br />
predefiniowania ich za pomoca kodu<br />
JavaScript w dokumencie HTML.<br />
162
Zarzadzanie zasobami zewnetrznymi<br />
Rys. 6.30. Akcja getURL wywoluje funkcje<br />
JavaScript closeWindow. Obiekt okna o nazwie<br />
newWindow zamyka okno<br />
W celu zamkniecia okna<br />
za pomoca JavaScriptu:<br />
1. Kiedy juz otworzysz okno za pomoca<br />
JavaScript, w podobny sposób mozesz<br />
je zamknac. Najpierw zdefiniuj funkcje<br />
JavaScript w dokumencie HTML<br />
przechowujacym twój film Flasha. Potem<br />
wywolaj funkcje akcja getURL. Postepuj<br />
jak w poprzednim cwiczeniu i dodaj nowa<br />
funkcje za funkcja openWindow:<br />
function closeWindow() {<br />
newWindow.close()<br />
}<br />
Funkcja closeWindow zasadniczo<br />
wywoluje metode close() dla obiektu<br />
newWindow, utworzonego w pierwszej<br />
funkcji.<br />
2. Utwórz w twoim filmie drugi przycisk<br />
i przypisz akcje getURL do jego klonu<br />
na scenie.<br />
3. W polu URL wpisz:<br />
javascript:closeWindow()<br />
Pole Expression pozostaw niezaznaczone,<br />
a pole Window puste (rys. 6.30).<br />
4. Wyeksportuj film i otwórz w oknie<br />
przegladarki dokument HTML<br />
przechowujacy plik SWF. Kiedy klikniesz<br />
pierwszy przycisk, utworzony kod<br />
JavaScript spowoduje uruchomienie nowego<br />
okna o nazwie newWindow. Klikniecie<br />
drugiego z przycisków, analogicznie,<br />
zamyka obiekt newWindow.<br />
Wskazówka<br />
• Zwróc uwage, ze nazwa obiektu okna rózni<br />
sie od nazwy okna. Nazwa obiektu sluzy do<br />
zamykania okna, tymczasem nazwa okna<br />
umozliwia wskazanie do niego dostepu<br />
i w efekcie zaladowanie adresu URL.<br />
W powyzszych przykladach obiekt nazywa<br />
sie newWindow, ale nazwa wystepujaca<br />
w sciezkach dostepu to myNewWindow.<br />
Komunikacja<br />
163
Rozdzial 6.<br />
Komunikacja<br />
CGI oraz metoda GET i POST<br />
Ostatni parametr akcji getURL umozliwia<br />
przesylanie informacji za posrednictwem metod<br />
GET i POST. Metody te przesylaja zmienne,<br />
zadeklarowane w filmie Flasha, do aplikacji<br />
serwerowej – np. aplikacji CGI – w celu<br />
przetworzenia. Do przesylania zmiennych<br />
uzywa sie zwykle informacji w rodzaju slów<br />
kluczowych w mechanizmach wyszukiwania,<br />
czy tez nazw logowania i hasel dostepu do<br />
witryn sieciowych. Róznice pomiedzy GET<br />
i POST sa latwo zauwazalne:<br />
Metoda GET dodaje zmienne na koncu adresu<br />
URL w akcji getURL i jest uzywana tylko<br />
z kilkoma typami zmiennych, i to takich, które<br />
przechowuja niewielka ilosc informacji.<br />
Zmienne term=CGI, category=All<br />
i pref=all sa dodawane na koncu adresu<br />
URL w nastepujacy sposób: http://search.<br />
domain.com/cgi-bin/search?term=<br />
CGI&category=All&pref=all<br />
Zapewne widziales juz podobny, dlugi adres<br />
URL, kiedy zazadales odnalezienia informacji<br />
w wyszukiwarce internetowej.<br />
Metoda POST przesyla zmienne w naglówku<br />
HTTP przegladarki uzytkownika. Korzystaj z tej<br />
metody przy przesylaniu dlugich lancuchów<br />
danych w operacjach getURL. Na przyklad,<br />
tablica informacyjna moglaby dzialac lepiej,<br />
jesli uzyc metody POST.<br />
Po przeslaniu do serwera sieciowego, zmienne<br />
sa przetwarzane przez skrypty CGI<br />
w naglówkach URL lub HTTP. Skrypty te<br />
sa obslugiwane przez twojego dostawce<br />
internetowego lub Webmastera, powinienes<br />
wiec tam wlasnie poszukac dodatkowych<br />
informacji.<br />
164
Zarzadzanie zasobami zewnetrznymi<br />
Rys. 6.31. Wybranie Window/Panels/Text<br />
Options otwiera okno dialogowe umozliwiajace<br />
zmiane zwyklego bloku tekstowego w okno<br />
wprowadzania informacji<br />
Rys. 6.32. W polu Variable palety<br />
Text Options wpisz emailStr<br />
W celu przeslania informacji<br />
przy uzyciu metody GET:<br />
1. Wybierz narzedzie tekstowe (Text Tool )<br />
i utwórz na scenie blok tekstowy.<br />
2. Otwórz palete Text Options, wybierajac<br />
Window/Panels/Text Options (rys. 6.31).<br />
3. Na palecie Text Options, z menu<br />
rozwijanego wybierz Input Text. Opcja<br />
ta umozliwia wykorzystanie utworzonego<br />
bloku tekstowego do wprowadzania<br />
informacji.<br />
4. W polu Variable wpisz emailStr<br />
(rys. 6.32). Cokolwiek wpiszesz w bloku<br />
tekstowym, zostanie to przyporzadkowane<br />
do zmiennej o nazwie emailStr.<br />
5. Utwórz przycisk i umiesc jego klon na<br />
scenie,<br />
6. Zaznacz przycisk, otwórz palete akcji<br />
i wybierz Actions/Get URL. Ponizej<br />
zdarzenia myszy on (release) pojawi<br />
sie wyrazenie getURL.<br />
7. W polu URL bloku edycji parametrów<br />
palety akcji wprowadz adres skryptu<br />
serwera – np.<br />
http://www.myserver.com/<br />
cgi-bin/list.cgi<br />
8. W polu Window wybierz _self.<br />
9. Z menu rozwijanego Variables wybierz<br />
Send using GET (rys. 6.33). Zapis akcji<br />
powinien wygladac nastepujaco:<br />
on (release) {<br />
getURL (<br />
"http://www.myserver.com/cgibin/list.cgi",<br />
"_self", "GET");<br />
}<br />
Kiedy uzytkownik wprowadzi w bloku<br />
tekstowym adres e-mail i kliknie przycisk,<br />
adres ten zostanie dopisany na koncu adresu<br />
URL i przeslany do skryptu CGI.<br />
Wiecej o zmiennych i wprowadzaniu tekstu<br />
dowiesz sie w czesci V, „Praca z informacja”.<br />
Komunikacja<br />
165
Rozdzial 6.<br />
Komunikacja<br />
Oprócz standardów HTML i JavaScript, Flash<br />
5 wspiera takze XML. Chociaz wglebienie sie<br />
w XML-a wykracza poza ramy tej ksiazki,<br />
ponizszy krótki akapit pomoze ci pojac<br />
ekscytujace mozliwosci, jakie Flash<br />
wprowadza do XML-a.<br />
XML (skrót od extensible markup language,<br />
strukturalny jezyk znacznikowy) jest poteznym<br />
jezykiem, aktualnie zatwierdzanym przez World<br />
Wide Web Consortium (W3C). Jego rozszerzalna<br />
natura umozliwia definiowanie zawartosci<br />
w zaleznosci od jej znaczenia i kregu odbiorców.<br />
XML bardzo rózni sie od tradycyjnych jezyków<br />
znacznikowych w rodzaju HTML, które mówia<br />
przegladarce, w jaki sposób rozmieszczac<br />
zawartosc – wedlug zasady umiesc tekst tutaj,<br />
ustaw taka czcionke, ustaw go obok tego obrazka.<br />
XML definiuje typy danych, co czyni zen w pelni<br />
skalowalny system – zawartosc nie jest zwiazana<br />
ze sposobem prezentacji i moze byc ustalana<br />
w zaleznosci od wymagan odbiorców. Fragment<br />
kodu XML moze wygladac nastepujaco:<br />
<br />
Big Tents<br />
MYBDAY021570<br />
03SUIRAUQA.GIF<br />
<br />
<br />
All-Weather Tent<br />
<br />
7.25"<br />
7.25"<br />
48.5"<br />
8lbs.<br />
<br />
$75.43<br />
$135.99<br />
<br />
<br />
Komunikacja z obiektami XML<br />
We Flashu 5, XML oraz obiekty<br />
XMLSocket umozliwiaja komunikacje<br />
z innymi aplikacjami i arkuszami stylów<br />
w celu zarzadzania bogata w media<br />
zawartoscia, unikalna dla kazdego<br />
uzytkownika. Przemysly rozrywkowy,<br />
samochodowy, bankowy i handlu<br />
elektronicznego odkryly juz korzysci<br />
plynace z polaczenia Flasha i XML-a.<br />
Prawdziwa aplikacja dla handlu<br />
elektronicznego wprowadza rozszerzalny<br />
interfejs pomiedzy sieciowym sprzedawca<br />
koncowym a jego partnerami,<br />
hurtownikami i dostawcami – za<br />
posrednictwem korzystajacej z technologii<br />
Flasha supersieci. Poslugujac sie Flashem<br />
jako narzedziem do tworzenia interfejsu –<br />
przycisków, pasków przewijania, bloków<br />
wprowadzania tekstu, itd. – mozesz<br />
wyposazyc handlowca w interfejs<br />
przeciagnij-i-upusc, pozwalajacy zamawiac<br />
produkty i odsylac je do magazynu. Ten<br />
sam obiekt XML moze identyfikowac<br />
i umozliwiac hurtownikowi zmiane calego<br />
systemu sprzedazy, jak i poszczególnych<br />
cen w czasie negocjacji dotyczacych<br />
umieszczenia produktu na witrynie<br />
sprzedawcy i prowadzenia kampanii przez<br />
e-mail. Gdyby wykonac je w tradycyjny<br />
sposób, wszystkie te tak rózne formy<br />
sieciowe pochlonelyby olbrzymia ilosc<br />
czasu potrzebnego na ich przygotowanie,<br />
a kolejne trzeba by tworzyc wraz<br />
z pojawianiem sie nowych uzytkowników.<br />
166
Zarzadzanie zasobami zewnetrznymi<br />
XSL jest arkuszem stylu dolaczanym do XML,<br />
a wystarczylby jeden lub dwa takie szablony<br />
do okreslenia róznych typów odbiorcy twoich<br />
projektów Flasha. Arkusz stylu przeksztalca<br />
interfejs w oparciu o typ uzytkownika.<br />
Handlowiec móglby ogladac jakies<br />
strumieniowe dane przedstawiajace dzienna<br />
sprzedaz i zamówienia, jak równiez<br />
negocjowac z hurtownikiem na zywo. Z d rugiej<br />
strony, partner móglby sprawdzic efekty<br />
promocji wsród klientów sprzedawcy<br />
koncowego i zadecydowac o przedluzeniu<br />
promocji na nastepny rok.<br />
Komunikacja z obiektami XML<br />
Flash 5 umozliwia wprowadzenie tej<br />
szczególnie rozszerzalnej warstwy<br />
pomiedzy bogata w media zawartoscia<br />
a systemami negocjacji i przeplywu danych.<br />
XML nie sprawi co prawda, ze twoje<br />
animacje beda bardziej plynne, a przekazy<br />
audio wyrazniejsze, jednak dzieki niemu<br />
latwiej jest tworzyc unikalne i skalowalne<br />
systemy uzytkowania. Jesli chcialbys<br />
nauczyc sie wiecej o XML-u i obiektach<br />
XMLSocket, siegnij do opisu jezyka<br />
ActionScript, który otrzymales wraz<br />
z programem.<br />
Komunikacja<br />
167
Dolaczanie filmów z zewnatrz<br />
Rozdzial 6.<br />
Dolaczanie filmów z zewnatrz<br />
Nauczyles sie juz, jak Flash wykorzystuje akcje<br />
getURL do laczenia sie z dowolnym plikiem,<br />
takze innym filmem Flasha. Wyglada to tak, ze<br />
nowy plik SWF zostaje wczytany do biezacego<br />
okna przegladarki, zastepujac tym samym<br />
pierwotny film, lub tez pojawia sie w zupelnie<br />
nowym oknie. Innym sposobem na dolaczanie<br />
zewnetrznych filmów do oryginalnego filmu<br />
Flasha jest skorzystanie z akcji loadMovieNum<br />
(oznaczona jako Load Movie w grupie Basic<br />
Actions) (rys. 6.34). Akcja ta umozliwia<br />
zintegrowanie dodatkowego pliku SWF<br />
z biezaca zawartoscia. Oryginalny film Flasha<br />
okresla predkosc odtwarzania, rozmiar sceny<br />
i kolor tla, ale mozliwe jest tworzenie warstw<br />
dla kilku zewnetrznych plików SWF, a takze<br />
nawigowanie po ich listwach czasowych.<br />
W poprzednim rozdziale nauczyles sie<br />
kontrolowac listwy czasowe klipów filmowych<br />
w obrebie pojedynczego filmu Flasha. Teraz<br />
spróbuj wyobrazic sobie zlozonosc nawigacji<br />
po wielu listwach czasowych w wielu filmach!<br />
Jedna z korzysci plynacych z wykorzystywania<br />
zewnetrznych filmów Flasha jest ograniczenie<br />
wielkosci calego projektu i skrócenie czasów<br />
ladowania. Jesli, na przyklad, budujesz witryne<br />
sieciowa majaca prezentowac twoje osiagniecia<br />
w tworzeniu animacji Flasha, mozesz<br />
przechowywac poszczególne animacje<br />
w postaci oddzielnych plików SWF. Wystarczy<br />
zaprojektowac glówny interfejs, umozliwiajacy<br />
twoim potencjalnym klientom wczytanie<br />
wybranej animacji w dowolnej chwili. W ten<br />
sposób twoi odbiorcy korzystaja tylko z tej<br />
zawartosci strony, której potrzebuja, i tylko<br />
wtedy, kiedy jest to niezbedne, a glówny<br />
interfejs nie peka w szwach od zawartosci<br />
kazdej jednej animacji (rys. 6.35).<br />
Rys. 6.34. Akcja loadMovieNum w menu<br />
palety akcji<br />
Akcja<br />
loadMovieNum<br />
Rys. 6.35. Sposobem na separowanie bogatej<br />
w dane zawartosci jest wykorzystanie<br />
zewnetrznych plików SWF. W tym przykladzie<br />
film interface.swf wczytuje pliki animacji<br />
jeden po drugim na zadanie<br />
168
Zarzadzanie zasobami zewnetrznymi<br />
Rys. 6.36. Animacja kuli odbijajacej sie<br />
wzdluz obrzezy prostokata<br />
Rys. 6.37. Akcja loadMovieNum posiada<br />
parametry: URL (sciezka dostepu), Location<br />
(umiejscowienie – poziom) i Variables (zmienne)<br />
Poziomy<br />
Po wczytaniu zewnetrznych plików SWF<br />
do innego filmu Flasha ich rozmieszczanie<br />
kontroluje sie za pomoca poziomów.<br />
Oryginalny film jest zawsze na poziomie 0<br />
(Level 0), a kazdy nastepny zostaje<br />
umieszczony o jeden poziom wyzej. Wyzsze<br />
poziomy nakladane sa na nizsze, tak wiec<br />
zaladowane filmy beda zawsze pojawiac sie<br />
powyzej pierwotnego filmu na scenie. Jesli<br />
chcesz usunac film, wystarczy podac numer<br />
poziomu, a wówczas wymuszane jest<br />
zastosowanie akcji unloadMovieNum wobec<br />
filmu o okreslonym poziomie. Podobny efekt<br />
osiagniesz, zastepujac niechciany film nowym<br />
filmem. Jesli wczytasz nowy film do poziomu<br />
zajmowanego przez inny film, nowy zajmie<br />
miejsce starego.<br />
W celu wczytania zewnetrznego filmu:<br />
1. Najpierw przygotuj film, który chcialbys<br />
wczytac. Utwórz krótka animacje z kilkoma<br />
elementami tla i scena o wzglednie<br />
niewielkich rozmiarach (rys. 6.36).<br />
2. Wyeksportuj gotowy film do pliku SWF.<br />
3. Otwórz nowy dokument Flasha, w którym<br />
utworzysz swój glówny film. Do<br />
wspomnianego dokumentu ladowany bedzie<br />
film zewnetrzny.<br />
4. Utwórz symbol przycisku i przeciagnij jego<br />
klon z biblioteki na scene.<br />
5. Zaznacz klon i otwórz palete akcji. Wybierz<br />
Basic Actions/Load Movie (Esc + lm).<br />
Ponizej manipulatora zdarzenia myszy<br />
on (release) pojawi sie akcja<br />
loadMovieNum (rys. 6.37).<br />
Dolaczanie filmów z zewnatrz<br />
169
Rozdzial 6.<br />
Dolaczanie filmów z zewnatrz<br />
6. W polu URL wpisz nazwe zewnetrznego<br />
pliku SWF. Pole Expression pozostaw<br />
niezaznaczone (rys. 6.38).<br />
Pole URL okresla sciezke dostepu do pliku.<br />
Tutaj wprowadzamy sciezke wzgledna, tak<br />
wiec Flash sprawdza w poszukiwaniu pliku<br />
SWF biezaca lokalizacje. Katalogi mozna<br />
zmieniac za pomoca ukosnika (/) i dwóch<br />
kropek (..), ewentualnie wprowadzajac<br />
bezwzgledna sciezke dostepu do pliku SWF<br />
umieszczonego na witrynie internetowej.<br />
7. W przypadku parametru Location z menu<br />
rozwijanego wybierz opcje Level, a w polu<br />
obok wpisz cyfre o wartosci wiekszej niz 0<br />
(rys. 6.39).<br />
8. Wyeksportuj film. Umiesc zarówno glówny<br />
plik SWF, jak i plik zewnetrzny w tym<br />
samym katalogu.<br />
9. Odtwórz film zawierajacy utworzony<br />
wczesniej przycisk w przegladarce lub<br />
za pomoca odtwarzacza Flasha.<br />
Klikniecie przycisku spowoduje wczytanie<br />
filmu umieszczonego powyzej oryginalnego<br />
filmu (rys. 6.40).<br />
Rys. 6.38. Podanie wzglednego adresu URL<br />
oznacza, ze plik bouncingball.swf powinien<br />
znajdowac sie w tym samym katalogu<br />
co oryginalny film Flasha<br />
Rys. 6.39. Na jednym poziomie moze znalezc<br />
sie tylko jeden film, ale ilosc poziomów nie<br />
jest ograniczona<br />
Film bouncingball.swf na poziomie 1<br />
Rys. 6.40. Film oryginalny na poziomie 0<br />
(Level 0) (u góry) i film wczytywany na<br />
poziomie 1 (Level 1) (na dole). Przycisk na<br />
poziomie 0 jest caly czas aktywny<br />
170
Zarzadzanie zasobami zewnetrznymi<br />
υ Filmy wczytywane do wyzszego poziomu<br />
beda nakladac sie na filmy wczytywane do<br />
nizszych poziomów.<br />
υ Wczytywane filmy posiadaja przezroczyste<br />
sceny. Jesli chcesz, by sceny byly kryjace,<br />
utwórz wypelniony prostokat w dolnej<br />
warstwie wczytywanego filmu (rys. 6.41).<br />
Film na poziomie 1<br />
Film na poziomie 0<br />
Film na<br />
poziomie 1<br />
Rys. 6.41. Jesli plik SWF jest wczytywany<br />
i umieszczany powyzej filmu na poziomie 0,<br />
jego scena staje sie przezroczysta<br />
Film na poziomie 1<br />
Cechy wczytywanych filmów<br />
Film na<br />
poziomie 0<br />
Film na poziomie 1<br />
υ Wczytywane filmy sa pozycjonowane<br />
wzgledem ich górnego lewego rogu od<br />
górnego lewego rogu oryginalnego<br />
filmu. Tak wiec wczytywane filmy ze<br />
scena o mniejszych rozmiarach beda<br />
wciaz wyswietlac obiekty znajdujace sie<br />
poza ich scena (rys. 6.42). Przygotuj<br />
maske, która zablokuje obiekty mogace<br />
wykroczyc poza scene, skoro odbiorca<br />
nie powinien ich widziec. Podobnie<br />
filmy z wieksza scena beda ucinane<br />
wzdluz dolnego i prawego brzegu<br />
(rys. 6.43).<br />
υ Filmy wczytywane do poziomu 0<br />
zajmuja miejsce oryginalnego filmu,<br />
jednak rozmiar sceny, predkosc<br />
odtwarzania i kolor tla pozostaja<br />
niezmienione. Jesli wczytany film<br />
posiada scene wieksza niz oryginal,<br />
zostanie wycentrowany i wyskalowany,<br />
co spowoduje dopasowanie sie do<br />
sceny.<br />
Film na poziomie 1<br />
Film na poziomie 1<br />
Dolaczanie filmów z zewnatrz<br />
Film na poziomie 0 Film na poziomie 0<br />
Rys. 6.42. Mniejsze pliki SWF sa pozycjonowane<br />
wzgledem lewego górnego rogu i wyswietlaja<br />
obszar roboczy poza scena. Rozwaz uzycie w tym<br />
miejscu masek zewnetrznych plików SWF<br />
o rozmiarach zgodnych z rozmiarami ich scen<br />
Film na poziomie 0 Film na poziomie 0<br />
Rys. 6.43. Wieksze pliki SWF sa obcinane,<br />
gdy wczytuje sie je nad filmem poziomu 0<br />
171
Rozdzial 6.<br />
Dolaczanie filmów z zewnatrz<br />
W celu usuniecia filmu:<br />
1. Korzystajac dalej z plików przygotowanych<br />
w poprzednim cwiczeniu, utwórz kolejny<br />
klon przycisku w oryginalnym filmie,<br />
a nastepnie otwórz palete akcji.<br />
2. Wybierz Basic Actions/Unload Movie<br />
(Esc + um).<br />
Ponizej manipulatora zdarzenia myszy<br />
on (release) pojawi sie akcja<br />
unloadMovieNum (rys. 6.44).<br />
3. Dla parametru Location wybierz z menu<br />
rozwijanego opcje Level, a nastepnie wpisz<br />
te sama cyfre, która wprowadziles dla akcji<br />
loadMovieNum (rys. 6.45).<br />
4. Wyeksportuj glówny film do pliku SWF<br />
i umiesc go w tej samej lokalizacji, co<br />
zewnetrzny plik SWF.<br />
5. Odtwórz film w przegladarce lub<br />
odtwarzaczu Flasha.<br />
Pierwszy z przycisków wczytuje zewnetrzny<br />
film do podanego poziomu. Drugi przycisk<br />
usuwa film z tego poziomu.<br />
W celu zastapienia wczytanego<br />
filmu innym filmem:<br />
1. Otwórz nowy dokument Flasha i przygotuj<br />
nastepna niewielka animacje, która posluzy<br />
za drugi film zewnetrzny.<br />
2. Dodaj trzeci klon przycisku do tego samego<br />
glównego filmu, którego uzywales w<br />
poprzednim cwiczeniu, a nastepnie otwórz<br />
palete akcji.<br />
3. Wybierz Basic Actions/Load Movie.<br />
Ponizej manipulatora zdarzenia myszy<br />
on (release) pojawi sie akcja<br />
loadMovieNum (rys. 6.46).<br />
4. W polu URL wpisz nazwe drugiego filmu<br />
zewnetrznego. Pole Expression pozostaw<br />
niezaznaczone (rys. 6.47).<br />
Rys. 6.44. Akcja unloadMovieNum ma tylko<br />
jeden parametr: Location<br />
Rys. 6.45. Parametr Location akcji<br />
unloadMovieNum. Dowolny film z poziomu 1<br />
zostanie usuniety<br />
Rys. 6.46. Akcja loadMovieNum przypisana<br />
do przycisku<br />
Rys. 6.47. Plik bouncingsquare.swf stanowi<br />
sciezke dostepu<br />
172
Zarzadzanie zasobami zewnetrznymi<br />
Rys. 6.48. Plik bouncingsquare.swf zostanie<br />
wczytany do poziomu 1.<br />
Film bouncingball.swf na poziomie 1<br />
5. Dla parametru Location wybierz z menu<br />
rozwijanego opcje Level, a nastepnie wpisz<br />
te sama cyfre, której uzyles dla pierwszej<br />
akcji loadMovieNum (rys. 6.48).<br />
6. Wyeksportuj glówny film do pliku SWF<br />
i umiesc go w tej samej lokalizacji, co<br />
obydwa zewnetrzne pliki SWF.<br />
7. Odtwórz glówny film, zawierajacy trzy<br />
przyciski, w przegladarce lub odtwarzaczu<br />
Flasha.<br />
Po kliknieciu pierwszego przycisku Flash<br />
wczyta zewnetrzny film, rezydujacy nad<br />
oryginalnym filmem. Klikniecie trzeciego<br />
z utworzonych przycisków sprawi, ze Flash<br />
wczyta drugi film zewnetrzny do tego<br />
samego poziomu, zastepujac tym samym<br />
pierwszy z filmów (rys. 6.49).<br />
Dolaczanie filmów z zewnatrz<br />
Film bouncingsquare.swf na poziomie 1<br />
Rys. 6.49. Poczatkowo film bouncingball.swf<br />
zajmuje poziom 1 (u góry). Inny film, po<br />
wczytaniu do tego samego poziomu, zastapi<br />
plik bouncingball.swf<br />
173
Rozdzial 6.<br />
Dolaczanie filmów z zewnatrz<br />
Wczytywanie filmów<br />
do klipów filmowych<br />
Wczytywanie zewnetrznych filmów do<br />
poziomów podlega pewnym ograniczeniom,<br />
z uwagi chocby na fakt pozycjonowania ich<br />
wzgledem lewego górnego rogu glównej sceny.<br />
Przeszkode te mozna ominac i przesuwajac<br />
odpowiednio elementy zewnetrznego filmu<br />
i majac na uwadze miejsca, w których beda<br />
wyswietlane. Mozna tez zmienic caly film,<br />
dopasowujac rozmiar jego sceny do rozmiarów<br />
sceny glównego filmu.<br />
Jednak jeszcze lepszym rozwiazaniem jest<br />
umieszczanie takich filmów w klipach<br />
filmowych, zamiast wczytywanie ich do<br />
poziomów. W takim przypadku lewy górny róg<br />
wczytywanego filmu jest umieszczany<br />
w punkcie srodkowym wskazanego klipu<br />
filmowego (rys. 6.50), a poniewaz klipy<br />
filmowe moga byc rozmieszczane po calej<br />
scenie, w ten sposób równiez wczytywane filmy<br />
mozesz rozkladac dokladnie tak, jak chcesz.<br />
Wczytany film zajmuje miejsce klipu – listwa<br />
czasowa klipu filmowego zostaje zastapiona<br />
listwa czasowa wczytanego filmu. Mimo<br />
wszystko klip filmowy zachowuje nazwe<br />
przypisana do jego klonu; równiez wszystkie<br />
efekty skalowania, rotacji, przekrzywiania,<br />
kolorowania i nakladania przezroczystosci,<br />
wykonane na klonie klipu filmowego, zostana<br />
przypisane wczytanemu filmowi (rys. 6.51).<br />
W celu wczytania<br />
zewnetrznego filmu<br />
do klipu filmowego:<br />
1. Utwórz symbol klipu filmowego<br />
i przeciagnij jego klon z biblioteki na scene<br />
(rys. 6.52).<br />
2. Zaznacz klon i za pomoca palety Instance<br />
nadaj mu nazwe.<br />
3. Utwórz symbol przycisku i przeciagnij jego<br />
klon z biblioteki na scene.<br />
4. Zaznacz klon przycisku i otwórz paleteakcji.<br />
Klip filmowy<br />
w ksztalcie trójkata<br />
Klip filmowy<br />
na poziomie 0<br />
Zewnetrzny<br />
film<br />
Klip filmowy<br />
na poziomie 0<br />
Punkt poczatkowy<br />
klipu filmowego<br />
w ksztalcie trójkata<br />
Rys. 6.50. Film wczytany do klipu filmowego<br />
jest pozycjonowany wzgledem lewego<br />
górnego rogu w punkcie srodkowym filmu<br />
Klip filmowy – obrócony,<br />
przeskalowany i przekrzywiony<br />
Klip filmowy<br />
w ksztalcie<br />
trójkata<br />
Klip filmowy<br />
na poziomie 0<br />
Zewnetrzny film<br />
Wczytany film –<br />
obrócony,<br />
przeskalowany<br />
i przekrzywiony<br />
Film wczytany do<br />
klipu filmowego<br />
w ksztalcie trójkata<br />
Klip filmowy<br />
na poziomie 0<br />
Film wczytany do<br />
klipu filmowego<br />
w ksztalcie trójkata<br />
Rys. 6.51. Wczytywany film przejmuje nazwe,<br />
pozycje, skalowanie, przekrzywienie, rotacje,<br />
kolory i efekt przezroczystosci przypisane do<br />
klonu klipu filmowego<br />
Rys. 6.52.<br />
Klon klipu<br />
filmowego<br />
posluzy za<br />
miejsce<br />
przeznaczeni<br />
a dla<br />
wczytanego<br />
w przyszlosci<br />
filmu<br />
174
Zarzadzanie zasobami zewnetrznymi<br />
Rys. 6.53. Parametry akcji loadMovieNum.<br />
Klip filmowy greensquare, obrócony o 45 stopni<br />
Film bouncingball.swf wczytany<br />
do pliku _root.greensquare<br />
Rys. 6.54. Film bouncingball.swf zostaje<br />
wczytany do klipu filmowego greensquare, który<br />
wczesniej zostal obrócony<br />
5. Wybierz Basic Actions/Load Movie.<br />
Ponizej manipulatora zdarzenia myszy<br />
on (release) pojawi sie akcja<br />
loadMovieNum.<br />
6. W polu URL wpisz nazwe zewnetrznego<br />
pliku SWF. Dla parametru Location<br />
wybierz z menu rozwijanego opcje Target,<br />
a nastepnie wprowadz sciezke dostepu do<br />
klonu klipu filmowego na scenie (rys. 6.53).<br />
7. Wyeksportuj glówny film do pliku SWF<br />
i umiesc go w tej samej lokalizacji, co<br />
zewnetrzny plik SWF.<br />
8. Odtwórz glówny film zawierajacy przycisk<br />
i klip filmowy za pomoca przegladarki lub<br />
odtwarzacza Flasha.<br />
Po kliknieciu utworzonego przycisku Flash<br />
wczyta zewnetrzny film do klipu filmowego.<br />
Wczytany film przejmie wszystkie<br />
ustawienia klipu filmowego, np. pozycje,<br />
skalowanie, rotacje, nazwe klonu, jednak<br />
listwa czasowa na scenie bedzie od teraz<br />
listwa czasowa wczytanego filmu<br />
(rys. 6.54).<br />
Wskazówka<br />
• Zostaw pierwsze ujecie kluczowe twojego<br />
klipu filmowego puste, zeby sluzylo za<br />
pojemnik, do którego trafi wczytany film.<br />
Pamietaj, ze pusty okrag, reprezentujacy<br />
punkt poczatkowy tego klipu filmowego<br />
wskazuje pozycje lewego górnego rogu<br />
kazdego wczytywanego filmu.<br />
Dolaczanie filmów z zewnatrz<br />
175
Rozdzial 6.<br />
Dolaczanie filmów z zewnatrz<br />
Nawigowanie<br />
listwami czasowymi<br />
wczytywanych filmów<br />
Po wczytaniu filmów do glównego filmu,<br />
zyskujesz dostep do ich listew czasowych<br />
i w efekcie kontrole nad procesem odtwarzania.<br />
Jesli myslales, ze nawigowanie pomiedzy<br />
listwami czasowymi klipów filmowych bylo<br />
zlozone, to teraz spróbuj wyobrazic sobie<br />
stopien skomplikowania sytuacji, w której masz<br />
do czynienia z wieloma filmami, przy czym<br />
kazdy zawiera dodatkowo wlasny zestaw<br />
klipów filmowych!<br />
Flash umozliwia okreslanie sciezek dostepu do<br />
wczytywanych filmów i ich listew czasowych<br />
w logiczny, minimalizujacy ryzyko pomylki,<br />
sposób. Jako ze wczytane filmy rezyduja na<br />
róznych poziomach, program uzywa terminu<br />
_level1 w odniesieniu do filmu na poziomie<br />
1, _level2 w odniesieniu do filmu na<br />
poziomie 2, itd. Filmy wczytywane do klipów<br />
filmowych przejmuja nazwy przypisane do<br />
klonów tych klipów, tak wiec sciezki dostepu<br />
do tych wczytanych filmów sa w zasadzie<br />
sciezkami dostepu do klipów filmowych. Jesli<br />
wczytywane filmy zawieraja w sobie kolejne<br />
klipy filmowe, uzyj kropki do tworzenia sciezek<br />
dostepu do plików znajdujacych sie nizej<br />
w hierarchii listwy czasowej, podobnie, jak robi<br />
sie to w przypadku klipów filmowych na<br />
glównej listwie czasowej. Przykladowo,<br />
_level2.bigCircle.smallCircle jest<br />
sciezka dostepu do klipu filmowego o nazwie<br />
smallCircle, zawierajacego sie w klipie<br />
filmowym bigCircle, a rezydujacego w filmie<br />
wczytanym do poziomu 2.<br />
W celu utworzenia<br />
sciezki dostepu do wczytanego filmu:<br />
1. Tak jak w poprzednich cwiczeniach, utwórz<br />
animacje, która posluzy za zewnetrzny film<br />
Flasha. Wyeksportuj ja do pliku SWF.<br />
2. Otwórz nowy dokument Flasha. Utwórz<br />
przycisk i przeciagnij jego klon z biblioteki<br />
na scene.<br />
176
Zarzadzanie zasobami zewnetrznymi<br />
Rys. 6.55. Akcja loadMovieNum przypisana<br />
do przycisku umieszcza plik bouncingball na<br />
poziomie 1<br />
Rys. 6.56. Metoda stop wykonywana jest w filmie<br />
na poziomie 1<br />
Rys. 6.57. Manipulator onClipEvent (data)<br />
w menu palety akcji<br />
3. Przypisz do przycisku akcje<br />
loadMovieNum, podajac nazwe<br />
zewnetrznego pliku SWF jako adres w polu<br />
URL i wpisujac liczbe wieksza niz 0 w polu<br />
Location (rys. 6.55)<br />
4. Przeciagnij na scene kolejny klon<br />
utworzonego przycisku, który posluzy do<br />
kontrolowania listwy czasowej<br />
wczytywanego filmu.<br />
5. Z palety akcji wybierz Actions/evaluate<br />
(Esc + ev). Ponizej manipulatora zdarzenia<br />
myszy on (release) pojawi sie wyrazenie<br />
evaluate.<br />
6. W polu Expression wpisz _level,<br />
nastepnie numer poziomu, a potem kropke<br />
i na koncu metode stop() (rys. 6.56).<br />
Wyrazenie to wstrzymuje odtwarzanie na<br />
listwie czasowej filmu umieszczonego na<br />
podanym poziomie.<br />
7. Wyeksportuj glówny film do pliku SWF<br />
i umiesc go w tej samej lokalizacji, co<br />
zewnetrzny plik SWF. Odtwórz film<br />
zawierajacy przyciski za pomoca<br />
przegladarki lub odtwarzacza Flasha.<br />
Pierwszy z przycisków wczytuje zewnetrzny<br />
plik SWF do wskazanego poziomu. Drugi<br />
przycisk powoduje przejscie do tego<br />
poziomu i zatrzymuje odtwarzanie.<br />
Wykrywanie zdarzenia Load Movie<br />
Wczytanie zewnetrznego filmu wyzwala<br />
zdarzenie, które mozesz wykryc. Zewnetrzne<br />
pliki SWF sa plikami danych, wiec mozna uzyc<br />
zdarzenia klipu filmowego onClipEvent<br />
(data) do okreslania, czy pliki SWF zostaly<br />
wczytane w calosci (rys. 6.57).<br />
Dolaczanie filmów z zewnatrz<br />
177
Rozdzial 6.<br />
Dolaczanie filmów z zewnatrz<br />
Ten manipulator zdarzenia jest przydatny, gdy<br />
akcja loadMovieNum pojawia sie<br />
automatycznie lub dynamicznie. Ostatecznie,<br />
jesli akcja loadMovieNum jest wykonywana<br />
po wcisnieciu przycisku, mozesz po prostu uzyc<br />
zdarzenia myszy jako manipulatora.<br />
Manipulator onClipEvent (data) jest<br />
uzywany takze do wykrywania danych<br />
nadchodzacych w formie zmiennych. Dane<br />
z zewnatrz moga byc wczytywane do Flasha<br />
tak, jak zewnetrzne pliki SWF. Wiecej na temat<br />
zmiennych dowiesz sie z czesci V, „Praca<br />
z informacja”.<br />
W celu wczytania<br />
manipulatora zdarzenia<br />
klipu filmowego:<br />
1. Utwórz symbol klipu filmowego<br />
i przeciagnij jego klon z biblioteki na scene.<br />
2. Zaznacz klon klipu filmowego i otwórz<br />
palete akcji.<br />
3. Wybierz Actions/onclipEvent (Esc + oc)<br />
(rys. 6.58).<br />
4. W bloku edycji parametrów kliknij Data<br />
radio button.<br />
5. Z okna narzedzi wybierz odpowiednia akcje,<br />
wykonywana w odpowiedzi na wczytanie<br />
zdarzenia klipu filmowego (rys. 6.59).<br />
Jesli rozpocznie sie wczytywanie pliku SWF<br />
do glównego filmu, wystapi zdarzenie<br />
onClipEvent (data) i zostanie<br />
wykonana akcja przypisana do tego<br />
zdarzenia.<br />
Rys. 6.58. Zdarzenie onClipEvent<br />
Rys. 6.59. Po wczytaniu zewnetrznego filmu<br />
Flash przechodzi do ujecia o nazwie<br />
incoming w klipie filmowym display<br />
178
Zarzadzanie zasobami zewnetrznymi<br />
Rys. 6.60. Wybierz Window/Generator Objects<br />
Rys. 6.61. Przeciagnij obiekt Insert Flash Movie<br />
z palety Generator Objects na scene<br />
Wspólpraca<br />
z narzedziem Generator<br />
Z pewnoscia akcja loadMovieNum przydaje sie<br />
do wczytywania zewnetrznych filmów Flasha,<br />
jednak filmy takie pozostaja statyczne, jako ze<br />
ich grafika i animacje zostaly wczesniej<br />
zaprojektowane i wyrenderowane. Jesli chcesz<br />
wprowadzac zawartosc „w locie” i tworzyc<br />
grafike oraz animacje Flasha z dynamiczna<br />
zawartoscia, potrzebujesz narzedzia zwanego<br />
Flash Generator.<br />
Praca z Generatorem przebiega w dwóch<br />
fazach. Najpierw tworzysz we Flashu szablony,<br />
nazywane plikami szablonu Shockwave Flash<br />
(SWT). Szablony te okreslaja typ<br />
wykorzystywanych danych oraz ich<br />
przeznaczenie. Nastepnie, kiedy uzyskasz<br />
dostep do owych plików SWT za pomoca<br />
przegladarki, Generator Dynamic Graphics<br />
Sever laczy szablony z danymi i dostarcza<br />
zintegrowane media odbiorcy. Generator jest<br />
idealnym narzedziem do tworzenia grafik<br />
Flasha z nieustannie zmieniajacymi sie<br />
informacjami. Na przyklad, grafic zna mapa<br />
pogody moze byc tworzona w czasie<br />
rzeczywistym na podstawie informacji<br />
pogodowych dostepnych na serwerze; podobnie<br />
odpowiedni banner móglby wyswietlac na<br />
biezaco uaktualnienia cen na gieldzie.<br />
Jako ze praca z Generatorem opiera sie na<br />
wykorzystaniu osobnej aplikacji serwerowej,<br />
ograniczymy sie w ponizszym cwiczeniu do<br />
przygotowania pojedynczego pliku SWT,<br />
wywolujacego film Flasha.<br />
W celu utworzenia<br />
szablonu Generatora:<br />
1. Wybierz Window/Generator Objects<br />
(rys. 6.60). Pojawi sie paleta Generator<br />
Objects.<br />
2. Umiesc na scenie obiekt Insert Flash Movie<br />
(rys. 6.61).<br />
Wspólpraca z narzedziem Generator<br />
179
Rozdzial 6.<br />
Wspólpraca z narzedziem Generator<br />
3. Kliknij dwukrotnie obiekt Insert Flash<br />
Movie lub wybierz Window/Panels/<br />
Generator . Pojawi sie paleta Generator.<br />
4. Jako nazwe pliku (File Name) wprowadz<br />
nazwe innego pliku SWF, który zostanie<br />
umieszczony w tej samej lokacji (rys. 6.62).<br />
5. Wybierz File/Publish Settings. Otworzy sie<br />
okno dialogowe Publish Settings.<br />
6. W zakladce Formats zaznacz opcje Flash,<br />
Generator Template i HTML (rys. 6.63).<br />
7. W zakladce Generator wybierz kolor tla<br />
(pole Background), poniewaz Generator<br />
zastapi ustawienia filmu Flasha (rys. 6.64).<br />
8. Kliknij Publish. Flash wyeksportuje pliki<br />
HTML, SWF i SWT.<br />
9. Umiesc wszystkie pliki (HTML, SWF<br />
i SWT) w tej samej lokacji na twoim<br />
serwerze sieciowym.<br />
10. W przegladarce wpisz pelny adres URL<br />
pliku SWT, np.:<br />
http://www.myserver.com/intro.swt<br />
Rys. 6.62. Plik<br />
myMovie.swf jest<br />
wzgledna sciezka<br />
dostepu do filmu,<br />
który ma zostac<br />
wstawiony. Plik<br />
ten powinien<br />
znajdowac<br />
sie w tej samej<br />
lokalizacji co plik<br />
SWT<br />
Rys. 6.63. W zakladce Formats okna<br />
dialogowego Publish Settings wybierz<br />
nastepujace typy plików: Flash, Generator<br />
Template oraz HTML<br />
Rys. 6.64. Wybierz kolor tla (Background)<br />
w zakladce Generator okna dialogowego<br />
Publish Settings<br />
180
Zarzadzanie zasobami zewnetrznymi<br />
Tabela 6.3. Parametry akcji FSCommand dla<br />
projektorów<br />
Parametr<br />
Opis i argumenty<br />
fullscreen Zezwala na odtwarzanie<br />
w trybie pelnoekranowym<br />
i uniemozliwia skalowanie<br />
(prawda lub falsz).<br />
allowscale Skaluje grafike przy zmianie<br />
rozmiaru okna (prawda lub falsz).<br />
trapallkeys Zezwala filmowi<br />
(w miejsce odtwarzacza)<br />
na przechwytywanie zdarzen<br />
naciskania klawiszy (prawda<br />
lub falsz).<br />
showmenu<br />
exec<br />
quit<br />
Wyswietla menu podreczne<br />
w przypadku klikniecia obszaru<br />
filmu prawym przyciskiem<br />
myszy (prawda lub falsz).<br />
Uruchamia plik wykonawczy<br />
(sciezka dostepu do pliku).<br />
Zamyka projektor<br />
Projektory i akcja FSCommand<br />
Najczesciej twoje filmy Flasha beda odtwarzane<br />
w przegladarkach, za posrednictwem sieci<br />
Internet. Flash zostal zaprojektowany<br />
i skonstruowany wlasnie z ta mysla. Jednak<br />
program umozliwia takze tworzenie<br />
projektorów, samouruchamiajacych sie<br />
aplikacji, które nie wymagaja przegladarki,<br />
czy odtwarzacza filmów Flasha. Zarówno<br />
w systemie Windows, jak Mac OS mozesz<br />
tworzyc projektory zgodne jednoczesnie z obu<br />
tymi platformami. W przypadku Windows pliki<br />
takie posiadaja rozszerzenie .EXE, w Mac OS<br />
do nazwy pliku dodawane jest slowo projector .<br />
Projektory maja wieksze rozmiary niz<br />
tradycyjne pliki SWF, jednak zawieraja<br />
wszystko, co jest potrzebne do obejrzenia<br />
zawartosci, która przygotowales, wlaczajac<br />
w to grafike, animacje, dzwiek i funkcje<br />
interaktywne. Uzywaj projektorów do<br />
umieszczania projektów Flasha na przenosnych<br />
mediach, jak dyskietki i plyty CD-ROM, co jest<br />
idealnym sposobem na przygotowanie<br />
wszelkiego rodzaju prezentacji i materialów<br />
reklamowych.<br />
Jednak odtwarzanie filmów Flasha za<br />
posrednictwem projektorów jest wyjatkowe<br />
w jednym aspekcie. Projektory nie uzywaja<br />
dokumentu HTML, zawierajacego znaczniki,<br />
czyli „instrukcje” okreslajace sposób<br />
wyswietlania. Czy odtwarzanie ma byc<br />
pelnoekranowe? Czy mozna zmieniac rozmiar<br />
okna? Takie opcje sa dostepne w przypadku<br />
publikacji w formacie HTML, ale nie wtedy,<br />
gdy korzystasz z projektorów. Jesli chcialbys<br />
ustawic lub zmienic podobne parametry<br />
wyswietlania, skorzystaj z akcji FSCommand,<br />
która sama w sobie zawiera tylko kilka prostych<br />
parametrów odnosnie projektorów, tak jak<br />
przedstawiono to w tabeli 6.3.<br />
Projektory i akcja FSCommand<br />
181
Rozdzial 6.<br />
Projektory i akcja FSCommand<br />
W celu opublikowania projektora:<br />
1. Otwórz swój plik Flasha. Wybierz<br />
File/Publish Settings (Shift+Ctrl+F12)<br />
(rys. 6.65). Pojawi sie okno dialogowe<br />
Publish Settings.<br />
2. Usun zaznaczenie wszystkich pól wyboru,<br />
z wyjatkiem pozycji Macintosh Projector<br />
lub Windows Projector (rys. 6.66).<br />
3. Jesli zamierzasz nadac projektorowi nazwe<br />
inna od domyslnej, usun zaznaczenie pola<br />
wyboru Use default names i wprowadz<br />
wlasciwa nazwe.<br />
4. Kliknij Publish.<br />
Plik projektora zostanie zapisany w tym<br />
samym folderze co plik Flasha.<br />
lub<br />
1. Uruchom odtwarzacz Flasha.<br />
2. Wybierz File/Open File (Ctrl+O). Zaznacz<br />
plik Flasha.<br />
3. Wybierz File/Create Projector... (Ctrl+K)<br />
(rys. 6.67).<br />
4. Wybierz folder docelowy oraz nazwe.<br />
Kliknij OK.<br />
Wskazówka<br />
• Uzycie akcji getURL w projektorze<br />
umozliwia uruchomienie domyslnej<br />
przegladarki internetowej i dowolnego lacza<br />
sieciowego.<br />
Rys. 6.65. Klikniecie Publish spowoduje<br />
wyeksportowanie wszystkich typów<br />
zaznaczonych w zakladce Formats<br />
Rys. 6.66. Zakladka Formats okna<br />
dialogowego Publish Settings. Zaznacz opcje<br />
Windows Projector i Macintosh Projector<br />
Rys. 6.67. Polecenie Create Projector,<br />
dostepne w odtwarzaczu Flasha, eksportuje<br />
biezacy plik do postaci projektora<br />
182
Zarzadzanie zasobami zewnetrznymi<br />
Rys. 6.68. Dostep do akcji FSCommand<br />
na palecie akcji<br />
Rys. 6.69. Opcje akcji fscommand dla<br />
projektorów pojawiaja sie w menu rozwijanym<br />
u dolu bloku edycji parametrów<br />
W celu uzycia akcji FSCommand<br />
w projektorze:<br />
1. Zaznacz pierwsze ujecie kluczowe filmu<br />
Flasha, który chcialbys wyeksportowac do<br />
postaci projektora. Otwórz palete akcji.<br />
2. Wybierz Actions/FSCommand (Esc + fs)<br />
(rys. 6.68).<br />
Akcja FSCommand pojawi sie w oknie<br />
skryptu wraz z parametrami Command<br />
i Argument oraz menu rozwijanym,<br />
specyficznym dla projektorów (rys. 6.69).<br />
3. Z menu rozwijanego wybierz fullscreen.<br />
Teraz w polu Command widnieje<br />
fullscreen, a w polu Argument – true<br />
(prawda) (rys. 6.70).<br />
4. Z okna narzedzi wybierz ponownie<br />
FSCommand. Z menu rozwijanego wybierz<br />
showmenu.<br />
Teraz w polu Command widnieje<br />
showmenu, a w polu Argument – true<br />
(prawda).<br />
5. W polu Argument zmien true na false<br />
(falsz) (rys. 6.71).<br />
Projektory i akcja FSCommand<br />
Rys. 6.70. Argument true parametru fullscreen<br />
uruchamia odtwarzanie projektora w trybie<br />
pelnoekranowym<br />
Rys. 6.71. Argument false parametru Command<br />
wylacza menu podreczne (otwierane kliknieciem<br />
prawego klawisza myszy)<br />
183
Rozdzial 6.<br />
6. Utwórz przycisk i umiesc jego klon na<br />
scenie. Zaznacz klon i otwórz palete akcji.<br />
7. Wybierz Actions/FSCommand.<br />
8. Z menu rozwijanego Command w bloku<br />
edycji parametrów wybierz quit (rys. 6.72).<br />
9. Opublikuj Swój film jako projektor.<br />
Uruchom projektor, klikajac nan<br />
dwukrotnie. Projektor Flasha zostanie<br />
odtworzony w trybie pelnoekranowym.<br />
Zapobiega to skalowaniu okna. Menu<br />
podreczne, uruchamiane kliknieciem<br />
prawego klawisza myszy, jest wylaczone.<br />
Kiedy klikniesz utworzony przycisk, okno<br />
projektora zostanie zamkniete.<br />
Rys. 6.72. Akcja fscommand (”quit”)<br />
przypisana do przycisku zamyka okno<br />
projektora<br />
Projektory i akcja FSCommand<br />
184
Zarzadzanie zasobami zewnetrznymi<br />
Komunikacja z drukarka<br />
Flash umozliwia przesylanie informacji<br />
bezposrednio do drukarki i wydruk tekstu oraz<br />
grafiki z pominieciem standardowych funkcji<br />
drukowania dostepnych w przegladarce.<br />
Drukowanie jest mozliwe nawet w czasie<br />
odtwarzania filmu we Flashu lub jako<br />
projektora. Za pomoca akcji print oraz<br />
printAsBitmap mozesz przeslac do<br />
drukowania pojedyncze ujecie lub grupe ujec,<br />
a takze wskazac, które obszary tych ujec maja<br />
zostac wydrukowane. Owe obszary drukowania<br />
nie musza byc wcale widoczne na scenie. Dla<br />
drukarki dostepne sa grafika i tekst z dowolnego<br />
ujecia na glównej listwie czasowej, a takze<br />
listwie czasowej klipu filmowego, co czyni<br />
z akcji print cos wiecej niz tylko prymitywne<br />
narzedzie do sporzadzania sztywnych kopii<br />
biezacej zawartosci ekranu monitora.<br />
Zalózmy, ze posiadasz dokumenty<br />
w zewnetrznych plikach SWF. Móglbys<br />
w latwy sposób wczytac wybrany film do klipu<br />
filmowego lub do innego poziomu za pomoca<br />
akcji loadMovieNum, a nastepnie wydrukowac<br />
zaznaczone ujecia z wczytanego filmu .<br />
W rozdziale 10. dowiesz sie o wprowadzaniu<br />
tekstu oraz o dynamicznym tekscie, dzieki<br />
którym mozna wprowadzac informacje<br />
z klawiatury i wyswietlac tekst w sposób<br />
dynamiczny. Mozliwosci te mozna laczyc np.<br />
z formularzami zamówienia lub rachunkami,<br />
które potem przeslesz do drukarki.<br />
Komunikacja z drukarka<br />
185
Rozdzial 6.<br />
Komunikacja z drukarka<br />
W celu wydrukowania<br />
wybranego ujecia z filmu:<br />
1. Przygotuj grafike, która bedzie dostepna dla<br />
drukarki, w ujeciu kluczowym. To dobry<br />
pomysl, zeby przechowywac taka grafike<br />
w klipie filmowym, dzieki czemu moze ona<br />
zajmowac swoja wlasna listwe czasowa<br />
(rys. 6.73).<br />
2. Zaznacz ujecie kluczowe. W polu Label<br />
palety Frame wpisz #P (rys. 6.74).<br />
Etykieta #P okresla ujecie kluczowe jako<br />
przeznaczone do wydrukowania.<br />
W przypadku niewprowadzenia tej etykiety,<br />
do drukowania zostana przeslane wszystkie<br />
klatki filmu.<br />
3. Wróc do glównej listwy czasowej<br />
i przeciagnij klon twojego klipu filmowego<br />
na scene. Na palecie Instance wprowadz<br />
nazwe klonu.<br />
4. Wróc do glównej listwy czasowej i utwórz<br />
przycisk. Przeciagnij jego klon na scene.<br />
5. Zaznacz przycisk i otwórz palete akcji.<br />
Wybierz Actions/print (Esc + pr). Ponizej<br />
zdarzenia myszy on (release) pojawi sie<br />
akcja print (rys. 6.75).<br />
6. W bloku edycji parametrów wybierz As<br />
vectors z menu rozwijanego Print, Target<br />
z menu rozwijanego Location oraz Movie<br />
z menu rozwijanego Bounding box. W polu<br />
Location wprowadz sciezke dostepu do<br />
klonu klipu filmowego (rys. 6.76).<br />
7. Przetestuj film.<br />
Klikniecie utworzonego przycisku<br />
spowoduje przeslanie do drukarki grafiki<br />
z ujecia kluczowego #P klipu filmowego.<br />
Klikaj OK w pojawiajacych sie oknach<br />
dialogowych, aby rozpoczac drukowanie<br />
(rys. 6.77).<br />
stop<br />
Rys. 6.73. Klip filmowy zawiera w ujeciu<br />
kluczowym 2. grafike przeznaczona do<br />
wydruku. W ujeciu kluczowym 1. akcja<br />
stop zapobiega odtwarzaniu klipu<br />
Rys. 6.74. W oddzielnej warstwie, dodaj<br />
etykiete #P do ujecia kluczowego 2<br />
Rys. 6.75. Do przycisku przypisano akcje print<br />
186
Zarzadzanie zasobami zewnetrznymi<br />
Rys. 6.76. Klon klipu filmowego, zawierajacego<br />
grafike przeznaczona do druku, nosi nazwe<br />
bikespecs. Ta akcja print odnosi sie wiec do klonu<br />
o nazwie bikespecs<br />
Klon klipu filmowego bikespecs z pustym<br />
pierwszym ujeciem kluczowym<br />
Wydrukowana strona<br />
Rys. 6.77. Klon klipu filmowego na scenie<br />
(u góry) zawiera grafike, która zostanie<br />
wydrukowana (u dolu)<br />
Rys. 6.78. Parametry akcji print.<br />
Do wydrukowania wybrano zawartosc<br />
filmu wczytanego do poziomu 1<br />
Przycisk<br />
z przypisana<br />
akcja print<br />
Wskazówki<br />
• Wykonanie akcji print zatrzymuje<br />
odtwarzanie filmu. Pamietaj o tym, jesli<br />
zamierzasz integrowac funkcje drukowania<br />
z animacja. Moze trzeba bedzie dodac do<br />
animacji przycisk wznawiajacy odtwarzanie<br />
po wykonaniu akcji print.<br />
• Drukowanie ujecia kluczowego<br />
zawierajacego klip filmowy zakonczy sie<br />
na wydrukowaniu zawartosci jedynie<br />
pierwszego ujecia tego klipu. Jesli chcesz<br />
wydrukowac wszystkie ujecia, wprowadz<br />
sciezke dostepu do samego klonu klipu<br />
filmowego.<br />
• Nie uzywaj akcji print jako akcji<br />
kontrolujacej ujecia. W przypadku<br />
drukowania za pomoca tego typu akcji<br />
program zapetla sie, próbujac wydrukowac<br />
nieskonczona ilosc kopii, a to powoduje<br />
zawieszenie systemu! Zawsze przypisuj<br />
akcje print do manipulatora zdarzenia.<br />
• Zeby ocenic stosunek rzeczywistej wielkosci<br />
grafiki do jej rozmiaru w druku, pomnóz<br />
rozmiar w pikselach przez rozdzielczosc<br />
ekranu, wynoszaca 72 ppi (piksele na cal).<br />
Tak wiec kartka papieru o wielkosci<br />
8,5 × 11 cali odpowiada scenie o<br />
rozdzielczosci 612 pikseli (8,5 cala × 72 ppi)<br />
na 792 pikseli (11 cali × 72 ppi). Trzeba tez<br />
wziac pod uwage marginesy ograniczajace<br />
wlasciwy obszar zadruku strony.<br />
• Wybierz opcje Level z menu rozwijanego<br />
Location, zeby wprowadzic sciezke dostepu<br />
do pliku wczytanego do wskazanego<br />
poziomu (rys. 6.78). Wydrukowane zostana<br />
wszystkie klatki wczytanego filmu, chyba ze<br />
wprowadzisz etykiete #P wybierajaca tylko<br />
okreslone ujecia.<br />
Komunikacja z drukarka<br />
187
Rozdzial 6.<br />
Komunikacja z drukarka<br />
W celu wydrukowania<br />
grupy ujec twojego filmu:<br />
1. Oznacz kazde ujecie przeznaczone do<br />
wydrukowania etykieta #P.<br />
lub<br />
Jesli zamierzasz wydrukowac grupe ujec<br />
umieszczonych w róznych listwach<br />
czasowych, musisz wpisac oddzielne<br />
polecenia drukowania w oknie palety akcji.<br />
W przypadku skorzystania z tej metody<br />
bedziesz mial do czynienia z kilkoma<br />
oknami dialogowymi, bowiem Flash moze<br />
drukowac grupe ujec, ale kazde z osobnej<br />
sciezki dostepu (rys. 6.79).<br />
W celu ustalenia<br />
obszaru drukowanego twojego filmu:<br />
1. Z menu rozwijanego Bounding box palety<br />
akcji wybierz Movie. Narysuj w jednym<br />
z ujec kluczowych ramke wyznaczajaca<br />
obszar grafiki i za pomoca palety Frame<br />
nadaj jej etykiete #B. Ostatni argument akcji<br />
print zostanie zmieniony na bmovie.<br />
Ramka, która narysowales, definiuje obszar<br />
drukowany wszystkich ujec oznaczonych<br />
etykieta #P (rys. 6.80).<br />
lub<br />
Z menu rozwijanego Bounding box<br />
wybierz Frame.<br />
Ostatni argument akcji print zostanie<br />
zmieniony na bframe. Grafiki umieszczone<br />
we wszystkich ujeciach kluczowych<br />
oznaczonych etykieta #P zostana<br />
przeskalowane do wielkosci odpowiadajacej<br />
maksymalnemu obszarowi drukowanemu<br />
(rys. 6.81).<br />
Rys. 6.79. Wydrukowane zostana ujecia<br />
z klipów filmowych taxforms oraz receipts.<br />
Dwa oddzielne klipy filmowe wymagaja dwu<br />
wyrazen print<br />
Rekin w klatce 8.<br />
Barakuda w klatce 14.<br />
Wydrukowane strony<br />
Krewetka<br />
w klatce 20.<br />
Rys. 6.80. Opcja bmovie. Ujecie kluczowe 26.<br />
zawiera obramowanie grafiki okreslajace<br />
obszar drukowany wszystkich trzech<br />
obrazków<br />
Obramowanie<br />
grafiki<br />
w klatce 26.<br />
188
Zarzadzanie zasobami zewnetrznymi<br />
Rekin w klatce 8.<br />
Barakuda w klatce 14.<br />
Wydrukowane strony<br />
Krewetka<br />
w klatce 20.<br />
Rys. 6.81. Opcja bframe. Niepotrzebne sa zadne<br />
etykiety #B. Kazdy z obrazków zostaje<br />
przeskalowany do wielkosci obszaru<br />
drukowanego. Zauwaz, ze krewetka w druku<br />
bedzie miala proporcje wielkosci rekina<br />
Rekin, barakuda<br />
i krewetka sa<br />
umieszczone<br />
w oddzielnych<br />
ujeciach<br />
kluczowych<br />
Obramowanie<br />
grafiki utworzone<br />
z uwzglednieniem<br />
wszystkich trzech<br />
obrazków<br />
Wydrukowane<br />
strony<br />
lub<br />
Z menu rozwijanego Bounding box wybierz<br />
Max. Ostatni argument akcji print zostanie<br />
zmieniony na bmax. Flash definiuje<br />
maksymalna szerokosc i wysokosc na<br />
podstawie wszystkich drukujacych sie ujec,<br />
a nastepnie przeskaluje grafike wzgledem<br />
ustalonej w ten sposób wielkosci obszaru<br />
drukowanego (rys. 6.82).<br />
Wskazówki<br />
• Obramowanie grafiki, definiowane w ujeciu<br />
kluczowym z etykieta #B, moze miec<br />
dowolny ksztalt, jednak Flash rozpoznaje<br />
jedynie prostokat, w który ów ksztalt moze<br />
zostac wpasowany. I ten wlasnie prostokat<br />
okresla obszar drukowany.<br />
• Dobrym pomyslem jest kopiowanie<br />
i wklejanie obramowania grafiki do warstwy<br />
wzorcowej. W ten sposób mozna ocenic<br />
stosunek wielkosci obszaru drukowanego<br />
do grafiki przeznaczonej do wydruku.<br />
• Upewnij sie, ze w ujeciu zawierajacym<br />
ujecie kluczowe z etykieta #B nie umiesciles<br />
w kolejnych warstwach zadnych innych<br />
ksztaltów lub obiektów. W przeciwnym<br />
wypadku obramowanie grafiki zostanie<br />
powiekszone, a przy tym zmienia sie<br />
zamierzony wczesniej obszar drukowany<br />
(Rys 6.83).<br />
Obramowanie grafiki<br />
obejmuje wszystkie<br />
elementy graficzne<br />
w ujeciu #B<br />
Komunikacja z drukarka<br />
Rys. 6.82. Opcja bmax. Niepotrzebne sa zadne<br />
etykiety #B. Obramowanie grafiki jest tworzone<br />
na podstawie usrednionego rozmiaru i lokalizacji<br />
wszystkich trzech obrazków<br />
Rys. 6.83. Te dwa obrazki w ujeciu #B<br />
wymuszaja wieksza powierzchnie<br />
obramowania grafiki<br />
189
Rozdzial 6.<br />
W celu wydrukowania grafiki zawierajacej<br />
przezroczystosci<br />
lub efekty kolorystyczne:<br />
1. Z menu rozwijanego Print palety akcji<br />
wybierz opcje As bitmap (rys. 6.84).<br />
Grafiki zawierajace przezroczystosci lub<br />
efekty kolorystyczne nie wydrukuja sie<br />
wlasciwie, jesli nie uzyjesz wyrazenia<br />
printAsBitmap. Jednak taki sposób<br />
drukowania daje w efekcie nizsza jakosc<br />
od wydruków wektorowych.<br />
Rys. 6.84. Opcja Print As bitmap na palecie<br />
akcji, uzyteczna w przypadku drukowania<br />
przezroczystosci i efektów kolorystycznych<br />
Komunikacja z drukarka<br />
190
Czesc 4.<br />
Przeksztalcanie grafiki i dzwieku<br />
191
Rozdzial 7.<br />
192
Kontrolowanie<br />
klipów filmowych<br />
7<br />
Czesci skladowe jezyka HTML<br />
Klip filmowy jest bardzo poteznym obiektem. Flash pozwala nadzorowac jego wyglad<br />
i zachowanie. Takie wlasciwosci klipu filmowego jak pozycja, skalowanie, rotacja,<br />
przezroczystosc, kolor, a nawet nazwa klonu, moga byc ustawiane za pomoca jezyka ActionScript.<br />
W rezultacie otrzymujesz mozliwosc tworzenia elementów interaktywnych wzorowanych na grach<br />
zrecznosciowych, zmieniajacych sie w odpowiedzi na wprowadzane przez uzytkownika dane lub<br />
preferencje. Wyobraz sobie na przyklad gre Tetris stworzona od poczatku do konca we Flashu.<br />
Kazda figura geometryczna bedzie klipem filmowym, którego rotacje i pozycje kontroluje<br />
uzytkownik za pomoca klawiatury. W grze w stylu Asteroids moze my miec do czynienia z obcym<br />
statkiem kosmicznym, poruszajacym sie w zaleznosci od zachowania statku sterowanego przez<br />
uzytkownika. Tego typu animacje nie opieraja sie na automatycznie animowanych sekwencjach,<br />
które zazwyczaj tworzysz, pracujac nad filmem we Flashu. Sa to raczej dynamiczne serie<br />
obrazów, „przygotowywane” na biezaco w czasie odtwarzania. Opanowanie zasad kontrolowania<br />
wlasciwosci klipu filmowego jest wiec pierwszym krokiem na drodze do zrozumienia sposobu<br />
tworzenia animacji w calosci za pomo ca ActionScript.<br />
Ponadto Flash umozliwia uzytkownikom przesuwanie klipu filmowego za posrednictwem akcji<br />
przeciagnij-i-upusc. Wykorzystaj przeciagane klipy filmowe do stworzenia ukladanki, w której<br />
uzytkownik prawdziwie siega po kolejne elementy i uklada je na wlasciwych miejscach, lub tez<br />
zaprojektuj bardziej wciagajacy interfejs internetowego sklepiku, gdzie uzytkownik bedzie<br />
wybieral artykuly i wrzucal je do koszyka. Nauczysz sie tworzyc przeciagane klipy filmowe,<br />
a takze metody pozwalajace okreslic miejsce ich upuszczania na scenie, Dowiesz sie równiez,<br />
jak kontrolowac kolizje klipów i nakladanie sie z innymi klipami filmowymi. Potem zajmiemy<br />
sie powielaniem zlozonych klipów filmowych i przeciaganiem ich z biblioteki na scene w trakcie<br />
odtwarzania.<br />
Na koniec zobaczysz, jak z pomoca klipu filmowego zaprojektowac wlasny kursor. Zamiast<br />
bowiem uzywac domyslnej strzalki lub „raczki”, mozesz tworzyc ksztalty odpowiadajace<br />
unikalnej zawartosci twojego filmu. Dla przykladu, przygotuj ikone lornetki lub krzyzyka w grze<br />
o polowaniu lub dlon szkieletu, prowadzaca uzytkownika przez gabinet grozy.<br />
Kontrolowanie klipów filmowych<br />
193
Rozdzial 7.<br />
Przeciaganie klipu filmowego<br />
Przeciaganie klipu filmowego<br />
Mechanizm przeciagnij-i-upusc pozwala<br />
tworzyc najbardziej bezposredni rodzaj<br />
interakcji pomiedzy uzytkownikiem i filmem<br />
Flasha. Nie ma nic bardziej satysfakcjonujacego<br />
niz mozliwosc przeciagniecia grafiki na ekran,<br />
przesuwania jej z jednego miejsca w drugie,<br />
a na koncu – porzucenia zupelnie gdzie indziej.<br />
Jest to naturalny sposób na interakcje<br />
uzytkownika z obiektami, a w dodatku bardzo<br />
latwy do wykorzystania. Tworzenie<br />
mechanizmów przeciagnij-i-upusc we Flashu<br />
zamyka sie w dwóch podstawowych krokach:<br />
przygotowaniu klipu filmowego<br />
i zaprojektowaniu przycisku wewnatrz klipu,<br />
wyzwalajacego akcje przeciagania.<br />
Zwykle przeciaganie rozpoczyna sie<br />
w momencie, kiedy uzytkownik nacisnie<br />
klawisz myszy. Pózniej, po zwolnieniu<br />
klawisza, przeciaganie zostaje przerwane. Stad<br />
akcja rozpoczecia przeciagania zwiazana jest ze<br />
zdarzeniem myszy on (press), a akcja<br />
zakonczenia przeciagania – ze zdarzeniem<br />
on (release).<br />
W celu rozpoczecia przeciagania<br />
klipu filmowego:<br />
1. Utwórz symbol klipu filmowego, umiesc<br />
jego klon na scenie i nadaj mu nazwe.<br />
2. Utwórz niewidzialny przycisk, tak jak to<br />
opisano w rozdziale 4., a nastepnie umiesc<br />
jego klon wewnatrz klipu filmowego<br />
(rys. 7.1).<br />
3. Zaznacz klon przycisku i otwórz palete<br />
akcji.<br />
4. Wybierz Actions/on (Esc + on). W oknie<br />
skryptu pojawi sie wyrazenie on (press).<br />
5. W bloku edycji parametrów usun<br />
zaznaczanie pola wyboru Release i zaznacz<br />
pole wyboru Press (rys. 7.2). Wyrazenie<br />
on (press) zostanie zastapione przez<br />
wyrazenie on (release).<br />
Rys. 7.1. Te oczy sa czescia symbolu klipu<br />
filmowego. W trybie edycji przeciagnij ikone<br />
niewidzialnego przycisku nad oczy, zeby<br />
przypisac akcje startDrag do niewidzialnego<br />
przycisku<br />
Rys. 7.2. Wybierz zdarzenie (Event) Press dla<br />
manipulatora on przypisanego do<br />
niewidzialnego przycisku w twoim klipie<br />
filmowym<br />
194
Kontrolowanie klipów filmowych<br />
Rys. 7.3. Wpisanie slowa kluczowego this w polu<br />
Target sprawia, ze akcja startDrag bedzie<br />
oddzialywac na biezacy klip filmowy<br />
6. Wybierz Actions/startDrag (Esc + dr).<br />
Ponizej zdarzenia myszy on (press)<br />
pojawi sie akcja startDrag.<br />
7. W polu Target bloku edycji parametrów<br />
wpisz this i zaznacz pole Expression<br />
(rys. 7.3).<br />
Slowo kluczowe this odnosi sie do<br />
biezacego klipu filmowego. Zaznaczenie<br />
pola wyboru Expression usuwa cudzyslów<br />
zamykajacy to slowo, dzieki czemu Flash<br />
traktuje je wlasnie jako slowo kluczowe,<br />
a nie lancuch znakowy.<br />
8. Przeciagnij klon klipu filmowego<br />
z biblioteki na scene.<br />
Poniewaz przycisk wewnatrz klipu<br />
filmowego uzywa wyrazenia wzglednego<br />
this, niepotrzebne jest nazywanie klonu<br />
klipu filmowego.<br />
9. Przetestuj film. Jesli nacisniesz klawisz<br />
myszy w obrebie klipu filmowego, bedziesz<br />
mógl go przeciagnac.<br />
Przeciaganie klipu filmowego<br />
195
Rozdzial 7.<br />
Przeciaganie klipu filmowego<br />
W celu zakonczenia<br />
przeciagania klipu filmowego:<br />
1. Pracujac dalej nad plikiem utworzonym<br />
w poprzednim cwiczeniu, zaznacz klamre<br />
zamykajaca w oknie skryptu.<br />
2. Wybierz Actions/on.<br />
Pojawi sie wyrazenie on (release).<br />
3. Wybierz Actions/stopDrag (Esc + sd).<br />
Pojawi sie wyrazenie stopDrag bez<br />
zadnych parametrów (rys. 7.4).<br />
4. Przetestuj film. Jesli nacis niesz klawisz<br />
myszy w obrebie klipu filmowego, bedziesz<br />
mógl go przeciagnac. Kiedy zwolnisz<br />
klawisz, zakonczysz przeciaganie (rys. 7.5).<br />
Wskazówki<br />
• Mozesz takze przypisac akcje startDrag<br />
do manipulatora zdarzenia klipu filmowego<br />
onClipEvent i nie przejmowac sie<br />
osadzonym niewidzialnym przyciskiem.<br />
Skorzystaj z tego sposobu, jesli masz tylko<br />
jeden klip filmowy, który odbiorca moze<br />
przyciagac, i kiedy nie potrzebujesz<br />
korzystac z cech niewidzialnego przycisku.<br />
Jesli, na przyklad, przypiszesz akcje<br />
startDrag do zdarzenia onClipEvent<br />
(load), Flash automatycznie wprowadzi<br />
mozliwosc przeciagania tego klipu<br />
filmowego. Kiedy przypiszesz akcje<br />
startDrag do zdarzenia onClipEvent<br />
(mouseDown), klip bedzie mozna<br />
przeciagac po uprzednim kliknieciu mysza<br />
gdziekolwiek na scenie.<br />
• Mozliwe jest przeciaganie tylko jednego<br />
klipu filmowego na raz. Wlasnie dlatego<br />
akcja stopDrag nie posiada zadnych<br />
parametrów; jest wykonywana tylko<br />
w odniesieniu do pliku aktualnie<br />
przeciaganego.<br />
Rys. 7.4. Przypisz akcje stopDrag do<br />
manipulatora zdarzenia on (release)<br />
Rys. 7.5. Kazdy z trzech elementów twarzy –<br />
widocznych po prawej – jest klipem<br />
filmowym, zawierajacym niewidzialny<br />
przycisk z przypisanym skryptem widocznym<br />
w ramce powyzej. Te trzy klipy moga byc<br />
przeciagniete nad ziemniaczana twarz<br />
i upuszczone w odpowiednich pozycjach<br />
196
Kontrolowanie klipów filmowych<br />
Rys. 7.6. Opcja Lock mouse to center wymusza<br />
przeciaganie klipu filmowego za punkt<br />
poczatkowy<br />
Byc moze wolalbys, zeby w czasie przesuwania<br />
klipu filmowego do wskaznika myszy<br />
przyciagany byl jego srodek, a nie punkt,<br />
w którym kliknal uzytkownik.<br />
W celu wysrodkowania<br />
przeciaganego klipu filmowego:<br />
1. W bloku edycji parametrów palety akcji<br />
zaznacz pole wyboru Lock mouse to center<br />
(rys. 7.6). Kiedy klikniesz mysza klip<br />
filmowy, który zamierzasz przeciagnac,<br />
punkt poczatkowy klipu zostanie<br />
przyciagniety do wskaznika myszy.<br />
Wskazówka<br />
• Jesli zaznaczysz opcje Lock mouse to<br />
center, upewnij sie, ze twój niewidzialny<br />
przycisk pokrywa punkt poczatkowy klipu<br />
filmowego. W przeciwnym razie, po<br />
przyciagnieciu do niego klipu, wskaznik nie<br />
bedzie juz dluzej znajdowal sie nad<br />
niewidzialnym przyciskiem i Flash nie<br />
wykryje momentu przerwania akcji<br />
przeciagania.<br />
Przeciaganie klipu filmowego<br />
197
Rozdzial 7.<br />
Przeciaganie klipu filmowego<br />
Byc moze chcialbys równiez ograniczyc obszar,<br />
po którym uzytkownik moze przeciagac klipy<br />
filmowe.<br />
W celu ograniczenia obszaru przeciagania<br />
klipu filmowego:<br />
1. Zaznacz pole wyboru Constrain to<br />
rectangle i wprowadz wspólrzedne<br />
(w pikselach) do wszystkich czterech pól,<br />
reprezentujacych krancowe polozenia<br />
punktu poczatkowego przeciaganego klipu<br />
filmowego (rys. 7.7).<br />
L: krancowe polozenie w kierunku lewego<br />
marginesu (minimalna wspólrzedna X),<br />
jakie moze osiagnac punkt poczatkowy klipu<br />
filmowego;<br />
R: krancowe polozenie w kierunku prawego<br />
marginesu (maksymalna wspólrzedna X),<br />
jakie moze osiagnac punkt poczatkowy klipu<br />
filmowego;<br />
T: krancowe polozenie w kierunku górnego<br />
marginesu (minimalna wspólrzedna Y),<br />
jakie moze osiagnac punkt poczatkowy klipu<br />
filmowego;<br />
B: krancowe polozenie w kierunku dolnego<br />
marginesu (maksymalna wspólrzedna X),<br />
jakie moze osiagnac punkt poczatkowy klipu<br />
filmowego;<br />
lub<br />
Wspólrzedne sa wzgledne w stosunku do<br />
listwy czasowej, w której rezyduje klip<br />
filmowy. Jesli przeciagany klip filmowy<br />
znajduje sie na glównej listwie czasowej,<br />
wspólrzedne odpowiadaja punktom na<br />
scenie, np. L=0, T=0 to lewy górny róg<br />
sceny. Jesli przeciagany klip filmowy<br />
zawiera sie wewnatrz innego klipu, L=0,<br />
T=0 odpowiada punktowi poczatkowemu<br />
klipu filmowego-rodzica.<br />
Rys. 7.7. Opcja Constrain to rectangle<br />
umozliwia ustawienie lewej (L), prawej (R),<br />
górnej (T) i dolnej (B) krawedzi<br />
Wskazówka<br />
• Parametrów opcji Constrain to<br />
rectangle mozesz uzyc do ograniczenia<br />
ruchu przeciagania tylko wzdluz<br />
poziomej lub pionowej sciezki, tak jak<br />
w przypadku pasków przewijania. Ustaw<br />
te same wartosci w polach L i R, zeby<br />
ograniczyc sie do ruchu w pionie, lub<br />
wprowadz identyczne ustawienia pól T<br />
i B, jesli przeciaganie ma sie odbywac<br />
tylko w prawo lub lewo.<br />
198
Kontrolowanie klipów filmowych<br />
Ustawianie wlasciwosci<br />
klipu filmowego<br />
Wiele sposród wlasciwosci klipu filmowego –<br />
jak rozmiar, przezroczystosc, pozycja, rotacja<br />
i jakosc – definiuja wyglad filmu. Korzystajac<br />
z akcji setProperty, mozesz wskazac<br />
dowolny klip filmowy i zmienic któras<br />
z wymienionych charakterystyk w czasie<br />
odtwarzania. Ponizsza tabela przedstawia<br />
wlasciwosci dostepne dla akcji setProperty.<br />
Niektóre z tych wlasciwosci maja charakter<br />
globalny, co oznacza, ze odnosza sie do calego<br />
filmu, a nie jedynie pojedynczego klipu<br />
filmowego.<br />
Tabela 7.1. Wlasciwosci ustawiane za pomoca akcji setProperty<br />
Wlasciwosc Wartosc Opis<br />
_alpha (Alpha) Liczba od 0 do 200 Okresla przezroczystosc, gdzie 0 oznacza<br />
calkowicie przezroczysty, a 100 – kryjacy.<br />
_visible (Visibility) Prawda lub falsz<br />
Okresla widzialnosc klipu filmowego.<br />
_name (Name) Nazwa Okresla nazwe nowego klonu klipu filmowego.<br />
_rotation (Rotation) Liczba<br />
Okresla stopien obrotu zgodnie z ruchem<br />
wskazówek zegara, np. wartosc 45 obraca klip<br />
filmowy w prawo.<br />
_height (Height) Liczba (w pikselach) Okresla rozmiar w pionie.<br />
_width (Width) Liczba (w pikselach) Okresla rozmiar w poziomie.<br />
_x (X Position) Liczba (w pikselach) Okresla pozycje w poziomie punktu<br />
poczatkowego klipu filmowego.<br />
_y (Y Position) Liczba (w pikselach) Okresla pozycje w pionie punktu<br />
poczatkowego klipu filmowego.<br />
_xscale (X Scale) Liczba Okresla procent rozmiaru w poziomie<br />
oryginalnego symbolu klipu filmowego.<br />
_yscale (Y Scale) Liczba Okresla procent rozmiaru w pionie<br />
oryginalnego symbolu klipu filmowego.<br />
_focusrect (Show<br />
focus rectangle)<br />
Prawda lub falsz<br />
Okresla, czy wokól przycisków lub pól pojawia<br />
sie zólty prostokat, kiedy uzywasz klawisza Tab<br />
do nawigowania pomiedzy tymi przyciskami lub<br />
polami. Jest to wlasciwosc globalna, odnoszaca<br />
sie do calego filmu, a nie poszczególnych klipów.<br />
Ustawianie wlasciwosci klipu<br />
199
Rozdzial 7.<br />
Tabela 7.1. Wlasciwosci ustawiane za pomoca akcji setProperty (ciag dalszy)<br />
Wlasciwosc Wartosc Opis<br />
Ustawianie wlasciwosci klipu<br />
_highquality<br />
(High quality)<br />
_quality (_quality)<br />
_soundbuftime<br />
(Sound buffer time)<br />
Wskazówki<br />
Liczba 0, 1 lub 2<br />
LOW (niska),<br />
MEDIUM (srednia),<br />
HIGH (wysoka) lub<br />
BEST (najlepsza)<br />
Liczba<br />
• Istnieje róznica pomiedzy wlasciwoscia<br />
Alpha ustawiona na 0 i Visibility ustawiona<br />
na falsz (False), mimo iz rezultaty moga<br />
wygladac podobnie. Jesli wlasciwosc<br />
Visibility ma wartosc False, to klip filmowy<br />
jest prawdziwie niewidoczny. Umieszczone<br />
w nim przyciski nie odpowiadaja<br />
i jakiekolwiek akcje, odnoszace sie do tego<br />
klipu filmowego, nie dzialaja. Natomiast<br />
w przypadku Alpha ustawionego na 0<br />
wszystkie przyciski i akcje klipu filmowego<br />
wciaz funkcjonuja.<br />
• Wspólrzedne przestrzeni x i y dla glównej<br />
listwy czasowej zachowuja sie inaczej, niz<br />
w przypadku listew czasowych klipów<br />
filmowych. W glównej listwie czasowej os x<br />
rozpoczyna sie od lewej krawedzi i rosnie<br />
w kierunku krawedzi prawej. Os y zaczyna sie<br />
od górnej krawedzi i zmierza do dolnej<br />
krawedzi. Tak wiec x = 0 i y = 0 wyznaczaja<br />
lewy górny róg sceny. W przypadku klipów<br />
filmowych, te same wartosci wspólrzednych<br />
odnosza sie do punktu poczatkowego<br />
(krzyzyka).<br />
Okresla stopien wygladzania krawedzi obiektów<br />
w czasie odtwarzania filmu. 2 = najlepszy: pelne<br />
wygladzanie wszystkich obiektów. 1 = wysoki:<br />
wygladzanie tylko w przypadku braku animacji.<br />
0 = niski: bez wygladzania. Jest to wlasciwosc<br />
globalna, odnoszaca sie do calego filmu, a nie<br />
poszczególnych klipów.<br />
Okresla stopien wygladzania krawedzi obiektów<br />
w czasie odtwarzania filmu. BEST = pelne<br />
wygladzanie wszystkich obiektów. HIGH =<br />
wygladzanie tylko w przypadku braku animacji.<br />
MEDIUM = wygladzanie niskiej jakosci. LOW =<br />
bez wygladzania. Jest to wlasciwosc globalna,<br />
odnoszaca sie do calego filmu, a nie<br />
poszczególnych klipów.<br />
Okresla czas (liczbe sekund), po którym film<br />
rozpoczyna odtwarzanie dzwieku. Wartosc domyslna<br />
to 5. Jest to wlasciwosc globalna, odnoszaca sie do<br />
calego filmu, a nie poszczególnych klipów.<br />
Wartosci dodatnie x<br />
Wartosci<br />
dodatnie y<br />
Wartosci<br />
ujemne x<br />
Wartosci<br />
ujemne y<br />
Wartosci<br />
dodatnie x<br />
Wartosci<br />
dodatnie y<br />
Rys. 7.8. Wspólrzedne x i y w glównej listwie<br />
czasowej (u góry) sa wysrodkowane<br />
wzgledem lewego górnego rogu sceny,<br />
a w przypadku klipu filmowego (u dolu) –<br />
wzgledem punktu poczatkowego<br />
200
Kontrolowanie klipów filmowych<br />
Rys. 7.9. Przypisz akcje setProperty do<br />
manipulatora zdarzenia on (release). Akcja ta<br />
zmienia wlasciwosci klipu filmowego oraz<br />
niektóre ustawienia globalne<br />
Rys. 7.10. Dla wspólrzednej x klipu filmowego<br />
eyepair na glównej listwie czasowej ustalono<br />
wartosc 123<br />
Rys. 7.11. Dla wspólrzednej y klipu filmowego<br />
eyepair na glównej listwie czasowej ustalono<br />
wartosc 85<br />
Nowa pozycja<br />
Stara pozycja<br />
Rys. 7.12. Przycisk przenosi klip filmowy<br />
z oczami w nowe miejsce, w obrebie ziemniaka<br />
Wartosc x wzrasta na prawo od punktu<br />
poczatkowego i zmniejsza sie do wartosci<br />
ujemnych na lewo od tego punktu. Wartosc<br />
y odpowiednio wzrasta w dól i zmniejsza sie<br />
w góre (rys. 7.8).<br />
• Wlasciwosci X Scale oraz Y Scale okreslaja<br />
procent rozmiaru pierwotnego symbolu klipu<br />
filmowego, który moze sie róznic w stosunku<br />
do tego, co widac na scenie. Jesli np. umiescisz<br />
klon klipu filmowego na scenie i zmniejszysz<br />
go o 50%, a potem, w czasie odtwarzania,<br />
nadasz wlasciwosciom X Scale oraz Y Scale<br />
wartosci 100, twój klip filmowy powiekszy sie<br />
dwukrotnie.<br />
W celu zmiany polozenia<br />
klipu filmowego:<br />
1. Utwórz symbol klipu filmowego, umiesc<br />
jego klon na scenie i nadaj mu nazwe.<br />
2. Utwórz symbol przycisku, umiesc jego klon<br />
na scenie, zaznacz go i otwórz palete akcji.<br />
3. Wybierz Actions/setProperty (Esc + sp).<br />
Ponizej manipulatora zdarzenia<br />
on (press) pojawi sie wyrazenie<br />
setProperty (rys. 7.9).<br />
4. Z menu rozwijanego Property w bloku<br />
edycji parametrów wybierz _x (X Position).<br />
5. Wprowadz sciezke dostepu do klipu<br />
filmowego w polu Target lub posluz sie<br />
przyciskiem Insert a target path u dolu okna.<br />
6. W polu Value wprowadz wspólrzedna x<br />
i zaznacz pole Expression, jako ze wpisana<br />
liczba reprezentuje wartosc (rys. 7.10).<br />
7. Ponownie wybierz Actions/setProperty.<br />
Drugie wyrazenie setProperty pojawi sie<br />
ponizej pierwszego.<br />
8. W polu Property wybierz _y (Y Position),<br />
w polu Target wprowadz sciezke dostepu,<br />
a w polu Value wprowadz wspólrzedna y.<br />
Zaznacz tez pole Expression (rys. 7.11).<br />
9. Przetestuj film. Kiedy klikniesz utworzony<br />
przycisk, klip filmowy zostanie przeniesiony<br />
w nowe miejsce, zdefiniowane za pomoca<br />
dwóch akcji setProperty (rys. 7.12).<br />
Ustawianie wlasciwosci klipu<br />
201
Rozdzial 7.<br />
Ustawianie wlasciwosci klipu<br />
Alternatywna metoda ustawiania wlasciwosci<br />
klipu filmowego jest napisanie skryptu wedlug<br />
szablonu: root.movieclip.property=<br />
value. Uzyj akcji set variable lub<br />
evaluate do przypisania wartosci do<br />
wlasciwosci wybranego klipu filmowego.<br />
W celu ustawienia<br />
wlasciwosci klipu filmowego<br />
za pomoca skryptu:<br />
1. W oknie palety akcji, wybierz Actions/set<br />
variable (Esc + sv). W polu Variable<br />
wprowadz sciezke dostepu do klipu<br />
filmowego, którego wlasciwosci chcesz<br />
zmodyfikowac. Wpisz kropke, a nastepnie<br />
wybrana wlasciwosc. W polu Value wpisz<br />
wlasciwy argument (rys. 7.13).<br />
lub<br />
W oknie palety akcji, wybierz<br />
Actions/evaluate (Esc + ev). W polu<br />
Expression wpisz sciezke dostepu do klipu<br />
filmowego, dalej kropke i na koncu<br />
wlasciwosc, która chcesz ustawic.<br />
Wprowadz znak równosci, a potem wartosc,<br />
która chcesz przypisac wlasciwosci<br />
(rys. 7.14).<br />
Rys. 7.13. Uzyj akcji set variable do<br />
wprowadzenia wlasciwosci klipu filmowego<br />
w polu Variable i jej nowej wartosci w polu<br />
Value<br />
Rys. 7.14. Akcja evaluate pozwala przypisac<br />
nowa wartosc wlasciwosci klipu filmowego za<br />
pomoca jednej tylko linii skryptu<br />
202
Kontrolowanie klipów filmowych<br />
Rys. 7.15. Wyrazenie setProperty zmienia nazwe<br />
klonu klipu filmowego z movieClipInstance na<br />
newInstanceName<br />
Zmiana nazwy klipu filmowego pozwala<br />
udostepnic go lub ukryc dla odwolujacych sie<br />
do niego akcji. Zalózmy, ze przycisk wywoluje<br />
metode _root.myDisplay.gotoAnd<br />
Stop(2). Teraz zmieniasz nazwe z myDisplay<br />
na yourDisplay. W efekcie przycisk nie<br />
bedzie w stanie odnalezc klonu.<br />
W celu zmiany nazwy<br />
klipu filmowego:<br />
1. Utwórz symbol klipu filmowego, umiesc<br />
jego klon na scenie i nadaj mu nazwe.<br />
2. Utwórz symbol przycisku, umiesc jego klon<br />
na scenie, zaznacz go i otwórz palete akcji.<br />
3. Wybierz Actions/setProperty. Ponizej<br />
manipulatora zdarzenia on (release)<br />
pojawi sie wyrazenie setProperty.<br />
4. Z menu rozwijanego Property w bloku<br />
edycji parametrów wybierz _name (Name).<br />
5. Wprowadz sciezke dostepu do klipu<br />
filmowego w polu Target lub posluz sie<br />
przyciskiem Insert a target path u dolu<br />
okna.<br />
6. W polu Value wpisz nowa nazwe klonu.<br />
Pole Expression pozostaw niezaznaczone,<br />
jako ze jest to wlasciwa nazwa. Kompletne<br />
wyrazenie ActionScript pojawi sie w oknie<br />
skryptu (rys. 7.15). Kiedy bedziesz testowal<br />
film i wcisniesz przycisk, zmieni sie nazwa<br />
klonu klipu filmowego.<br />
Ustawianie wlasciwosci klipu<br />
203
Rozdzial 7.<br />
Zmiana koloru klipu filmowego<br />
Zmiana koloru<br />
klipu filmowego<br />
Jednym z najbardziej widocznych braków na<br />
liscie wlasciwosci klipu filmowego<br />
udostepnianych przez akcje setProperty jest<br />
kolor. Mimo to mozesz skorzystac z obiektu<br />
Color (predefiniowanej klasy), który pozwala<br />
ustawic lub zmienic kolor klipu filmowego.<br />
Na poczatek trzeba przygotowac klon nowego<br />
obiektu koloru za pomoca funkcji konstruktora:<br />
nameofColorObject =<br />
new Color(movieClipInstance)<br />
gdzie nameofColorObject stanowi nazwe<br />
twojego nowego obiektu koloru,<br />
a movieClipInstance jest sciezka dostepu<br />
do klipu filmowego, który chcesz edytowac.<br />
Nastepnie mozesz uzyc nowego obiektu koloru<br />
do ustawienia wartosci RGB koloru klipu<br />
filmowego za pomoca metody setRGB.<br />
Definiujac nowy kolor,uzywaj szesnastkowych<br />
odpowiedników kazdego ze skladowych koloru<br />
(czerwonego, zielonego i niebieskiego) wedlug<br />
szablonu: 0xRRGGBB. Byc moze widziales juz<br />
podobny, szesciocyfrowy kod w dokumentach<br />
HTML, w liniach definiujacych kolor tla<br />
witryny sieciowej. Takie cyfrowe oznaczenia<br />
kolorów mozesz znalezc na palecie Mixer.<br />
W menu rozwijanym opcji palety wybierz Hex<br />
jako tryb reprezentacji kolorów (rys. 7.16),<br />
a w oknie palety pojawia sie szesnastkowe<br />
oznaczenia kazdego ze skladowych koloru. Te<br />
szesciocyfrowe kody widoczne sa takze obok<br />
próbek kolorów w menu rozwijanym próbek<br />
Stroke Color i Fill Color (rys. 7.17).<br />
Kolor<br />
biezacy<br />
Wartosc szesnastkowa<br />
skladowej czerwonej (G)<br />
Wartosc szesnastkowa<br />
skladowej czerwonej (R)<br />
Rys. 7.16. Jedna z opcji menu rozwijanego<br />
palety Mixer umozliwia zobrazowanie<br />
wartosci skladowych koloru RGB za pomoca<br />
liczb szesnastkowych<br />
Ikona podgladu koloru<br />
Kod szesnastkowy<br />
Wartosc szesnastkowa<br />
skladowej czerwonej (B)<br />
Rys. 7.17. Kod szesnastkowy jest wyswietlany<br />
w polu widocznym obok ikony podgladu<br />
koloru<br />
204
Kontrolowanie klipów filmowych<br />
Rys. 7.18. Funkcja konstruktora new Color jest<br />
uzywana do tworzenia nowego obiektu koloru<br />
Rys. 7.19. Nowy obiekt koloru nosi nazwe<br />
myColorObject i jest skojarzony z klipem<br />
filmowym shirt<br />
Rys. 7.20. Metoda setRGB posiada parametr<br />
oxRRGGBB bedacy szesnastkowa reprezentacja<br />
koloru<br />
Rys. 7.21. Uzyj akcji setRGB z róznymi<br />
wartosciami szesnastkowymi argumentu<br />
do zmiany koloru tego klipu filmowego shirt<br />
W celu ustawienia<br />
koloru klipu filmowego:<br />
1. Utwórz symbol klipu filmowego, umiesc<br />
jego klon na scenie i nadaj mu nazwe.<br />
2. Utwórz symbol przycisku, umiesc jego klon<br />
na scenie, zaznacz go i otwórz palete akcji.<br />
3. Wybierz Actions/set variable.<br />
4. W polu Variable wprowadz nazwe nowego<br />
obiektu koloru.<br />
5. Kliknij mysza w polu Value i wybierz<br />
Objects/Color/new Color. Zaznacz pole<br />
wyboru Expression widniejace obok pola<br />
Value. W polu Value pojawi sie wyrazenie<br />
new Color z podswietlonym argumentem<br />
target (rys. 7.18).<br />
6. Zastap podswietlony argument w postaci<br />
slowa target sciezka dostepu do twojego<br />
klipu filmowego, ewentualnie posluz sie<br />
przyciskiem Insert a target path w prawym<br />
dolnym rogu palety. Pierwsze wyrazenie<br />
ActionScript jest kompletne. Powoduje ono<br />
utworzenie klonu nowego obiektu koloru<br />
(rys. 7.19).<br />
7. Wybierz Actions/evaluate . W polu<br />
Expression wprowadz nazwe nowo<br />
utworzonego obiektu koloru.<br />
8. Wybierz Objects/Color/setRGB . Metoda<br />
setRGB pojawi sie w polu Expression<br />
w bloku edycji parametrów przed nazwa<br />
twojego obiektu koloru. Podswietlony<br />
zostanie argument 0xRRGGBB (rys. 7.20).<br />
9. W nawiasach stojacych przy metodzie<br />
setRGB wpisz 0x, a nastepnie<br />
szesciocyfrowy kod szesnastkowy nowego<br />
koloru (rys. 7.21).<br />
10. Przetestuj film. Kiedy klikniesz przycisk,<br />
utworzony zostanie klon obiektu koloru<br />
wywolujacego metode setRGB. Klipowi<br />
filmowemu skojarzonemu z obiektem koloru<br />
zostanie przypisana nowa wartosc RGB.<br />
Zmiana koloru klipu filmowego<br />
205
Rozdzial 7.<br />
Zmiana koloru klipu filmowego<br />
Uzywanie<br />
obiektu transformacji koloru<br />
Za pomoca metody setTransform mozna<br />
przeksztalcac kolor dowolnego klipu<br />
filmowego. Metoda ta pozwala zdefiniowac<br />
procentowe lub liczbowe wartosci skladowych<br />
RGB, jak równiez poziomu przezroczystosci.<br />
Parametry te sa dostepne na palecie Instance<br />
w menu rozwijanym Advanced (rys. 7.22).<br />
Zeby móc uzyc metody setTransform wobec<br />
obiektu koloru, trzeba najpierw utworzyc inny<br />
obiekt, który w rzeczywistosci bedzie<br />
przechowywal informacje o przeksztalceniach<br />
koloru w postaci parametrów ra, rb, ga, gb,<br />
ba, bb, aa, ab (Tabela 7.2). Obiekt<br />
transformacji koloru jest tworzony na podstawie<br />
standardowej predefiniowanej klasy o nazwie<br />
Object. Kiedy juz zdefiniujesz obiekt<br />
transformacji koloru, mozesz uzywac go<br />
z metoda setTransform twojego obiektu<br />
koloru. Byc moze jest tu troche zamieszania,<br />
ale podstawowa idea jest nastepujaca: tam,<br />
gdzie zwykle widzisz liczby lub lancuchy<br />
znakowe jako parametry metody – np. cyfra 5<br />
w metodzie gotoAndStop(5) – bedziesz od<br />
teraz uzywal obiektu w postaci np. set<br />
Transform(myColorTransformObject).<br />
Rys. 7.22. Opcje efektów klonu, dostepne<br />
w menu rozwijanym Advanced, pozwalaja<br />
okreslic wartosci procentowe lub liczbowe<br />
skladowych RGB lub poziomu<br />
przezroczystosci<br />
Tabela 7.2. Parametry metody setTransform<br />
Parametr<br />
Wartosc<br />
ra Procent (–100 do 100)<br />
skladowej czerwonej<br />
rb Wartosc (–255 do 255)<br />
skladowej czerwonej<br />
ga Procent (–100 do 100)<br />
skladowej zielonej<br />
gb Wartosc (–255 do 255)<br />
skladowej zielonej<br />
ba Procent (–100 do 100)<br />
skladowej niebieskiej<br />
bb Wartosc (–255 do 255)<br />
skladowej niebieskiej<br />
aa Procent (–100 do 100)<br />
poziomu przezroczystosci<br />
ab Wartosc (–255 do 255)<br />
poziomu przezroczystosci<br />
206
Kontrolowanie klipów filmowych<br />
Rys. 7.23. Tworzymy nowy obiekt koloru<br />
o nazwie myNewColor dla klipu filmowego shirt<br />
Rys. 7.24. Utwórz nowy podstawowy obiekt<br />
o nazwie newColorTransform za pomoca funkcji<br />
konstruktora newObject. Obiekt ten bedzie<br />
przechowywal informacje o skladowych RGB<br />
i poziomie przezroczystosci<br />
W celu przeksztalcenia koloru<br />
i poziomu przezroczystosci<br />
klipu filmowego:<br />
1. Utwórz symbol klipu filmowego, umiesc<br />
jego klon na scenie i nadaj mu nazwe.<br />
2. Utwórz symbol przycisku, umiesc jego klon<br />
na scenie, zaznacz go i otwórz palete akcji.<br />
3. Wybierz Actions/set variable.<br />
4. Przygotuj klon nowego obiektu koloru<br />
w sposób opisany w poprzednim cwiczeniu<br />
(rys. 7.23).<br />
5. Ponownie wybierz Actions/set variable.<br />
6. W polu Variable wpisz nazwe obiektu<br />
transformacji koloru.<br />
7. Kliknij w polu Value i wybierz Objects/<br />
Object/new Object. Zaznacz pole<br />
Expression widniejace obok pola Value.<br />
W ten sposób otrzymales klon nowego<br />
obiektu transformacji koloru (rys. 7.24).<br />
8. Wybierz Actions/set variable. W polu<br />
Variable wprowadz nazwe twojego obiektu<br />
transformacji koloru, kropke, a dalej jeden<br />
z parametrów. W polu Value wpisz liczbe.<br />
Zaznacz pole Expression widniejace obok<br />
pola Value. Powtórz czynnosci dla<br />
wszystkich osmiu parametrów (rys. 7.25).<br />
W ten sposób zdefiniowales parametry<br />
twojego obiektu transformacji koloru.<br />
9. Wybierz Actions/evaluate . W polu<br />
Expression wpisz nazwe twojego obiektu<br />
koloru.<br />
Zmiana koloru klipu filmowego<br />
Rys. 7.25. Wartosci skladowych koloru i poziomu<br />
przezroczystosci sa ustawiane przy pomocy serii<br />
wyrazen set variable<br />
207
Rozdzial 7.<br />
Zmiana koloru klipu filmowego<br />
10. Wybierz Objects/Color/setTransform.<br />
Metoda setTransform pojawi sie za<br />
obiektem koloru w polu Expression<br />
z podswietlonym argumentem cxform<br />
w nawiasach. Termin cxform jest skrótem<br />
od „color transform” (przeksztalcenie<br />
koloru) (rys. 7.26).<br />
11. Zastap podswietlony argument cxform<br />
nazwa twojego obiektu transformacji koloru<br />
(rys. 7.27).<br />
Kompletny skrypt powinien wygladac<br />
podobnie do pokazanego na rys. 7.28.<br />
12. Przetestuj film. Kiedy klikniesz utworzony<br />
przycisk, wprowadzone zostana klony<br />
obiektu koloru oraz obiektu transformacji<br />
koloru. Obiekt koloru wywoluje metode<br />
setTransform, uzywajaca obiektu<br />
transformacji koloru jako argumentu. Klip<br />
filmowy skojarzony z obiektem koloru<br />
zmieni kolor i poziom przezroczystosci.<br />
Wskazówka<br />
• Zamiast tworzyc osiem oddzielnych<br />
wyrazen definiujacych parametry obiektu<br />
transformacji koloru, wystarczy napisac<br />
jedno, zawierajace je wszystkie. Uzyj<br />
skladni:<br />
myColorTransform = { ra: '100',<br />
rb: '150', ga: '75', gb: '200',<br />
ba: '20', bb: '188', aa: '50',<br />
ab: '255'}<br />
gdzie parametry oddzielone sa ich<br />
wartosciami i dwukropkiem, a zestawienia<br />
parametr/wartosc oddzielone sa<br />
przecinkami.<br />
Rys. 7.26. Metoda setTransform wymaga<br />
argumentu cxform, gdzie cxform oznacza<br />
obiekt przechowujacy informacje<br />
o przeksztalceniu koloru<br />
Rys. 7.27. Metoda setTransform uzywa<br />
obiektu myColorTransform do zmiany obiektu<br />
koloru myNewColor<br />
Rys. 7.28. Kompletny skrypt zmienia kolor<br />
i poziom przezroczystosci klipu<br />
filmowegoshirt za kliknieciem przycisku<br />
208
Kontrolowanie klipów filmowych<br />
Zmiana kolejnosci<br />
ulozenia klipów filmowych<br />
Gdy bedziesz mial do czynienia ze zlozonymi<br />
przeciaganymi klipami filmowymi, zauwazysz,<br />
ze obiekty zachowuja swoja kolejnosc ulozenia<br />
nawet w momencie, gdy sa przeciagane, a to<br />
moze wygladac nieco dziwnie. Zwykle<br />
spodziewamy sie, ze przeciagany obiekt trafi na<br />
szczyt stosu. Mozna osiagnac taki efekt przy<br />
pomocy akcji swapDepths, która umozliwia<br />
przemieszczanie klipów filmowych w stosie<br />
w sposób dynamiczny. Uzywajac tej akcji,<br />
mozna zamienic miejscami dwa sasiadujace<br />
w stosie klipy filmowe o podanej nazwie lub tez<br />
wybrany klip z dowolnym innym, po wskazaniu<br />
poziomu, na którym jest umieszczony. Tak<br />
zwany poziom glebokosci (depth level) jest<br />
liczba okreslajaca pozycje klipu filmowego<br />
w stosie. Klipy o wyzszych wartosciach<br />
poziomu glebokosci beda nakladaly sie na te<br />
o poziomach nizs zych, podobnie jak ma to<br />
miejsce w przypadku poziomów doczytywanych<br />
filmów. Niezwykla cecha akcji swapDepths<br />
jest to, ze dziala ona na wskros warstw, tak wiec<br />
klip filmowy w dolnej warstwie moze sie<br />
zamienic poziomami z klipem umieszczonym<br />
w najwyzszej warstwie.<br />
Zmiana kolejnosci ulozenia klipów<br />
209
Rozdzial 7.<br />
Zmiana kolejnosci ulozenia klipów<br />
W celu zmiany ulozenia<br />
dwóch klipów filmowych:<br />
1. Utwórz dwa przeciagane klipy filmowe,<br />
w sposób opisany wczesniej w tym<br />
rozdziale. Powinny to byc dwa rózne<br />
symbole.<br />
2. Umiesc klony obu klipów filmowych na<br />
scenie, w tej samej warstwie. Nadaj klipom<br />
nazwy, poslugujac sie paleta Instance.<br />
3. Przejdz do trybu edycji symbolu pierwszego<br />
klipu filmowego i zaznacz niewidzialny<br />
przycisk umieszczony w tym klipie.<br />
4. Otwórz palete akcji i zaznacz wyrazenie<br />
startDrag. Wybierz Actions/evaluate.<br />
W polu Expression wpisz this.<br />
5. Wybierz Objects/Movie Clip/swapDepths.<br />
W polu Expression, za wyrazeniem this<br />
pojawi sie metoda swapDepths,<br />
z podswietlonym slowem target<br />
(rys. 7.29).<br />
6. W polu Expression wstaw w miejsce slowa<br />
target sciezke dostepu do drugiego klipu<br />
filmowego (rys. 7.30).<br />
7. Przejdz do trybu edycji symbolu drugiego<br />
klipu filmowego i dodaj podobne wyrazenie<br />
swapDepths do jego niewidzialnego<br />
przycisku. Podaj dla wyrazenia<br />
swapDepths sciezke dostepu do<br />
pierwszego klipu filmowego. Skrypty<br />
napisane dla obydwu przycisków w tych<br />
dwóch róznych klipach filmowych powinny<br />
wygladac podobnie jak skrypty na rys. 7.31.<br />
8. Przetestuj film. Kiedy przeciagniesz<br />
pierwszy z klipów filmowych, zamieni sie<br />
on miejscem w stosie z drugim klipem<br />
filmowym – i odwrotnie.<br />
Rys. 7.29. Przypisz akcje swapDepths<br />
do manipulatora zdarzenia on (press). Akcja<br />
ta zmienia kolejnosc ulozenia klipów<br />
filmowych w stosie<br />
Rys. 7.30. Biezacy klip filmowy oraz klip<br />
o nazwie puzzle2 zamienia sie kolejnoscia<br />
ulozenia<br />
Rys. 7.31. Metoda swapDepths zostala<br />
skojarzona z akcja startDrag. Przycisk<br />
z akcjami, jak te przypisane na górze, znajduje<br />
sie w klipie filmowym puzzle1. Przycisk<br />
z akcjami, jak te przypisane na dole, znajduje<br />
sie w klipie filmowym puzzle2. Obydwa klipy<br />
filmowe po przeciagnieciu zmienia kolejnosc<br />
ulozenia w stosie<br />
210
Kontrolowanie klipów filmowych<br />
Rys. 7.32. Biezacy klip filmowy zamieni sie<br />
miejscami w stosie z tym, który jest na poziomie<br />
glebokosci 2<br />
Klip filmowy na<br />
poziomie glebokosci 0<br />
Aktualnie<br />
przeciagany klip<br />
filmowy jest na<br />
poziomie<br />
glebokosci 2<br />
Klip filmowy na<br />
poziomie glebokosci 0<br />
Aktualnie<br />
przeciagany klip<br />
filmowy jest na<br />
poziomie<br />
glebokosci 2<br />
Rys. 7.33. Wymiana poziomów glebokosci jest<br />
idealna w sytuacjach, gdy masz do czynienia<br />
z wieloma przeciaganymi klipami filmowymi,<br />
tak jak te fragmenty ukladanki<br />
W celu wymiany poziomu glebokosci<br />
klipu filmowego:<br />
1. Kontynuuj prace z plikiem utworzonym<br />
w poprzednim cwiczeniu.<br />
2. Przejdz do trybu edycji symbolu pierwszego<br />
klipu filmowego i zaznacz jego niewidzialny<br />
przycisk.<br />
3. W miejsce sciezki dostepu w argumencie<br />
swapDepths wprowadz liczbe okreslajaca<br />
poziom glebokosci (rys. 7.32).<br />
4. Przejdz do trybu edycji symbolu drugiego<br />
klipu filmowego i w miejsce sciezki dostepu<br />
w argumencie swapDepths wprowadz<br />
liczbe okreslajaca ten sam poziom<br />
glebokosci.<br />
5. Przetestuj film. Pierwszy klip filmowy,<br />
który przeciagniesz, zostanie umieszczony<br />
na podanym poziomie glebokosci. Drugi<br />
przeciagany klip zostanie zastapiony<br />
jakimkolwiek innym klipem, aktualnie<br />
znajdujacym sie na tym poziomie<br />
(rys. 7.33).<br />
Wskazówka<br />
• Róznica pomiedzy uzywaniem sciezki<br />
dostepu a stosowaniem numeru poziomu<br />
glebokosci w argumencie swapDepths<br />
zalezy od twoich potrzeb. Sciezki dostepu<br />
uzyj do prostej zamiany dwóch klipów<br />
o podanych nazwach, gdzie klip<br />
przykrywajacy inny klip filmowy zostanie<br />
ustawiony za nim. Jesli przeciagany klip<br />
filmowy ma zawsze znajdowac sie ponad<br />
innymi klipami, uzyj poziomów glebokosci<br />
do ustalenia jego pozycji zawsze na<br />
wierzchu stosu.<br />
Zmiana kolejnosci ulozenia klipów<br />
211
Wykrywanie upuszczonych klipów<br />
Rozdzial 7.<br />
Wykrywanie<br />
upuszczonych<br />
klipów filmowych<br />
Skoro potrafisz stworzyc klip filmowy, który<br />
mozna przeciagac po scenie, chcialbys na<br />
pewno wiedziec, gdzie uzytkownik upuszcza<br />
poszczególne klipy. Jesli klipami filmowymi sa<br />
np. fragmenty ukladanki, powinienes wiedziec,<br />
czy te fragmenty sa przeciagane i upuszczane<br />
w naleznych im miejscach. Jednym<br />
z najprostszych sposobów na okreslenie<br />
lokalizacji upuszczonego klipu filmowego jest<br />
skorzystanie z wlasciwosci klipu o nazwie<br />
_droptarget. Wlasciwosc ta zwraca<br />
bezwzgledna sciezke dostepu do innego klipu<br />
filmowego, znajdujacego sie w miejscu<br />
upuszczenia klipu przeciaganego. Ten drugi klip<br />
filmowy jest wiec wlasciwie miejscem<br />
przeznaczenia dla przeciaganego klipu<br />
filmowego. Uzyj wyrazenia warunkowego do<br />
sprawdzenia, czy wlasciwosc _droptarget<br />
przeciaganego klipu jest identyczna ze sciezka<br />
dostepu do docelowego klipu filmowego.<br />
Wykonaj odpowiednie akcje w zaleznosci od<br />
tego, czy warunek jest spelniony, czy tez nie.<br />
Powszechna praktyka w przygotowywaniu<br />
klipów filmowych z mechanizmami przeciagniji-upusc<br />
jest tworzenie zachowan przyciagnij-do<br />
oraz efektów odsylania do pozycji wyjsciowej.<br />
Kiedy uzytkownik upuszcza klip filmowy<br />
blisko wlasciwej lokalizacji, mozesz to<br />
wykryc za pomoca wlasciwosci<br />
_droptarget, a nastepnie ustawic lub<br />
przyciagnac ten klip do precyzyjnie<br />
wyznaczonej pozycji za pomoca akcji<br />
setProperty, ustalajacej wspólrzedne x i y<br />
tej pozycji. Jesli uzytkownik upusci klip<br />
filmowy w nieprawidlowym miejscu,<br />
mozesz wykryc to równiez za pomoca<br />
wlasciwosci _droptarget, a nastepnie<br />
odeslac klip do jego pierwotnej lokalizacji<br />
za pomoca akcji setProperty.<br />
Nalezy zwrócic uwage, ze w przypadku<br />
uzywania skladni z ukosnikiem wlasciwosc<br />
_droptarget zwraca bezwzgledna sciezke<br />
dostepu. Wlasciwosc ta wywodzi sie<br />
z czwartej wersji programu, uzywajacej<br />
tylko skladni z ukosnikiem. Zeby wiec<br />
sprawdzic, czy wlasciwosc _droptarget<br />
odpowiada sciezce dostepu do docelowego<br />
klipu filmowego, skonstruuj wyrazenie<br />
warunkowe podobne do tego:<br />
_root.przeciaganyKlipFilmowy.<br />
_droptarget ==<br />
"/docelowyKlipFilmowy"<br />
212
Kontrolowanie klipów filmowych<br />
Rys. 7.34. Ten warunek sprawdza, czy biezacy<br />
klip filmowy zostal upuszczony w miejscu<br />
zajmowanym przez klip filmowy o nazwie<br />
destination. Ukosnik (/) oznacza glówna listwe<br />
czasowa<br />
Rys. 7.35. Jesli przeciagany klip filmowy zostanie<br />
upuszczony na klip filmowy o nazwie destination,<br />
argument jego wlasciwosci visibility zostanie<br />
ustawiony na false (falsz)<br />
Docelowy klip<br />
filmowy<br />
Przeciagany klip<br />
filmowy<br />
Docelowy klip<br />
filmowy<br />
Rys. 7.36. Ten hamburger zniknie, kiedy upuscisz<br />
go nad koszem<br />
W celu wykrycia<br />
upuszczonego klipu filmowego:<br />
1. Utwórz przeciagany klip filmowy, umiesc<br />
jego klon na scenie i nadaj mu nazwe za<br />
pomoca palety Instance.<br />
2. Utwórz kolejny klip filmowy, umiesc jego<br />
klon na scenie i nadaj mu nazwe.<br />
Bedzie to docelowy klip filmowy dla klipu<br />
przeciaganego.<br />
3. Przejdz do trybu edycji symbolu<br />
przeciaganego klipu filmowego i zaznacz<br />
umieszczony w nim niewidzialny przycisk.<br />
4. Zaznacz akcje stopDrag i wybierz<br />
Actions/if (Esc + if).<br />
Ponizej wyrazenia stopDrag pojawi sie<br />
wyrazenie if.<br />
5. W polu Condition wpisz this. Nastepnie<br />
wprowadz kropke.<br />
6. Wybierz Properties/_droptarget.<br />
7. Wpisz dwa znaki równosci.<br />
Para znaków równosci sprawdza, czy jedna<br />
wartosc jest taka sama, jak druga.<br />
Pojedynczy znak równosci jest uzywany do<br />
przypisywania jednej zmiennej do innej.<br />
8. Wprowadz sciezke dostepu do docelowego<br />
klipu filmowego, ujeta w cudzyslów,<br />
korzystajac ze skladni z ukosnikiem.<br />
Skonstruowales wlasnie koncowe wyrazenie<br />
warunkowe (rys. 7.34).<br />
9. Wybierz akcje, która bedzie wykonywana,<br />
gdy warunek zostanie spelniony. Kompletny<br />
skrypt powinien wygladac podobnie do tego<br />
na rys. 7.35.<br />
10. Przetestuj film (rys. 7.36).<br />
Kiedy upuscisz przeciagany klip filmowy,<br />
Flash sprawdzi, czy jego wlasciwosc<br />
_droptarget odpowiada sciezce dostepu<br />
do drugiego klipu filmowego. Jesli tak,<br />
wlasciwosci _visibility przeciaganego<br />
klipu filmowego zostaje przypisany<br />
argument prawda (true) i klip znika.<br />
Wykrywanie upuszczonych klipów<br />
213
Rozdzial 7.<br />
Wykrywanie upuszczonych klipów<br />
W celu utworzenia<br />
efektu odsylania<br />
do pozycji wyjsciowej:<br />
1. Kontynuuj prace z plikiem utworzonym<br />
w poprzednim cwiczeniu.<br />
2. Przejdz do trybu edycji symbolu<br />
przeciaganego klipu filmowego i zaznacz<br />
umieszczony w klipie niewidzialny przycisk.<br />
3. Zaznacz ostatnia akcje w wyrazeniu if<br />
i wybierz Actions/else (Esc + el).<br />
Pojawi sie wyrazenie else. Daje ci ono<br />
mozliwosc wybrania alternatywnego<br />
dzialania w przypadku niespelnienia<br />
warunku wyrazenia if (rys. 7.37).<br />
4. Wybierz Actions/setProperty. Z menu<br />
rozwijanego Property wybierz X Position,<br />
wpisz this w polu Target i wprowadz<br />
pierwotna wartosc wspólrzednej x w polu<br />
Value. Zaznacz obydwa pola Expression<br />
(rys. 7.38).<br />
To wyrazenie setProperty zmienia<br />
wspólrzedna x polozenia przeciaganego<br />
klipu filmowego, jesli nie zostal upuszczony<br />
nad docelowym klipem filmowym.<br />
Rys. 7.37. Akcja else wprowadza alternatywe<br />
dla warunku if<br />
Rys. 7.38. Wspólrzedna x ma wartosc 150<br />
214
Kontrolowanie klipów filmowych<br />
Rys. 7.39. Akcje tworzace efekt odsylania do<br />
pozycji wyjsciowej sa przypisane do warunku else<br />
5. Wybierz Actions/setProperty. Z menu<br />
rozwijanego Property wybierz Y Position,<br />
wpisz this w polu Target i wprowadz<br />
pierwotna wartosc wspólrzednej y w polu<br />
Value. Zaznacz obydwa pola Expression.<br />
To wyrazenie setProperty zmienia<br />
wspólrzedna y polozenia przeciaganego<br />
klipu filmowego, jesli nie zostal upuszczony<br />
nad docelowym klipem filmowym.<br />
Kompletny skrypt powinien wygladac jak<br />
na rys. 7.39.<br />
6. Przetestuj film. Jesli przeciagany klip<br />
filmowy nie zostanie upuszczony nad<br />
docelowym klipem filmowym, Flash ustawi<br />
wartosci wspólrzednych x i y, które odesla<br />
klip do jego pierwotnego miejsca.<br />
Wskazówki<br />
• Uzyj akcji eval do oszacowania<br />
wlasciwosci _droptarget<br />
i przekonwertowania jej z postaci lancucha<br />
znakowego w skladni z ukosnikiem do<br />
postaci sciezki dostepu w konstrukcjach<br />
opartych na skladni z kropka. Móglbys, na<br />
przyklad, napisac wyrazenie warunkowe<br />
podobne do tego:<br />
Eval(_root.draggableMovieClip.<br />
_droptarget)==_root.<br />
destinationMovieClip<br />
• Flash ustala lokalizacje upuszczonego klipu<br />
filmowego w jego punkcie poczatkowym.<br />
Jesli punkt poczatkowy upuszczonego klipu<br />
filmowego nie znajdzie sie w obrebie<br />
obszaru graficznego docelowego klipu<br />
filmowego, przeciagany klip nie zostanie<br />
rozpoznany, nawet jesli czesciowo pokrywa<br />
klip docelowy.<br />
Wykrywanie upuszczonych klipów<br />
215
Rozdzial 7.<br />
Detekcja kolizji klipów filmowych<br />
Detekcja kolizji<br />
klipów filmowych<br />
Kolejnym warunkiem, który mozesz sprawdzac,<br />
jest okreslenie, czy klip filmowy przecina sie<br />
z innym klipem filmowym. Przykladowo,<br />
w grze w stylu Pong wystepuje detekcja kolizji<br />
pomiedzy pilka, rakietkami i sciana, a wszystkie<br />
te elementy sa klipami filmowymi. Detekcja<br />
kolizji klipów filmowych moze tez byc<br />
przydatna na wyszukanych witrynach handlu<br />
elektronicznego. Powiedzmy, ze<br />
przygotowujesz strone pozwalajaca dokonywac<br />
zakupów w sieci, umozliwiajaca klientom<br />
przenoszenie wybranych towarów do koszyka.<br />
Mozesz wykryc moment, w którym przeciagany<br />
obiekt pokrywa sie z koszykiem i wyzwolic<br />
jakas interakcje, polegajaca np. na<br />
podswietleniu koszyka lub wyswietleniu ceny<br />
produktu, zanim uzytkownik upusci go na<br />
koszykiem.<br />
Detekcja kolizji wykorzystuje metode klipu<br />
filmowego hitTest. Metody tej uzywa sie<br />
na dwa sposoby. Pierwszy z nich polega na<br />
sprawdzeniu, czy obramowania dwóch<br />
dowolnych klipów filmowych przecinaja sie.<br />
Obramowanie klipu filmowego to najmniejszy<br />
obszar w ksztalcie prostokata, w którym moze<br />
sie zmiescic grafika klipu. Ta metoda jest<br />
idealnym ro zwiazaniem w przypadkach, kiedy<br />
nastepuje kolizja dwóch grafik, np. pilki<br />
z rakietka, statku kosmicznego z asteroida albo<br />
ksiazki z koszykiem. Wystarczy po prostu<br />
wprowadzic sciezke dostepu do klipu<br />
filmowego jako argument metody hitTest –<br />
np. hitTest(_root.target).<br />
216
Kontrolowanie klipów filmowych<br />
Obramowanie<br />
klipu filmowego<br />
Rys. 7.40. Jesli parametr shapeflag ma wartosc<br />
prawda (u góry), to znaczy, ze dwa obiekty nie<br />
przecinaja sie. Jesli parametr shapeflag ma<br />
wartosc falsz (u dolu), to znaczy, ze dwa obiekty<br />
beda sie przecinac<br />
Rys. 7.41. onClipEvent (enterFrame) jest<br />
idealnym manipulatorem zdarzenia do<br />
nieustannego sprawdzania warunku<br />
Rys. 7.42. Ten warunek sprawdza, czy biezacy<br />
klip filmowy przecina sie z klipem filmowym<br />
asteroid<br />
Drugi sposób wykorzystania metody polega<br />
na sprawdzeniu, czy okreslony punkt<br />
o wspólrzednych x, y przecina sie z grafika.<br />
Tutaj wykorzystuje sie odniesienie do punktu,<br />
metoda ta nadaje sie wiec tylko do sprawdzania,<br />
czy punkt poczatkowy grafiki lub wskaznik<br />
myszy przecinaja sie z klipem filmowym.<br />
Argumentami metody hitTest sa wówczas<br />
wartosci x, y oraz parametr shapeflag, np.<br />
hitTest(x, y, shapeflag). Parametr<br />
shapeflag moze przyjmowac wartosc<br />
prawda lub falsz. Determinuje to, czy<br />
chodzi o obramowanie klipu filmowego (falsz,<br />
false), czy tez po prostu o ksztalt grafiki<br />
(prawda, true) (rys. 7.40).<br />
W celu wykrycia<br />
kolizji dwóch klipów filmowych:<br />
1. Utwórz klip filmowy, umiesc jego klon na<br />
scenie i nadaj mu nazwe.<br />
2. Utwórz przeciagany klip filmowy, umiesc<br />
jego klon na scenie i nadaj mu nazwe.<br />
3. Zaznacz przeciagany klip filmowy i otwórz<br />
palete akcji.<br />
4. Wybierz Actions/onClipEvent (Esc + oc ).<br />
W bloku edycji parametrów, w polu Event<br />
wybierz EnterFrame. Pojawi sie wyrazenie<br />
onClipEvent (enterFrame). Zdarzenie<br />
to wystepuje zgodnie z predkoscia<br />
odtwarzania filmu, co czyni je idealnym<br />
do nieustannego sprawdzania warunku<br />
hitTest (rys. 7.41).<br />
5. Wybierz Actions/if.<br />
6. W polu Condition wpisz this.<br />
7. Wybierz Objects/Movie Clip/hitTest.<br />
8. Wprowadz sciezke dostepu do pierwszego<br />
z klipów filmowych, umieszczajac ja<br />
w nawiasach wyrazenia hitTest.<br />
9. Wpisz podwójny znak równosci, a potem<br />
slowo true (rys. 7.42).<br />
Detekcja kolizji klipów filmowych<br />
217
Rozdzial 7.<br />
Detekcja kolizji klipów filmowych<br />
10. Wybierz akcje, która ma zostac wykonana<br />
po spelnieniu warunku. Kompletny skrypt<br />
powinien wygladac jak na rys. 7.43.<br />
11. Przetestuj film (rys. 7.44).<br />
Wskazówki<br />
• W przypadku warunków typu: prawda lub<br />
falsz (znanych jako boole’owskie), jak te<br />
w cwiczeniu, mozna tylko zapisac warunek<br />
i opuscic ostatnia czesc wyrazenia, == true<br />
(prawda). Flash zwraca wartosc prawdy lub<br />
falszu po wywolaniu metody hitTest,<br />
a wyrazenie if automatycznie sprawdza,<br />
czy warunek jest spelniony. Wiecej<br />
o wyrazeniach warunkowych dowiesz sie<br />
z czesci V, „Praca z informacja”.<br />
• Nie jest wazne, czy porównujesz ruchomy<br />
klip filmowy z obiektem docelowym, czy<br />
tez obiekt z klipem. Ponizsze dwa wyrazenia<br />
wykrywaja ten sam typ kolizji:<br />
this.hitTest(_root.target)<br />
_root.target.hitTest(this)<br />
• Jesli obiektem docelowym metody hitTest<br />
jest klip filmowy zawierajacy ruchoma grafike,<br />
to obramowanie tego klipu zostanie zmienione<br />
w taki sposób, by dopasowac je do animacji.<br />
W celu wykrycia kolizji pomiedzy klipem<br />
filmowym i punktem:<br />
1. Kontynuuj prace z plikiem utworzonym<br />
w poprzednim cwiczeniu.<br />
2. Zaznacz przeciagany klip filmowy i otwórz<br />
palete akcji.<br />
3. Zaznacz wyrazenie if. W polu Condition<br />
zmien wyrazenie na nastepujace:<br />
_root.asteroid.hitTest(this._x,<br />
this._y, true)<br />
Teraz metoda hitTest sprawdza, czy<br />
wspólrzedne x i y biezacego przeciaganego<br />
klipu filmowego przecinaja sie z ksztaltem klipu<br />
filmowego o nazwie asteroid, rezydujacego<br />
w glównej listwie czasowej (rys. 7.45).<br />
4. Przetestuj film.<br />
Rys. 7.43. Konsekwencja przeciecia jest<br />
wykonanie akcji nextFrame<br />
Rys. 7.44. Przeciagniecie klipu filmowego<br />
spaceship do obramowania klipu filmowego<br />
asteroid powoduje przeskok klipu spaceship<br />
do nastepnego ujecia, wyswietlajacego<br />
eksplozje<br />
Rys. 7.45. Powyzszy fragment skryptu<br />
(u góry) sprawdza, czy punkt poczatkowy<br />
klipu filmowego spaceship przecina sie<br />
z dowolnym ksztaltem klipu filmowego<br />
asteroid. Zwróc uwage, ze klip spaceship nie<br />
wchodzi w kolizje, poniewaz jego punkt<br />
poczatkowy znajduje sie wciaz w szczelinie<br />
pomiedzy krawedziami asteroidy<br />
218
Kontrolowanie klipów filmowych<br />
Rys. 7.46. Obramowanie wysrodkowanego klipu<br />
filmowego mozna zdefiniowac za pomoca jego<br />
wlasciwosci X Position, Y Position, Height<br />
i Width<br />
Wyznaczanie krawedzi obszarów<br />
klipów filmowych<br />
Znajomosc granic obszaru klipu filmowego jest<br />
uzyteczna zwlaszcza wtedy, gdy zachodzi<br />
potrzeba wpasowania przeciaganego klipu<br />
filmowego w obszar innego klipu. Zwykle takie<br />
dopasowywanie klipu filmowego laczy sie<br />
z jego centrowaniem, dlatego tez górna i dolna<br />
oraz boczne krawedzie mo ga byc definiowane<br />
za pomoca wlasciwosci X Position<br />
(wspólrzedna x), Y Position (wspólrzedna y),<br />
Height (wysokosc) i Width (szerokosc)<br />
(rys. 7.46). Jesli jednak klip filmowy nie zostal<br />
wysrodkowany, niemozliwe jest ustalenie granic<br />
obramowania za pomoca jego wlasciwosci.<br />
Zamiast tego uzywa sie metody getBounds.<br />
Metoda ta okresla minimalne i maksymalne<br />
rozmiary obramowania klipu filmowego<br />
i dolacza taka informacje do obiektu<br />
posiadajacego wlasciwosci xMin, xMax, yMin<br />
i yMax. Za pomoca wartosci tych wlasciwosci<br />
mozesz wpasowac przeciagany klip filmowy do<br />
innego klipu.<br />
W celu wpasowania klipu filmowego w<br />
obramowanie innego klipu:<br />
1. Utwórz klip filmowy, umiesc jego klon na<br />
scenie i nadaj mu nazwe.<br />
W obramowanie tego klipu filmowego<br />
zostanie wpasowany przeciagany klip<br />
filmowy.<br />
2. Utwórz kolejny klip filmowy, umiesc jego<br />
klon na scenie i nadaj mu nazwe.<br />
To bedzie przeciagany klip filmowy.<br />
3. Zaznacz klon drugiego klipu filmowego<br />
i otwórz palete akcji.<br />
4. Wybierz Actions/onClipEvent. Zaznacz<br />
zdarzenie Load.<br />
5. Wybierz Actions/set variable. W polu<br />
Variable wpisz nazwe obiektu, w którym<br />
beda przechowywane informacje<br />
o obramowaniu.<br />
Wyznaczanie krawedzi obszrów<br />
219
Rozdzial 7.<br />
Wyznaczanie krawedzi obszrów<br />
6. W polu Value wprowadz sciezke dostepu<br />
do klipu filmowego, którego obramowanie<br />
chcesz wykorzystac. Wybierz Objects/<br />
MovieClip/getBounds .<br />
W polu Value, za sciezka dostepu do klipu<br />
filmowego, pojawi sie metoda getBounds<br />
z podswietlonym argumentem<br />
targetCoordinateSpace (rys. 7.47).<br />
7. W miejsce argumentu<br />
targetCoordinateSpace wprowadz<br />
scieke dostepu do listwy czasowej, której<br />
wspólrzedne przestrzeni maja sluzyc jako<br />
odnosnik dla informacji o obramowaniu<br />
(rys. 7.48).<br />
8. Wybierz Actions/startdrag.<br />
9. W polu Target w bloku edycji parametrów<br />
wpisz this. Zaznacz pole Expression.<br />
10. Zaznacz pola wyboru Constrain to<br />
rectangle oraz Lock mouse to center.<br />
11. W polach L, T, R i B w bloku edycji<br />
parametrów wpisz wlasciwosci xMin,<br />
yMin, xMax i yMax twojego obiektu<br />
obramowania (rys. 7.49).<br />
12. Przetestuj film.<br />
Przeciagany klip filmowy jest<br />
wpasowywany wzgledem wspólrzednych,<br />
które metoda getBounds zwraca<br />
i umieszcza w obiekcie obramowania.<br />
Rys. 7.47. Metoda getBounds wymaga<br />
podania argumentu targetCoordinateSpace<br />
Rys. 7.48. Metoda getBound zwraca wartosci<br />
minimum x (xMin), minimum y (yMin),<br />
maksimum x (xMax) i maksimum y (yMax)<br />
klipu filmowego o nazwie square wzgledem<br />
wspólrzednych listwy czasowej _root, a<br />
nastepnie przechowuje te informacje w<br />
obiekcie obramowania o nazwie myBounds<br />
Rys. 7.49. Blok edycji parametrów akcji<br />
startDrag. Wlasciwosci obiektu myBounds sa<br />
umieszczane w polach Constrain to rectangle<br />
220
Kontrolowanie klipów filmowych<br />
Powielanie i usuwanie<br />
klipów filmowych<br />
Tworzenie „w locie” wielu klonów istniejacych<br />
klipów filmowych umozliwia akcja<br />
duplicateMovieClip. Powielane klony klipu<br />
filmowego otrzymuja swoje wlasne, unikalne<br />
nazwy, podobnie jak poziom glebokosci,<br />
determinujacy kolejnosc ich ulozenia w stosie<br />
(w przypadku klipów filmowych ustalany za<br />
pomoca wlasciwosci swapDepths). Po<br />
zduplikowaniu klipu filmowego mozesz<br />
zmieniac dowolne z jego wlasciwosci,<br />
nawigowac po jego listwie czasowej i ogólnie<br />
uzywac tak, jak kazdego innego klipu<br />
filmowego. Powielanie klipów filmowych jest<br />
przydatne zwlaszcza w dynamicznym tworzeniu<br />
grafiki. Przykladowo, powielajac krótkie<br />
fragmenty linii lub standardowe ksztalty,<br />
a pózniej edytujac ich wlasciwosci (jak pozycja,<br />
skala, rotacja), mozesz tworzyc animacje lub<br />
nawet symulowac glebie obiektów 3D i to na<br />
biezaco (choc wymaga to duzo matematyki).<br />
Gdybys chcial, zeby towar w twoim<br />
internetowym sklepie nigdy nie znikal z pólek,<br />
mozesz powielac dany artykul za kazdym<br />
razem, kiedy klient przeciagnie go do koszyka.<br />
W grze Asteroids natomiast, rozkruszenie jednej<br />
duzej asteroidy na kilka mniejszych mozna<br />
zrealizowac wlasnie poprzez powielanie klipu<br />
filmowego asteroidy.<br />
Powszechna praktyka jest powielanie klipów<br />
filmowych z uzyciem zapetlonych funkcji, które<br />
dodaja kolejne numery do nazw klonów<br />
i automatycznie przypisuja poziomy glebokosci.<br />
Na przyklad, klip filmowy asteroid moze byc<br />
powielany w ten sposób, ze kolejne klony<br />
otrzymywalyby nastepujace oznaczenia:<br />
asteroid1 na poziomie glebokosci 1 (Depth<br />
Level 1 ), asteroid2 na poziomie glebokosci 2,<br />
asteroid3 na poziomie glebokosci 3, itd. Zajrzyj<br />
do rozdzialu 9., „kontrolowanie przeplywu<br />
informacji”, z którego dowiesz sie<br />
o dzialajacych w petli akcjach, uzupelniajacych<br />
proces powielania klipów filmowych.<br />
Powielanie i usuwanie klipów<br />
221
Rozdzial 7.<br />
Powielanie i usuwanie klipów<br />
W celu powielenia klonu<br />
klipu filmowego:<br />
1. Utwórz symbol klipu filmowego, umiesc go<br />
na scenie i nadaj mu nazwe.<br />
2. Utwórz symbol przycisku i umiesc jego klon<br />
na scenie.<br />
3. Zaznacz przycisk i otwórz palete akcji.<br />
4. Wybierz Actions/duplicateMovieClip<br />
(Esc + dm).<br />
W oknie skryptu, ponizej zdarzenia<br />
on (release) pojawi sie akcja<br />
duplicateMovieClip (rys. 7.50).<br />
5. W polu Target wprowadz sciezke dostepu<br />
do klipu filmowego. Zaznacz pole<br />
Expression.<br />
6. W polu New Name wpisz nazwe dla<br />
powielonego klipu filmowego. Pole<br />
Expression pozostaw niezaznaczone.<br />
7. W polu Depth wpisz liczbe wieksza od 0,<br />
okreslajaca poziom glebokosci (czyli<br />
pozycje w stosie) zduplikowanego klipu<br />
filmowego (rys. 7.51).<br />
W tym momencie, jesli odtworzysz swój<br />
film, akcje przypisane do przycisku<br />
spowoduja powielenie klipu filmowego<br />
nerd, jednak nowy klon pojawi sie<br />
w miejscu oryginalu, tak wiec wlasciwie<br />
trudno dostrzec, czy cokolwiek sie stalo.<br />
Zeby zobaczyc powielony klon, musisz go<br />
przesunac lub zmienic w jakis inny sposób,<br />
odrózniajacy go od oryginalu.<br />
8. Wybierz Actions/setProperty.<br />
9. Z menu rozwijanego Property wybierz<br />
X Position.<br />
Rys. 7.50. Przypisz akcje duplicateMovieClip<br />
do zdarzenia myszy on (release) utworzonego<br />
przycisku<br />
Rys. 7.51. Klip filmowy o nazwie nerdCopy<br />
umieszczony na poziomie glebokosci 2 jest<br />
kopia klipu filmowego nerd<br />
222
Kontrolowanie klipów filmowych<br />
Rys. 7.52. Klip filmowy nerdCopy zostal<br />
przesuniety o 40 pikseli w prawo od klipu<br />
filmowego nerd<br />
Rys. 7.53. Pokazany skrypt (u góry) zostal<br />
przypisany do klonu przycisku na dole sceny.<br />
Po zduplikowaniu oryginalnego klipu filmowego<br />
(z lewej), kopia moze byc edytowana tak, jak<br />
kazdy inny klip (z prawej). W tym przykladzie<br />
powielony klip filmowy o nazwie nerdCopy ma<br />
zmodyfikowane wlasciwosci X Position, X Scale<br />
i Y Scale<br />
10. W polu Target wprowadz sciezke dostepu<br />
do powielonego klipu filmowego. Zaznacz<br />
pole Expression.<br />
11. W polu Value wpisz wyrazenie, które<br />
dodaje 40 do wlasciwosci X Position<br />
oryginalnego klipu filmowego (rys. 7.52).<br />
Zaznacz pole Expression.<br />
12. Dodaj wiecej wyrazen setProperty<br />
w celu przeksztalcenia zduplikowanego<br />
klipu filmowego (rys. 7.53).<br />
13. Przetestuj film.<br />
Wskazówki<br />
• Na jednym poziomie glebokosci moze<br />
znajdowac sie tylko jeden klip filmowy.<br />
Jesli powielisz kolejny klon z juz<br />
zajmowanego poziomu, kopia zajmie<br />
miejsce oryginalu.<br />
• Zduplikowane klipy filmowe przejmuja<br />
wlasciwosci oryginalnego klonu. Jesli wiec<br />
oryginal ma np. przezroczystosc ustawiona<br />
na 50 procent, kopia zachowa to ustawienie.<br />
Jednakze powielone klony zawsze zajmuja<br />
pozycje wyjsciowa w ujeciu pierwszym,<br />
nawet jesli oryginalny klip filmowy<br />
w momencie powielania zajmowal inne<br />
ujecie.<br />
• Poziom glebokosci odpowiada poziomowi<br />
w metodzie klipu filmowego swapDepths,<br />
dlatego uzywaj tej metody do zmiany<br />
kolejnosci ulozenia w stosie powielonych<br />
klipów filmowych.<br />
Powielanie i usuwanie klipów<br />
223
Rozdzial 7.<br />
Powielanie i usuwanie klipów<br />
W celu usuniecia duplikatu<br />
klipu filmowego:<br />
1. Kontynuuj prace nad plikiem utworzonym<br />
w poprzednim cwiczeniu. Umiesc na scenie<br />
nowy klon przycisku.<br />
2. Zaznacz nowy klon przycisku i otwórz<br />
palete akcji.<br />
3. Wybierz Actions/removeMovieClip<br />
(Esc + rm).<br />
Ponizej zdarzenia on (release) pojawi<br />
sie akcja removeMovieClip.<br />
4. W bloku edycji parametrów palety akcji,<br />
w polu Target wprowadz sciezke dostepu<br />
do zduplikowanego klipu filmowego.<br />
Pozostaw pole Expression niezaznaczone<br />
(rys. 7.54).<br />
5. Przetestuj film.<br />
Pierwszy z przycisków powoduje<br />
utworzenie duplikatu klipu filmowego.<br />
Drugi przycisk usuwa duplikat ze sceny<br />
(rys. 7.55).<br />
Wskazówka<br />
• Nie mozna uzyc akcji removeMovieClip<br />
do usuniecia ze sceny klonu oryginalnego<br />
klipu filmowego. W takim przypadku trzeba<br />
wstawic nowe ujecie kluczowe i wtedy<br />
usunac klon klipu filmowego.<br />
Rys. 7.54. Akcja removeMovieClip usuwa<br />
duplikat klonu o nazwie nerdCopy<br />
Rys. 7.55. Oryginalny klip filmowy (z lewej)<br />
jest powielany za pomoca akcji<br />
duplicateMovieClip, przypisanej<br />
do pierwszego z przycisków (w srodku).<br />
Zduplikowany klon nosi nazwe nerdCopy.<br />
Akcja removeMovieClip, przypisana<br />
do drugiego przycisku, usuwa duplikat klonu<br />
(z prawej)<br />
224
Kontrolowanie klipów filmowych<br />
Rys. 7.56. Opcja Linkage w menu<br />
rozwijanym biblioteki<br />
Rys. 7.57. Okno dialogowe Symbol Linkage<br />
Properties<br />
Przylaczanie<br />
klipów filmowych<br />
Technika powielania istniejacych klipów<br />
filmowych jest wspaniala. Co jednak zrobic<br />
w sytuacji, gdy musisz w dynamiczny sposób<br />
przeniesc klip filmowy z biblioteki na scene?<br />
W takim przypadku mozna posluzyc sie metoda<br />
attachMovie. Pozwala ona na utworzenie<br />
nowych klipów filmowych z biblioteki<br />
i przylaczenie ich do obecnych juz na scenie<br />
klonów klipów filmowych. Przylaczony klip<br />
filmowy nie zajmuje miejsca oryginalu, ale<br />
w zasadzie staje sie czescia obiektu klipu<br />
filmowego w relacji rodzic -dziecko. Jesli<br />
oryginalny klon na scenie nosi nazwe<br />
parentInstance, to sciezka dostepu do<br />
przylaczonego klipu filmowego moglaby<br />
wygladac nastepujaco:<br />
_root.parentInstance.<br />
attachedInstance.<br />
W celu przylaczenia<br />
klipu filmowego z biblioteki:<br />
1. Utwórz symbol klipu filmowego, umiesc go<br />
na scenie i nadaj mu nazwe przy pomocy<br />
palety Instance.<br />
Ten klon bedzie oryginalnym klipem<br />
filmowym, klonem-rodzicem, do którego<br />
przylaczysz inny klip filmowy.<br />
2. Utwórz kolejny symbol klipu filmowego.<br />
3. Z menu rozwijanego Options palety<br />
Library wybierz Linkage (rys. 7.56).<br />
Pojawi sie okno dialogowe Symbol Linkage<br />
Properties.<br />
4. W pozycji Linkage wybierz opcje Export<br />
this symbol, a w polu Identifier wpisz<br />
identyfikator twojego klipu filmowego.<br />
Kliknij OK (rys. 7.57).<br />
Wprowadzony identyfikator umozliwia<br />
odwolywanie sie za jego pomoca do klipu<br />
filmowego w czasie pisania skryptu<br />
i przylaczanie tego klipu do klonu<br />
znajdujacego sie na scenie.<br />
Przylaczanie klipów filmowych<br />
225
Rozdzial 7.<br />
Przylaczanie klipów filmowych<br />
5. Utwórz przycisk i przeciagnij jego klon na<br />
scene.<br />
6. Zaznacz przycisk i otwórz palete akcji.<br />
7. Wybierz Actions/evaluate . W polu<br />
Expression wprowadz sciezke dostepu do<br />
klipu filmowego na scenie.<br />
8. Wybierz Objects/MovieClip/attachMovie.<br />
Metoda attachMovie pojawi sie w polu<br />
Expression, zaraz za sciezka dostepu do<br />
klonu klipu filmowego (rys. 7.58).<br />
9. W nawiasach stojacych przy metodzie<br />
attachMovie wpisz identyfikator klipu<br />
filmowego z biblioteki, nazwe<br />
przylaczanego klonu i poziom glebokosci<br />
(rys. 7.59).<br />
10. Przetestuj film.<br />
Kiedy klikniesz utworzony przycisk, klip<br />
filmowy zidentyfikowany w bibliotece<br />
zostanie przylaczony do klonu na scenie<br />
i nalozony na niego. Punkt poczatkowy tego<br />
klipu filmowego pokryje sie z punktem<br />
poczatkowym klonu-rodzica (rys. 7.60).<br />
Kiedy uzywasz metody attachMovie,<br />
masz do czynienia z kilkoma nazwami,<br />
których nie wolno mylic. W powyzszym<br />
przykladzie nazwa symbolu klipu filmowego<br />
w bibliotece to apple movie clip.<br />
Identyfikatorem jest apple, a nazwa<br />
przylaczonego klonu to attachedApple.<br />
Rys. 7.58. Metoda attachMovie wymaga<br />
podania argumentów idName, newName<br />
i depth.<br />
Rys. 7.59. Ta metoda attachMovie przylacza<br />
klon klipu filmowego o nazwie apple do klonu<br />
plate na poziomie glebokosci 2 i nadaje<br />
przylaczonemu klonowi nazwe attachedApple<br />
Rys. 7.60. Klon klipu filmowego o nazwie<br />
plate znajduje sie na scenie (u góry). Akcje<br />
przypisane do przycisku powoduja<br />
przylaczenie klonu klipu filmowego apple<br />
z biblioteki (z prawej) do klonu plate (u dolu)<br />
226
Kontrolowanie klipów filmowych<br />
Wskazówki<br />
• Przylaczony klip filmowy przejmuje<br />
wlasciwosci klonu klipu filmowego-rodzica.<br />
Jesli wiec klon oryginalnego klipu<br />
filmowego jest obrócony o 45 stopni, to<br />
przylaczony klip filmowy tez zostanie<br />
obrócony o 45 stopni.<br />
• Przylaczaj klip filmowy do klonu na scenie<br />
z pustym pierwszym ujeciem. Dzieki temu<br />
klon-rodzic zachowa sie jak pusty pojemnik,<br />
gotowy pomiescic dowolny klip filmowy<br />
z biblioteki.<br />
• Mozesz przylaczac kilka klipów filmowych<br />
do jednego klonu rodzica, o ile podasz<br />
oddzielne poziomy glebokosci. Jednak<br />
kazdy poziom glebokosci moze<br />
przechowywac juz tylko jeden klip filmowy.<br />
• Mozliwe jest tez przylaczanie klipów<br />
filmowych do innego przylaczonego klipu<br />
filmowego. Sciezka dostepu do pierwszego<br />
przylaczonego klipu filmowego przyjmie<br />
wtedy postac: _root.klonRodzic.<br />
przylaczonyKlon1. Tymczasem sciezka<br />
dostepu do kolejnego przylaczonego klipu<br />
filmowego bedzie wygladac tak:<br />
przylaczonyKlon1.<br />
przylaczonyKlon2 itd.<br />
• Po przylaczeniu klipu filmowego<br />
z biblioteki do klonu, znajdujacego sie na<br />
scenie, mozesz modyfikowac wlasciwosci<br />
klonu-rodzica, np. _root.klonRodzic.<br />
_alpha = 50, a jednoczesnie zmienione<br />
zostana wlasciwosci wszystkich<br />
dolaczonych do niego klipów filmowych.<br />
Przylaczanie klipów filmowych<br />
227
Rozdzial 7.<br />
W celu usuniecia<br />
przylaczonego klipu filmowego:<br />
1. Uzyj akcji removeMovieClip. Wybierz<br />
Actions/removeMovieClip (Esc + rm).<br />
W polu Target palety akcji wprowadz<br />
sciezke dostepu do przylaczonego klipu<br />
filmowego (rys. 7.61).<br />
lub<br />
Uzyj akcji unloadMovie. Wybierz<br />
Actions/unloadMovie (Esc + um). Z menu<br />
rozwijanego Location palety akcji wybierz<br />
Target i wprowadz sciezke dostepu do<br />
przylaczonego klipu filmowego (rys. 7.62).<br />
Rys. 7.61. Sciezka dostepu do klipu<br />
filmowego attachedApple musi zawierac<br />
nazwe klipu, do którego klip o tej nazwie<br />
zostal przylaczony<br />
Przylaczanie klipów filmowych<br />
Rys. 7.62. Akcja unloadMovie, przeznaczona<br />
do usuwania zewnetrznych plików SWF, moze<br />
posluzyc do usuniecia przylaczonych klipów<br />
filmowych<br />
228
Kontrolowanie klipów filmowych<br />
Rys. 7.63. Metoda hide obiektu Mouse nie<br />
wymaga utworzenia klonu<br />
Zmiana<br />
wygladu wskaznika myszy<br />
Skoro wiesz juz, jak kontrolowac klip filmowy,<br />
mozesz przejsc do projektowania wlasnych<br />
wskazników myszy. Pomysl teraz o wszystkich<br />
typach kursora, jakie mozesz zobaczyc we<br />
Flashu. Kiedy wybierasz narzedzia z palety<br />
narzedziowej – wiadro z farba, pipete czy<br />
olówek – wskaznik myszy zmienia sie tak, by<br />
pomóc ci zrozumiec i zastosowac te narzedzia.<br />
Podobnie i ty mozesz wprowadzac w swoich<br />
projektach rózne formy wskaznika, pasujace do<br />
aktualnie wybranej funkcji.<br />
Proces przygotowania wlasnego wskaznika<br />
zaczyna sie od ukrycia domyslnego kursora<br />
myszy. Potem trzeba dopasowac lokalizacje<br />
nowej grafiki do pozycji zajmowanej przez<br />
ukryty (ale wciaz aktywny) wskaznik myszy.<br />
W tym celu ustawia sie wlasciwosci klipu<br />
filmowego X Position oraz Y Position w ten<br />
sposób, aby odpowiadaly wspólrzednym<br />
polozenia kursora myszy x i y. Te wspólrzedne<br />
definiuje sie przy pomocy wlasciwosci<br />
_xmouse oraz _ymouse.<br />
W celu ukrycia wskaznika myszy:<br />
1. Zaznacz pierwsze ujecie kluczowe i otwórz<br />
palete akcji. Wybierz Objects/Mouse/hide<br />
(rys. 7.63).<br />
Kiedy uruchomisz testowanie filmu,<br />
wskaznik myszy stanie sie niewidoczny.<br />
Wskazówka<br />
• Ukrywanie wskaznika myszy jest uzyteczna<br />
cecha w przypadku filmów bedacych<br />
czystymi animacjami, pozbawionymi<br />
interaktywnosci. Pozwala to zapobiec<br />
rozpraszaniu uwagi przez niechciany widok<br />
wskaznika, który móglby przeciez pojawiac<br />
sie dopiero w momencie, kiedy uzytkownik<br />
spróbuje kliknac jakis przycisk dostepny<br />
w oknie filmu.<br />
Zmiana wygladu wskaznika myszy<br />
229
Rozdzial 7.<br />
Zmiana wygladu wskaznika myszy<br />
W celu przywrócenia widoku wskaznika<br />
myszy:<br />
1. Na palecie akcji wybierz Objects/Mouse/<br />
show (rys. 7.64).<br />
W celu utworzenia<br />
wlasnego wskaznika myszy:<br />
1. Utwórz symbol klipu filmowego, umiesc go<br />
na scenie i nadaj mu nazwe przy pomocy<br />
palety Instance. Ten klip filmowy bedzie<br />
twoim nowym wskaznikiem.<br />
2. Zaznacz klon klipu filmowego i otwórz<br />
palete akcji.<br />
3. Wybierz Action/onClipEvent (Esc + oc ).<br />
Zaznacz zdarzenie Load.<br />
4. Wybierz Objects/Mouse/hide. Ponizej<br />
wyrazenia onClipEvent (load) pojawi<br />
sie metoda Mouse.hide(). Kiedy klip<br />
filmowy zostanie wczytany, wskaznik<br />
myszy zniknie (rys. 7.65).<br />
5. Zaznacz klamre zamykajaca manipulatora<br />
onClipEvent (load). Wybierz<br />
Actions/onClipEvent. Zaznacz zdarzenie<br />
Mouse move . Ponizej manipulatora<br />
onClipEvent (load) pojawi sie<br />
manipulator zdarzenia onClipEvent<br />
(mouseMove).<br />
6. Wybierz Actions/setProperty.<br />
7. Z menu rozwijanego Property wybierz<br />
X Position. W polu Target wpisz this.<br />
W polu Value wpisz _root, nastepnie<br />
kropke i wybierz Properties/_xmouse.<br />
Zaznacz obydwa pola Expression.<br />
8. Ponownie wybierz Actions/setProperty.<br />
9. Z menu rozwijanego Property wybierz<br />
Y Position. W polu Target wpisz this.<br />
W polu Value wpisz _root, nastepnie<br />
kropke i wybierz Properties/_ymouse.<br />
Zaznacz obydwa pola Expression<br />
(rys. 7.66).<br />
10. Przetestuj film (rys. 7.67).<br />
Rys. 7.64. Metoda show obiektu Mouse<br />
przywraca widok wskaznika myszy<br />
Rys. 7.65. Wskaznik myszy zniknie po<br />
wczytaniu klipu filmowego<br />
Rys. 7.66. Wyrazenia setProperty ustawiaja<br />
wartosci wspólrzednych polozenia biezacego<br />
klipu filmowego – zgodnie ze wspólrzednymi<br />
polozenia wskaznika myszy – za kazdym<br />
razem, gdy wskaznik zostanie przesuniety<br />
w nowe miejsce<br />
Rys. 7.67. To szklo powiekszajace<br />
jest klipem filmowym ustawionym<br />
wedlug wspólrzednych x i y<br />
wskaznika myszy. Postaraj sie<br />
tworzyc pomocne ksztalty kursora,<br />
odpowiadajace wybranym<br />
funkcjom<br />
230
Kontrolowanie klipów filmowych<br />
Rys. 7.68. Wprowadz akcje updateAfterEvent,<br />
zeby zmusic Flasha do odswiezenia obrazu<br />
i uzyskania bardziej plynnego ruchu<br />
Uzyj funkcji updateAfterEvent, zeby<br />
zmusic Flasha do odswiezenia ekranu<br />
niezaleznie od predkosci odtwarzania filmu.<br />
Pozwala to wyeliminowac efekt migotania<br />
towarzyszacy przesuwaniu grafiki po ekranie<br />
z szybkoscia wieksza niz szybkosc odswiezania<br />
ekranu przez Flasha. Jest to szczególnie wazne,<br />
jesli uzywasz wlasnego ksztaltu wskaznika.<br />
Akcja updateAfterEvent moze byc<br />
wykorzystywana z nastepujacymi zdarzeniami<br />
klipu filmowego: mouseMove, mouseUp,<br />
keyDown oraz keyUp. Uzywaj tych zdarzen<br />
jako argumentów dla metody<br />
updateAfterEvent.<br />
W celu<br />
odswiezenia grafiki na ekranie:<br />
1. Kontynuuj prace nad plikiem utworzonym<br />
w poprzednim cwiczeniu. Zaznacz klip<br />
filmowy przedstawiajacy szklo<br />
powiekszajace i otwórz palete akcji.<br />
2. Zaznacz ostatnie wyrazenie setProperty<br />
ponizej linii z manipulatorem<br />
onClipEvent (mouseMove).<br />
3. Wybierz Actions/evaluate . W oknie skryptu<br />
pojawi sie nowa linia wyrazenia, a w bloku<br />
edycji parametrów – pole Expression.<br />
4. Wybierz Functions/updateAfterEvent.<br />
W polu Expression pojawi sie funkcja<br />
updateAfterEvent.<br />
5. W nawiasach przy funkcji<br />
updateAfterEvent wprowadz zdarzenie<br />
mouseMove (rys. 7.68).<br />
Teraz Flash bedzie odswiezal grafike<br />
po kazdym poruszeniu wskaznika, dajac<br />
w efekcie bardziej plynne ruchy.<br />
Wskazówka<br />
• Spróbuj uzywac kilku klipów filmowych<br />
do zobrazowania ksztaltu wskaznika.<br />
Przykladowo, pionowa linia ustawiana<br />
wedlug wspólrzednej _xmouse oraz linia<br />
pozioma, przyjmujaca wspólrzedne<br />
_ymouse, tworza razem kursor w ksztalcie<br />
krzyzyka.<br />
Zmiana wygladu wskaznika myszy<br />
231
Rozdzial 7.<br />
Tworzenie animacji<br />
Tworzenie animacji<br />
za pomoca jezyka ActionScript<br />
Akcje, które omówilismy dotychczas w tym<br />
rozdziale, skrypty pozwalajace kontrolowac<br />
i sprawdzac wlasciwie wszystkie aspekty klipu<br />
filmowego – wyglad, lokalizacje, mozliwosc<br />
przeciagania, kolizje, poziom glebokosci,<br />
duplikaty – stanowia podstawowe narzedzia do<br />
tworzenia animacji w calosci za pomoca<br />
ActionScript. Podczas gdy automatyczne<br />
animacje ruchu i ksztaltu tworzy sie przed ich<br />
odtworzeniem, animacja skryptowa jest<br />
generowana w czasie odtwarzania, dzieki czemu<br />
moze reagowac na dzialania uzytkownika.<br />
Ponizsze cwiczenie obejmuje wykonanie we<br />
Flashu prostej gry na zasadach dzieciecego<br />
berka. Jest to swietny przyklad, który pokazuje<br />
sposób animowania obiektów w ActionScript<br />
w zaleznosci od dzialan podejmowanych przez<br />
uzytkownika. Utworzysz klip filmowy<br />
podazajacy za wskaznikiem myszy. Jesli klip<br />
„zlapie” poruszany przez ciebie wskaznik,<br />
przegrasz.<br />
W celu przygotowania gry<br />
„lapanie kursora”:<br />
1. Utwórz symbol klipu filmowego z dwoma<br />
ujeciami kluczowymi. Pierwsze ujecie<br />
kluczowe powinno zawierac grafike i akcje<br />
stop, drugie bedzie wyswietlac komunikat<br />
„You lose” („przegrales”) (rys. 7.69).<br />
2. Umiesc klon klipu filmowego na scenie. Nadaj<br />
mu nazwe za pomoca palety Instance. W tym<br />
przykladzie nazwa jest cat (kot).<br />
3. Zaznacz klon i otwórz palete akcji.<br />
4. Wybierz Actions/onClipEvent. Jako<br />
zdarzenie (Event) zaznacz Enter frame.<br />
5. Wybierz Actions/set variable.<br />
6. W polu Variable palety akcji wprowadz<br />
bezwzgledna sciezke dostepu do klipu<br />
filmowego, kropke, a nastepnie wlasciwosc<br />
X Position. Wyrazenie powinno wygladac<br />
tak: _root.cat._x<br />
Ujecie<br />
kluczowe 1.<br />
Akcja stop<br />
Ujecie<br />
kluczowe 2.<br />
Rys. 7.69. Ten klip filmowy o nazwie cat<br />
wyswietla obrazek kota w ujeciu<br />
kluczowym 1. w czasie „gonitwy” za<br />
kursorem oraz druga, inna grafike w ujeciu<br />
kluczowym 2., jesli przegrasz gre<br />
232
Kontrolowanie klipów filmowych<br />
Rys. 7.70. Wspólrzedne x i y polozenia klipu<br />
filmowego cat zmieniaja sie w zaleznosci od<br />
polozenia wskaznika<br />
Rys. 7.71. Warunek sprawdza, czy wskaznik<br />
przecina sie z klonem klipu filmowego cat<br />
Rys. 7.72. Klip filmowy cat przechodzi do<br />
nastepnego ujecia na jego listwie czasowej<br />
7. W polu Value wpisz:<br />
_root.cat._x + (_root._xmouse –<br />
_root.cat._x)/10<br />
Zaznacz pole Expression obok pola Value.<br />
To wyrazenie zaczyna sie od wprowadzenia<br />
wspólrzednej x polozenia klipu filmowego<br />
cat i dodania róznicy pomiedzy polozeniem<br />
wskaznika myszy i polozeniem klipu cat.<br />
Jesli wskaznik jest na prawo od klipu<br />
filmowego, dodawana jest wartosc dodatnia.<br />
Jesli wskaznik znajduje sie na lewo od klipu<br />
filmowego, dodawana jest wartosc ujemna.<br />
W kazdym przypadku „kot” zbliza sie do<br />
„myszy”, czyli wskaznika. Dzielenie przez<br />
10 zapobiega natychmiastowemu<br />
umieszczeniu klipu filmowego w miejscu<br />
polozenia wskaznika myszy. Przyrost<br />
wartosci jest maly (jedna dziesiata<br />
odleglosci), wiec „kot” niespecjalnie nadaza<br />
za „mysza”.<br />
8. Wybierz Actions/set variable. Wpisz<br />
jednakowe wartosci wspólrzednych x i y<br />
w polach Variable oraz Value (rys. 7.70).<br />
9. Wybierz Actions/if.<br />
10. W polu Condition wpisz:<br />
_root.cat.hitTest(_root._xmouse,<br />
_root._ymouse, true)<br />
To wyrazenie uzywa metody hitTest do<br />
sprawdzenia, czy wspólrzedne x i y<br />
polozenia wskaznika myszy przecinaja sie<br />
z klipem filmowym cat. Argument<br />
shapeflag ma wartosc true (prawda),<br />
przez co brany jest pod uwage wylacznie<br />
ksztalt samej grafiki, a nie calego<br />
obramowania (rys. 7.71).<br />
11. Wybierz Actions/evaluate . Wprowadz<br />
sciezke dostepu do klipu filmowego cat,<br />
kropke i na koncu metode nextFrame().<br />
Jesli warunek metody hitTest zostanie<br />
spelniony (true, prawda), klip filmowy cat<br />
przejdzie do kolejnego ujecia, wyswietlajac<br />
komunikat „You lose” („przegrales”)<br />
(rys. 7.72).<br />
Tworzenie animacji<br />
233
Rozdzial 7.<br />
12. Wybierz Actions/setProperty.<br />
13. Z menu rozwijanego Property wybierz<br />
Name . W polu Target wprowadz<br />
bezwzgledna sciezke dostepu do klipu<br />
filmowego cat. Zaznacz pole Expression.<br />
W polu Value wpisz nowa nazwe<br />
(rys. 7.73). Nazwa klonu klipu filmowego<br />
cat zostanie zmieniona, zapobiegajac<br />
zaprzestaniu przemieszczania klipu<br />
filmowego przez pierwsza grupe wyrazen<br />
akcji.<br />
14. Przetestuj film (rys. 7.74).<br />
Rys. 7.73. Powyzsze parametry akcji<br />
setProperty zmieniaja nazwe klipu filmowego<br />
cat na youLoseMessage<br />
Tworzenie animacji<br />
Rys. 7.74. Skrypt napisany dla klonu klipu<br />
filmowego cat (u góry) odpowiada za<br />
interaktywnosc w grze. Klip filmowy cat<br />
„goni” wskaznik myszy (z lewej) i wyswietla<br />
komunikat ukryty w drugim ujeciu listwy<br />
czasowej klipu w momencie przeciecia ze<br />
wskaznikiem (z prawej)<br />
234
Kontrolowanie dzwieku<br />
8<br />
Czesci skladowe jezyka HTML<br />
Wprowadzenie do twojego filmu Flasha dzwieku moze pozytywnie wplynac na animacje<br />
i interaktywnosc, a takze wzmocnic sile wyrazu nawet najprostszego projektu, angazujac kolejny<br />
zmysl odbiorcy. Mozna np. odtwarzac w tle muzyke podkreslajaca nastrój filmu, dolaczyc narracje<br />
do opowiadanej historii czy wprowadzic efekty dzwiekowe, które beda towarzyszyc róznym<br />
zdarzeniom – klikaniu przycisków, przeciaganiu obiektów, itd. Flash obsluguje pliki MP3 –<br />
mocno skompresowane, ale wciaz wysokiej jakosci pliki audio – umozliwiajac ci czerpanie<br />
z jeszcze szerszego spektrum dzwieku, a przy tym pozwalajac zachowac minimalne rozmiary<br />
pliku wynikowego.<br />
Ten rozdzial zaczyna sie od przedstawienia sposobów na wykorzystanie obiektu Sound<br />
(dzwiekowego) – obiektu Flasha odpowiadajacego za kontrole dzwieku przy wykorzystaniu<br />
jezyka ActionScript. Powinienes do tego momentu miec ogólne pojecie o poslugiwaniu sie<br />
dzwiekiem we Flashu, wlaczajac w to chocby importowanie plików dzwiekowych i przypisywanie<br />
ich do ujec kluczowych za pomoca opcji Event, Start, Stop i Stream Sync. Jesli nie masz<br />
pewnosci co do uzywania którejs z tych metod, poszukaj dodatkowych informacji w dokumentacji<br />
programu. Dzieki temu rozdzialowi; nauczysz sie, jak wykorzystac obiekt dzwiekowy do<br />
odtwarzania dzwieków bezposrednio z biblioteki, bez umieszczania ich w ujeciach kluczowych.<br />
Zobaczysz, w jaki sposób ustawiac poziom glosnosci i balans dzwieku, korzystajac<br />
z dynamicznego systemu kontroli opartego na interakcji z uzytkownikiem i wlasciwosciach filmu,<br />
poznasz tez sposób udostepniania uzytkownikowi kontrolerów glosnosci i balansu pomiedzy<br />
kanalami. Nauczysz sie, jak zarzadzac dzwiekami, trzymajac je poza srodowiskiem projektu<br />
Flasha w postaci zewnetrznych filmów, co oznacza, ze bedziesz mógl stworzyc np. odgrywarke<br />
plików dzwiekowych, przy czym pliki te beda przechowywane poza glównym interfejsem.<br />
Kontrolowanie dzwieku<br />
235
Rozdzial 8.<br />
Obiekt dzwiekowy<br />
Obiekt dzwiekowy<br />
Przylaczanie pliku dzwiekowego do ujecia<br />
kluczowego na listwie czasowej jest latwym<br />
sposobem na wprowadzenie dzwieków do<br />
twojego filmu. Dwa podstawowe sposoby<br />
integrowania filmu z dzwiekiem to uzycie opcji<br />
Event Sync do odgrywania dzwieków<br />
towarzyszacych zdarzeniom, np. wcisniecia<br />
przycisku, oraz wykorzystanie opcji Stream<br />
Sync do synchronizacji dialogu z animacja . Jesli<br />
jednak musisz miec kontrole nad tym, kiedy<br />
dzwiek jest odgrywany, lub tez chcialbys<br />
dynamicznie zmieniac jego natezenie (takze<br />
w poszczególnych kanalach), skorzystaj<br />
z obiektu dzwiekowego.<br />
Obiekt dzwiekowy (Sound) jest zdefiniowana<br />
klasa Flasha, której metody umozliwiaja<br />
kontrolowanie plików dzwiekowych<br />
importowanych i przechowywanych<br />
w bibliotece. Podobnie jak w przypadku<br />
obiektu koloru (Color), zeby uzyc obiektu<br />
dzwiekowego, trzeba utworzyc jego klon za<br />
pomoca funkcji konstruktora i nadac mu nazwe .<br />
Kiedy juz obiekt dzwiekowy posiada nazwe,<br />
mozna uzywac go do odgrywania<br />
i modyfikowania plików dzwiekowych<br />
przechowywanych w twojej bibliotece.<br />
236
Kontrolowanie dzwieku<br />
Rys. 8.1. Wpisz mySound jako nazwe twojego<br />
obiektu dzwiekowego i pozostaw pole Expression<br />
niezaznaczone<br />
Rys. 8.2. Funkcja konstruktora new Sound tworzy<br />
klon nowego obiektu dzwiekowego<br />
Rys. 8.3. Kiedy uzytkownik zwolni przycisk, Flash<br />
utworzy obiekt dzwiekowy o nazwie mySound<br />
W celu utworzenia<br />
obiektu dzwiekowego<br />
o charakterze globalnym:<br />
1. Zaimportuj p lik dzwiekowy, wybierajac<br />
File/Import (Ctrl+R).<br />
Wybrany plik dzwiekowy pojawi sie<br />
w bibliotece.<br />
2. Utwórz symbol przycisku i umiesc jego klon<br />
na scenie.<br />
3. Zaznacz przycisk i otwórz palete akcji.<br />
4. Wybierz Actions/set variable (Esc + sv).<br />
W oknie skryptu pojawi sie, ponizej<br />
manipulatora zdarzenia myszy<br />
on (release), nowe wyrazenie.<br />
5. W polu Variable wpisz nazwe twojego<br />
nowego obiektu dzwiekowego (rys. 8.1).<br />
6. Kliknij w polu Value i wybierz Objects/<br />
Sound/new Sound.<br />
Zaznacz pole Expression. W polu Value<br />
pojawi sie funkc ja konstruktora newSound,<br />
z podswietlonym argumentem target<br />
(rys. 8.2).<br />
7. Usun podswietlone slowo target.<br />
Argument oznaczony tym slowem wskazuje<br />
na klip filmowy zawierajacy dzwieki, które<br />
maja byc kontrolowane przez obiekt<br />
dzwiekowy. Nie podajac argumentu,<br />
utworzysz obiekt dzwiekowy kontrolujacy<br />
wszystkie dzwieki z listwy czasowej<br />
(rys. 8.3).<br />
Obiekt dzwiekowy<br />
237
Rozdzial 8.<br />
Przylaczanie dzwieków<br />
Przylaczanie dzwieków<br />
Jesli posiadasz w swojej bibliotece wiele<br />
zaimportowanych dzwieków, musisz przekazac<br />
obiektowi dzwiekowemu, który dzwiek ma byc<br />
odtworzony lub kontrolowany. Poszczególne<br />
dzwieki w bibliotece identyfikuje sie za pomoca<br />
opcji Linkage, podobnie jak to robiles<br />
w rozdziale 7., kiedy przylaczales klip filmowy<br />
z biblioteki do klipu filmowego na scenie. Poza<br />
identyfikowaniem dzwieku, opcja Linkage<br />
umozliwia wyeksportowanie go z plikiem SWF,<br />
aby byl dostepny dla wywolujacego go obiektu<br />
dzwiekowego. Po zidentyfikowaniu dzwieku za<br />
pomoca opcji Linkage, mozesz przylaczyc go<br />
do obiektu dzwiekowego, korzystajac z metody<br />
attachSound.<br />
W celu przylaczenia<br />
dzwieku do obiektu dzwiekowego:<br />
1. Kontynuujac poprzednie cwiczenie, zaznacz<br />
swój plik dzwiekowy w bibliotece.<br />
2. Z menu Options wybierz Linkage<br />
(rys. 8.4).<br />
Pojawi sie okno dialogowe Symbol Linkage<br />
Properties.<br />
3. Sposród przycisków wyboru opcji Linkage<br />
kliknij Export this symbol. W polu<br />
Identifier wpisz nazwe identyfikujaca twój<br />
dzwiek. Kliknij OK (rys. 8.5).<br />
Flash wyeksportuje zaznaczony dzwiek<br />
w pliku SWF z unikalnym identyfikatorem,<br />
dzieki czemu dzwiek ten bedzie mozliwy do<br />
odtworzenia po wywolaniu go przez obiekt<br />
dzwie kowy.<br />
4. Zaznacz przycisk na scenie i otwórz palete<br />
akcji.<br />
5. W oknie skryptu zaznacz wyrazenie new<br />
Sound.<br />
Zaznaczajac to wyrazenie, sprawiasz, ze<br />
nastepne wyrazenie ActionScript pojawi sie<br />
pod nim.<br />
6. Wybierz Actions/evaluate .<br />
Rys. 8.4. Dla kazdego dzwieku, który chcesz<br />
przylaczyc, wybierz opcje Linkage z menu<br />
biblioteki<br />
Rys. 8.5. Ten dzwiek nosi nazwe narration<br />
i zostanie dolaczony do eksportowanego pliku<br />
SWF<br />
238
Kontrolowanie dzwieku<br />
Rys. 8.6. Metoda attachSound wymaga podania<br />
argumentu idName, który jest identyfikatorem<br />
twojego dzwieku w bibliotece<br />
Rys. 8.7. Metoda attachSound przylacza dzwiek<br />
zidentyfikowany jako narration do obiektu<br />
dzwiekowego mySound<br />
7. W polu Expression wpisz nazwe obiektu<br />
dzwiekowego, a potem wybierz Objects/<br />
Sound/attachSound. W polu Expression<br />
bloku edycji parametrów pojawi sie metoda<br />
attachSound z podswietlonym<br />
argumentem idName (rys. 8.6).<br />
8. W polu Expression zastap argument<br />
idName identyfikatorem twojego pliku<br />
dzwiekowego, piszac go w cudzyslowie<br />
(rys. 8.7).<br />
To bardzo wazne, zeby umieszczac<br />
identyfikator pliku dzwiekowego<br />
w cudzyslowie. Znak ten mówi Flashowi,<br />
ze otoczone nim slowo jest rzeczywista<br />
nazwa identyfikatora, a nie wyrazeniem,<br />
które powinien oszacowac w celu okreslenia<br />
nazwy identyfikatora.<br />
Wskazówka<br />
• Jako argument metody attachSound<br />
mozesz podac wyrazenie. Przykladowo,<br />
zamiast umieszczac w cudzyslowie<br />
identyfikator, mozesz wstawic tam generator<br />
liczb losowych. Nastepnie, juz w bibliotece,<br />
przydziel poszczególnym dzwiekom w oknie<br />
dialogowym Symbol Linkage Properties<br />
identyfikatory w postaci liczb. Flash bedzie<br />
przylaczal dzwieki w sposób losowy. Wiecej<br />
o liczbach losowych dowiesz sie z kolejnych<br />
rozdzialów.<br />
Przylaczanie dzwieków<br />
239
Rozdzial 8.<br />
Odtwarzanie dzwieków<br />
Odtwarzanie dzwieków<br />
Skoro juz utworzyles nowy obiekt dzwiekowy<br />
i przylaczyles do niego dzwiek z biblioteki,<br />
mozesz wreszcie odtworzyc ten dzwiek. Uzyj<br />
metody start do odegrania dzwieku<br />
przylaczonego do obiektu dzwiekowego.<br />
Metoda start ma dwa parametry,<br />
secondOffset oraz loops.<br />
Parametr secondOffset jest liczba okreslajaca,<br />
od której sekundy czasu trwania dzwieku ma sie<br />
rozpoczac jego odtwarzanie. Mozesz tak ustawic<br />
ten parametr, zeby dzwiek byl odtwarzany od<br />
poczatku lub od pózniejszego momentu. Jesli, na<br />
przyklad, masz 20-sekundowy dzwiek<br />
przylaczony do obiektu dzwiekowego, to ustalajac<br />
parametr secondOffset na 10, sprawisz, ze<br />
odgrywanie dzwieku zacznie sie od jego srodka.<br />
Nie oznacza to opóznienia w odtwarzaniu o 10<br />
sekund, tylko niezwloczne rozpoczecie<br />
odtwarzania od punktu oznaczonego jako<br />
„dziesiata sekunda czasu trwania dzwieku”.<br />
Parametr loops to liczba okreslajaca, ile razy<br />
dzwiek ma byc odtworzony. Ustawienie tego<br />
parametru na wartosc 2 spowoduje dwukrotne<br />
odtworzenie dzwieku, bez zadnej przerwy. Ten<br />
parametr jest opcjonalny.<br />
W celu odtworzenia dzwieku:<br />
1. Kontynuujac poprzednie cwiczenie, zaznacz<br />
przycisk i otwórz palete akcji.<br />
2. W oknie skryptu zaznacz wyrazenie<br />
attachSound.<br />
Czyniac to, zyskujesz pewnosc, ze kolejne<br />
wyrazenie pojawi sie pod tym zaznaczonym.<br />
3. Wybierz Actions/evaluate .<br />
W oknie skryptu pojawi sie nowe wyrazenie.<br />
4. W polu Expression wpisz nazwe obiektu<br />
dzwiekowego.<br />
240
Kontrolowanie dzwieku<br />
Rys. 8.8. Metoda strat jest dodawana do skryptu<br />
po utworzeniu obiektu mySound i przylaczeniu<br />
dzwieku narration. Metoda start wymaga<br />
okreslenia argumentów secondOffset i loops<br />
5. Zaraz za nazwa obiektu dzwiekowego<br />
wstaw metode start, wybierajac<br />
Objects/Sound/start.<br />
W polu Expression, za nazwa obiektu<br />
dzwiekowego, pojawi sie metoda start<br />
z podswietlonymi dwo ma parametrami:<br />
secondOffset oraz loops (rys. 8.8).<br />
6. W miejsce parametru secondOffset<br />
wpisz 0, a parametr loops zastap cyfra 5.<br />
7. Przetestuj film. Kiedy uzytkownik zwolni<br />
przycisk, dzwiek zostanie odegrany od<br />
poczatku i powtórzony piec razy.<br />
Drugi przycisk:<br />
on (release) {<br />
mySound.attachSound("Jazz");<br />
}<br />
Trzeci przycisk:<br />
on (release) {<br />
mySound.start(0,1)<br />
}<br />
Kiedy klikniesz pierwszy przycisk, a potem<br />
trzeci, uslyszysz dzwiek Hawaiian. Kiedy<br />
klikniesz drugi przycisk, a potem trzeci,<br />
uslyszysz dzwiek Jazz. Jesli rozpoczniesz<br />
odtwarzanie dzwieku Jazz, zanim wybrzmi<br />
do konca dzwiek Hawaiian, uslyszysz, jak<br />
dzwieki nakladaja sie na siebie.<br />
Wskazówki<br />
• Metoda start odgrywa przylaczony<br />
dzwiek po kazdym jej wywolaniu, nawet<br />
jesli w tym czasie dzwiek jest juz<br />
odtwarzany. W wyniku tego kolejno<br />
uruchamiane dzwieki nakladaja sie na siebie.<br />
W powyzszym cwiczeniu, na przyklad, jesli<br />
uzytkownik bedzie klikal przycisk<br />
wielokrotnie, dzwieki odtwarzane wciaz na<br />
nowo beda sie na siebie nakladac. Zeby<br />
uniknac takich nakladek, wstaw metode<br />
stop – jak pokazano w nastepnym<br />
cwiczeniu – zaraz przed metoda start.<br />
• Metoda start odgrywa dzwiek przylaczony<br />
jako ostatni do obiektu dzwie kowego.<br />
Znaczy to, ze inny przycisk moze<br />
powodowac przylaczenie kolejnego dzwieku<br />
z biblioteki do tego samego obiektu<br />
dzwiekowego, a metoda start ten dzwiek<br />
odtworzy. Napisane w tym celu wyrazenia<br />
mozna oddzielic za pomoca trzech<br />
przycisków z przypisanymi nastepujacymi<br />
akcjami:<br />
Ujecie pierwsze (tworzenie klonu<br />
mySound):<br />
mySound = new Sound ();<br />
Pierwszy przycisk:<br />
on (release) {<br />
mySound.attachSound("Hawaiian");<br />
}<br />
Odtwarzanie dzwieków<br />
241
Rozdzial 8.<br />
Odtwarzanie dzwieków<br />
W celu<br />
zatrzymania odgrywania dzwieku:<br />
1. Kontynuujac poprzednie cwiczenie, umiesc<br />
na scenie kolejny klon symbolu przycisku.<br />
2. Zaznacz przycisk i otwórz palete akcji.<br />
3. Wybierz Actions/evaluate .<br />
Ponizej manipulatora zdarzenia myszy<br />
on (release) pojawi sie nowe<br />
wyrazenie, a blok edycji parametrów bedzie<br />
zawieral puste pole Expression.<br />
4. W polu Expression wpisz nazwe twojego<br />
obiektu dzwiekowego.<br />
5. Wybierz Objects/Sound/stop. Zaraz za<br />
obiektem dzwiekowym pojawi sie metoda<br />
stop (rys. 8.9).<br />
6. Przetestuj film.<br />
Kiedy uzytkownik zwolni przycisk, dowolny<br />
dzwiek przylaczony do obiektu<br />
dzwiekowego – i aktualnie odgrywany –<br />
zamilknie.<br />
Mozesz zatrzymac odgrywanie wszystkich<br />
dzwieków bez wyjatku, jesli uzyjesz<br />
podstawowej akcji stopAllSounds.<br />
W celu zatrzymania odgrywania wszystkich<br />
dzwieków:<br />
1. Wybierz Basic Actions/Stop All Sounds<br />
(Esc + ss).<br />
Akcje te mozesz przypisac do przycisku, jak<br />
w poprzednim cwiczeniu, lub do ujecia<br />
kluczowego, a Flash przerwie odtwarzanie<br />
wszystkich dzwieków, obojetnie czy<br />
przylaczonych do obiektu dzwiekowego, czy<br />
tez odtwarzanych z listwy czasowej za<br />
pomoca opcji Event, Start lub Stream.<br />
Rys. 8.9. Powyzsza metoda stop zatrzymuje<br />
odtwarzanie dowolnego dzwieku<br />
przylaczonego do obiektu dzwiekowego<br />
mySound. Dla metody tej nie istnieja zadne<br />
argumenty<br />
242
Kontrolowanie dzwieku<br />
Modyfikowanie dzwieków<br />
Kiedy uzywasz obiektu dzwiekowego, Flash<br />
umozliwia ci kontrolowanie ogólnej glosnosci<br />
odtwarzanych dzwieków, a takze glosnosci<br />
w poszczególnych kanalach (lewym i prawym),<br />
co nazywa sie regulacja panoramy (inaczej:<br />
balans – przyp. tlum.). Majac takie mozliwosci,<br />
latwo jest utworzyc interfejs pozwalajacy<br />
ustawiac poziom glosu w za leznosci od ich<br />
preferencji, czy tez w ogóle tworzyc bardziej<br />
realistyczne srodowiska. Przykladowo, w grze<br />
wyscigowej poziom dzwieku móglby narastac,<br />
kiedy mijasz sie z samochodem rywala.<br />
Wprowadzajac regulacje panoramy dzwieku<br />
w grze Pong, mozesz zwiekszyc doznania<br />
sluchowe graczy, jako ze pilka uderzajaca<br />
w jedna ze scian wyzwalalaby dzwiek slyszalny<br />
z wlasciwej dla uderzenia strony (czyli np.<br />
z lewego kanalu, jesli uderzyla w lewa sciane –<br />
przyp. tlum.).<br />
Dwie metody, za pomoca których modyfikuje<br />
sie dzwiek, to setVolume (glosnosc)<br />
i setPan (panorama). Metoda setVolume<br />
przyjmuje jako argument wartosc w przedziale<br />
od 0 do 100, przy czym 100 oznacza<br />
maksymalna glosnosc, a 0 – cisze. Metoda<br />
setPan przyjmuje jako argument wartosc<br />
w przedziale od –100 do 100, gdzie –100<br />
oznacza, ze dzwiek bedzie odtwarzany<br />
wylacznie przez lewy kanal, a 100, odpowiednio<br />
przez prawy kanal. Ustawienie 0 rozdziela<br />
dzwiek równo na obydwa kanaly.<br />
Modyfikowanie dzwieków<br />
W celu ustawienia glosnosci dzwieku:<br />
1. Kontynuujac poprzednie cwiczenie, umiesc<br />
na scenie kolejny klon symbolu przycisku.<br />
2. Zaznacz przycisk i otwórz palete akcji.<br />
3. Wybierz Actions/evaluate .<br />
Ponizej manipulatora zdarzenia myszy<br />
on (release) pojawi sie nowe<br />
wyrazenie, a blok edycji parametrów bedzie<br />
zawieral puste pole Expression.<br />
4. W polu Expression wpisz nazwe twojego<br />
obiektu dzwiekowego.<br />
243
Rozdzial 8.<br />
Modyfikowanie dzwieków<br />
5. Wybierz Objects/Sound/setVolume.<br />
W polu Expression, zaraz za obiektem<br />
dzwiekowym, pojawi sie metoda<br />
setVolume, z podswietlonym parametrem<br />
volume (rys. 8.10).<br />
6. W polu Expression w miejsce parametru<br />
volume wpisz liczbe z przedzialu 0 do 100<br />
(rys. 8.11).<br />
7. Przetestuj film.<br />
Kiedy odtwarzajac dzwiek, zwolnisz<br />
przycisk, glosnosc zmieni sie stosownie do<br />
wprowadzonej wartosci parametru volume.<br />
Wskazówka<br />
• Domyslna wartoscia dla metody setVolume<br />
jest 100, tak wiec mozesz ja jedynie<br />
zmniejszac. Pomysl o wprowadzanym<br />
parametrze jako procentowej wartosci<br />
maksymalnego poziomu glosnosci.<br />
Rys. 8.10. Metoda setVolume wymaga<br />
podania parametru volume (glosnosc)<br />
Rys. 8.11. Glosnosc dla obiektu dzwiekowego<br />
mySound ustawiono na 20 procent<br />
244
Kontrolowanie dzwieku<br />
Rys. 8.12. Metoda setPan wymaga podania<br />
parametru pan, liczby w zakresie od –100 do 100<br />
Rys. 8.13. Panorama dla obiektu dzwiekowego<br />
mySound jest ustawiona na 100, wiec dzwiek<br />
bedzie dobywal sie tylko z prawego glosnika<br />
W celu<br />
ustawienia panoramy dzwieku:<br />
1. Kontynuujac poprzednie cwiczenie, umiesc<br />
na scenie kolejny klon symbolu przycisku.<br />
2. Zaznacz przycisk i otwórz palete akcji.<br />
3. Wybierz Actions/evaluate .<br />
Ponizej manipulatora zdarzenia myszy<br />
on (release) pojawi sie nowe<br />
wyrazenie, a blok edycji parametrów bedzie<br />
zawieral puste pole Expression.<br />
4. W polu Expression wpisz nazwe twojego<br />
obiektu dzwiekowego.<br />
5. Wybierz Objects/Sound/setPan.<br />
W polu Expression, zaraz za obiektem<br />
dzwiekowym, pojawi sie metoda setPan,<br />
z podswietlonym parametrem pan<br />
(rys. 8.12).<br />
6. W polu Expression w miejsce parametru<br />
pan wpisz liczbe z przedzialu –100 do 100<br />
(rys. 8.13) (ta pojedyncza liczba okresla<br />
balans pomiedzy sila dzwieku w lewym<br />
i prawym glosniku).<br />
7. Przetestuj film.<br />
Kiedy odtwarzajac dzwiek, zwolnisz<br />
przycisk, panorama dzwieku zmieni sie<br />
stosownie do wprowadzonej wartosci<br />
parametru pan.<br />
Modyfikowanie dzwieków<br />
245
Rozdzial 8.<br />
Niezalezne dzwieki<br />
Modyfikowanie<br />
niezaleznych dzwieków<br />
Jesli utworzysz klon obiektu dzwiekowego<br />
i ustawisz dla niego parametry, jak w wyrazeniu<br />
mySound = new Sound (), metody<br />
setVolume i setPan beda mialy dzialanie<br />
o charakterze globalnym, kontrolujac wszystkie<br />
dzwieki z glównej listwy czasowej. Nawet jesli<br />
utworzysz dwa oddzielne obiekty dzwiekowe,<br />
jak te ponizej,<br />
mySound1 = new Sound ();<br />
mySound2 = new Sound ();<br />
nie bedziesz mógl uzyc metody setPan do<br />
odtwarzania dzwieku mySoun1 przez lewy<br />
kanal i dzwieku mySound2 przez kanal prawy.<br />
Jesli chcesz modyfikowac dzwieki niezaleznie,<br />
musisz tworzyc swoje obiekty dzwiekowe wraz<br />
ze sciezkami dostepu do klipów filmowych.<br />
Wówczas obiekty dzwiekowe beda<br />
przypisywane do róznych klipów filmowych<br />
i metod setVolume oraz setPan bedzie<br />
mozna uzywac do kontrolowania tych<br />
dzwieków oddzielnie.<br />
W celu<br />
niezaleznego zmodyfikowania<br />
dwóch dzwieków:<br />
1. Zaimportuj do Flasha dwa pliki dzwiekowe.<br />
2. Z menu Options w bibliotece wybierz<br />
Linkage i przydziel obydwu dzwiekom<br />
unikalne identyfikatory w oknie dialogowym<br />
Symbol Linkage Properties (rys. 8.14).<br />
3. Utwórz symbol klipu filmowego, umiesc<br />
jego klon na scenie i nadaj mu nazwe.<br />
4. Umiesc na scenie drugi klon klipu<br />
filmowego i równiez nadaj mu nazwe<br />
(rys. 8.15).<br />
5. Utwórz symbol przycisku, umiesc jego klon<br />
na scenie, zaznacz go i otwórz palete akcji.<br />
Rys. 8.14. Nadaj kazdemu zaimportowanemu<br />
dzwiekowi identyfikator w oknie dialogowym<br />
Symbol Linkage Properties<br />
Rys. 8.15. Umiesc dwa klony klipu filmowego<br />
na scenie jako odnosniki dla nowych<br />
obiektów dzwiekowych. Dwa klony klipów<br />
filmowych powyzej nosza nazwy movieClip1<br />
oraz movieClip2<br />
246
Kontrolowanie dzwieku<br />
Rys. 8.16. Utworzono obiekt dzwiekowy<br />
mySound1 z odwolaniem do klipu filmowego<br />
movieClip1<br />
Rys. 8.17. Powyzsza metoda start odgrywa<br />
dzwiek musicSample1. Zwróc uwage, ze chociaz<br />
dzwiek mySound odwoluje sie do klipu filmowego<br />
movieClip1, klip ten nie musi byc umieszczany<br />
w sciezce dostepu w celu wywolania metod<br />
attachSound lub start. Metody te odnosza sie do<br />
obiektu dzwiekowego, a nie do wskazanego klonu<br />
klipu filmowego<br />
6. Skorzystaj z akcji set variable do<br />
utworzenia klonu nowego obiektu<br />
dzwiekowego, jak to robiles we<br />
wczesniejszych cwiczeniach. Jako parametr<br />
target podaj nazwe pierwszego z klonów<br />
klipów filmowych (rys. 8.16).<br />
7. Wybierz akcje evaluate i przylacz pierwszy<br />
dzwiek do tego pierwszego obiektu<br />
dzwiekowego.<br />
8. Jeszcze raz wybierz akcje evaluate<br />
i przypisz metode start (rys. 8.17). Akcje<br />
przypisane do tego przycisku powoduja<br />
utworzenie nowego obiektu dzwiekowego,<br />
przylaczenie dzwieku z biblioteki do<br />
obiektu, a nastepnie rozpoczecie odgrywania<br />
dzwieku.<br />
9. Umiesc na scenie kolejny klon symbolu<br />
przycisku.<br />
10. W podobny sposób utwórz klon nastepnego<br />
obiektu dzwiekowego, przylacz drugi<br />
dzwiek z biblioteki do obiektu i przypisz<br />
metode start (rys. 8.18).<br />
11. Umiesc na scenie kolejne dwa klony<br />
symbolu przycisku.<br />
Niezalezne dzwieki<br />
Rys. 8.18. Obiekt dzwiekowy mySound2 odwoluje<br />
sie do klipu filmowego movieClip2 i odgrywa<br />
dzwiek musicSample2<br />
247
Rozdzial 8.<br />
Niezalezne dzwieki<br />
12. Dla pierwszego klonu przycisku, przypisz<br />
metode setPan do pierwszego obiektu<br />
dzwiekowego, ustawiajac parametr pan<br />
na wartosc –100 (rys. 8.19).<br />
Ten przycisk powoduje odtworzenie<br />
pierwszego dzwieku tylko w lewym<br />
glosniku.<br />
13. W drugim klonie przycisku, przypisz metode<br />
setPan do drugiego obiektu dzwiekowego,<br />
ustawiajac parametr pan na wartosc 100<br />
(rys. 8.20).<br />
Ten przycisk powoduje odtworzenie<br />
drugiego dzwieku tylko w prawym glosniku.<br />
14. Przetestuj film.<br />
Wskazówka<br />
• Klony klipów filmowych na scenie<br />
zachowuja sie jak znaki-wypelniacze lub<br />
puste pojemniki na oddzielne obiekty<br />
dzwiekowe. Mozesz zarówno umiescic je<br />
poza scena, zeby uzytkownik nie mógl ich<br />
zobaczyc, jak i usunac dowolna grafike z ich<br />
pierwszego ujecia kluczowego.<br />
Rys. 8.19. Metoda setPan obiektu mySound1<br />
odgrywa dzwiek musicSample1 tylko w lewym<br />
glosniku<br />
Rys. 8.20. Metoda setPan obiektu mySound2<br />
odgrywa dzwiek musicSample2 tylko<br />
w prawym glosniku<br />
248
Lewy kanal sygnalu<br />
wejsciowego<br />
Rys. 8.21. Parametry metody setTransform<br />
okreslaja rozdzial dzwieku na glosniki lewy<br />
i prawy. Pierwsza litera oznacza glosnik<br />
(l – lewy; r – prawy); druga litera oznacza<br />
kanal sygnalu wejsciowego<br />
Tabela 8.1. Parametry metody setTransform<br />
obiektu dzwiekowego<br />
Parametr<br />
ll<br />
lr<br />
rr<br />
rl<br />
Prawy kanal sygnalu<br />
wejsciowego<br />
ll rl lr rr<br />
Lewy glosnik<br />
Prawy glosnik<br />
Wartosc<br />
Wartosc procentowa, okreslajaca<br />
poziom glosnosci lewego kanalu<br />
sygnalu dzwiekowego w lewym<br />
glosniku.<br />
Wartosc procentowa, okreslajaca<br />
poziom glosnosci prawego kanalu<br />
sygnalu dzwiekowego w lewym<br />
glosniku.<br />
Wartosc procentowa, okreslajaca<br />
poziom glosnosci prawego kanalu<br />
sygnalu dzwiekowego w prawym<br />
glosniku.<br />
Wartosc procentowa, okreslajaca<br />
poziom glosnosci lewego kanalu<br />
sygnalu dzwiekowego w prawym<br />
glosniku.<br />
Kontrolowanie dzwieku<br />
Transformowanie dzwieków<br />
Dla zaawansowanych uzytkowników, którzy<br />
chca miec wieksza kontrole nad odtwarzaniem<br />
dzwieku w poszczególnych kanalach, Flash<br />
udostepnia metode setTransform. Metoda<br />
ta pozwala okreslic procentowe wartosci<br />
parametrów, które decyduja, jaki poziom<br />
dzwieku z lewego lub prawego kanalu bedzie<br />
slyszalny w lewym badz prawym glosniku.<br />
Dzieki tej metodzie twój dzwiek moze<br />
dynamicznie przenosic sie z lewego glosnika<br />
do prawego lub przelaczac pomiedzy trybami<br />
mono i stereo.<br />
Metoda setTransform obiektu dzwiekowego<br />
jest bardzo zblizona do metody<br />
setTransform obiektu koloru, omawianej<br />
w rozdziale 7. I tak jak w przypadku obiektu<br />
koloru – uzycie metody setTransform wraz<br />
z obiektem dzwiekowym wymaga<br />
wczesniejszego utworzenia podstawowego<br />
obiektu, którego zadaniem bedzie<br />
przechowywanie informacji o rozdzieleniu<br />
dzwieku pomiedzy kanaly lewy i prawy.<br />
Parametrami obiektu transformacji dzwieku sa<br />
ll, lr, rr i rl (rys. 8.21). Opis ich<br />
funkcjonowania przedstawia tabela 8.1.<br />
Transformowanie dzwieków<br />
249
Rozdzial 8.<br />
Transformowanie dzwieków<br />
W celu uzyskania efektu przenoszenia<br />
odtwarzanego dzwieku pomiedzy lewym i<br />
prawym kanalem:<br />
1. Zaimportuj do Flasha plik dzwiekowy.<br />
2. Z menu Options w bibliotece wybierz<br />
Linkage i przydziel dzwiekowi identyfikator<br />
w oknie dialogowym Symbol Linkage<br />
Properties (rys. 8.22).<br />
3. Utwórz symbol przycisku i umiesc jego klon<br />
na scenie. Zaznacz klon i otwórz palete<br />
akcji.<br />
4. Wybierz akcje set variable w celu<br />
utworzenia klonu nowego obiektu<br />
dzwiekowego, jak to robiles we<br />
wczesniejszych cwiczeniach. Nie okreslaj<br />
parametru target (rys. 8.23).<br />
5. Wybierz akcje evaluate i przylacz pierwszy<br />
dzwiek do pierwszego obiektu<br />
dzwiekowego.<br />
6. Wybierz akcje evaluate ponownie i przypisz<br />
metode start (rys. 8.24). Ten przycisk<br />
bedzie odtwarzal twój dzwiek.<br />
7. Umiesc na scenie kolejny klon symbolu<br />
przycisku.<br />
8. Na palecie akcji wybierz Actions/set<br />
variable.<br />
9. W polu Variable palety akcji wpisz nazwe<br />
twojego nowego obiektu transformacji<br />
dzwieku.<br />
10. Kliknij w polu Value i wybierz<br />
Objects/Object/new Object. Zaznacz pole<br />
Expression widoczne obok pola Value<br />
(rys. 8.25).<br />
W ten sposób przygotowales klon obiektu<br />
transformacji dzwieku.<br />
Rys. 8.22. Ten dzwiek zostal zidentyfikowany<br />
jako musicSample za pomoca opcji Linkage<br />
w menu biblioteki<br />
Rys. 8.23. Tworzymy obiekt dzwiekowy<br />
mySound<br />
Rys. 8.24. Dzwiek musicSample jest<br />
odgrywany z obiektu dzwiekowego mySound<br />
250
Kontrolowanie dzwieku<br />
Rys. 8.26. Cztery parametry metody<br />
setTransform sa definiowane jako wlasciwosci<br />
obiektu mySoundTransform<br />
Rys. 8.27. Metoda setTransform wymaga<br />
podania parametru sxform lub wskazania obiektu<br />
transformacji dzwieku<br />
Rys. 8.28. Cztery parametry metody<br />
setTransform ,zdefiniowane w obiekcie<br />
mySoundTransform, dostarczaja do metody<br />
niezbednych informacji<br />
11. Wybierz Actions/set variable. W polu<br />
Variable palety akcji wpisz nazwe obiektu<br />
transformacji dzwieku, kropke i na koncu<br />
jeden z parametrów. W polu Value wpisz<br />
liczbe odpowiadajaca procentowej wartosci<br />
parametru. Zaznacz pole Expression. Postap<br />
identycznie ze wszystkimi czterema<br />
parametrami (rys. 8.26). W ten sposób<br />
zdefiniowales parametry obiektu<br />
transformacji dzwieku.<br />
12. Wybierz Actions/evaluate .<br />
13. W polu Expression palety akcji wpisz<br />
nazwe twojego obiektu dzwiekowego.<br />
14. Wybierz Objects/Sound/setTransform.<br />
W polu Expression, zaraz za obiektem<br />
dzwiekowym, pojawi sie metoda<br />
setTransform z podswietlonym<br />
argumentem sxform umieszczonym<br />
w nawiasach (sxform jest skrótem od „sound<br />
transform”, transformacja dzwieku)<br />
(rys. 8.27).<br />
15. W miejsce podswietlonego argumentu<br />
wstaw nazwe twojego obiektu transformacji<br />
dzwieku (rys. 8.28).<br />
Ten przycisk tworzy podstawowy obiekt do<br />
przechowywania informacji o transformacji<br />
dzwieku. Informacja taka jest pózniej<br />
podstawiana do obiektu dzwiekowego przy<br />
pomocy metody setTransform.<br />
16. Przetestuj film. Kiedy zwolnisz drugi<br />
przycisk, zmieni sie poziom glosnosci<br />
sygnalu wejsciowego w poszczególnych<br />
glosnikach.<br />
Transformowanie dzwieków<br />
251
Dynamiczna kontrola dzwieków<br />
Rozdzial 8.<br />
Tworzenie systemu dynamicznej<br />
kontroli dzwieku<br />
Jednym z najbardziej efektywnych sposobów<br />
wykorzystania obiektu dzwiekowego i jego<br />
metod jest tworzenie systemów dynamicznej<br />
kontroli dzwieku, dzieki którym u zytkownik<br />
moze sam ustalac pozadany poziom glosnosci<br />
oraz panorame. Podstawowa koncepcja w tym<br />
zakresie jest przygotowanie przeciaganego klipu<br />
filmowego, zachowujacego sie jak suwak.<br />
Przypisujac odpowiednia pozycje przeciaganego<br />
klipu filmowego do parametru glosnosci<br />
(volume) metody setVolume, zyskasz<br />
mozliwosc zmiany poziomu glosnosci<br />
w momencie przesuwania klipu filmowego.<br />
W przypadku pionowego suwaka,<br />
odpowiadajacego za ustawianie glosnosci,<br />
mamy do czynienia z dwoma elementami:<br />
wlasciwym uchwytem oraz sciezka, po której<br />
sie on porusza (rys. 8.29). Zacznij od<br />
utworzenia klipu filmowego o nazwie groove .<br />
Zeby ulatwic sobie zadanie, niech klip filmowy<br />
bedzie wysoki na 100 pikseli, z punktem<br />
srodkowym w dolnej czesci prostokata. Dzieki<br />
wybraniu takiej wlasnie wysokosci klipu,<br />
latwiej bedzie przyporzadkowac pozycje<br />
suwaka danej wartosci parametru setVolume.<br />
W celu utworzenia przeciaganego suwaka,<br />
umiesc niewidzialny przycisk wewnatrz klipu<br />
filmowego suwaka, przypisujacego akcje<br />
startDrag i wymuszajacego ruch wzgledem<br />
klipu filmowego groove .<br />
Suwak<br />
Sciezka<br />
Rys. 8.29. Komponenty systemu kontroli<br />
dzwieku to suwak poruszajacy sie w góre<br />
i w dól oraz jego sciezka<br />
252
Kontrolowanie dzwieku<br />
Rys. 8.30. Ten klon klipu filmowego zostal<br />
nazwany groove i bedzie ograniczal ruch<br />
przeciaganego klipu filmowego<br />
Rys. 8.31. Parametry Constrain to rectangle<br />
ograniczaja klip filmowy suwaka od punktu<br />
srodkowego do 100 pikseli powyzej punktu<br />
srodkowego klipu filmowego sciezki<br />
Klip filmowy<br />
sciezki<br />
Klip filmowy<br />
suwaka<br />
Rys. 8.32. Klip filmowy suwaka mozna<br />
przeciagac wzdluz klipu filmowego sciezki<br />
W celu osadzenia suwaka na sciezce<br />
i przygotowania interfejsu<br />
kontroli glosnosci:<br />
1. Utwórz klip filmowy w ksztalcie prostokata<br />
wysokiego na 100 pikseli, z punktem<br />
srodkowym przy dolnej krawedzi. Umiesc<br />
klon klipu na scenie i nazwij go groove<br />
(sciezka) (rys. 8.30).<br />
2. Utwórz kolejny klip filmowy, na potrzeby<br />
suwaka. Przejdz do trybu symbolu tego<br />
klipu filmowego.<br />
3. Utwórz niewidzialny przycisk i umiesc jego<br />
klon wewnatrz klipu filmowego suwaka.<br />
Zaznacz przycisk i otwórz palete akcji.<br />
4. Wybierz Actions/on. Zaznacz tylko<br />
zdarzenie Press.<br />
5. Wybierz Actions/startDrag. W polu Target<br />
wpisz this. Zaznacz pole Expression obok<br />
pola Target. Zaznacz pola Lock mouse oraz<br />
Constrain to rectangle. W polu L wpisz:<br />
_root.groove._x. W polu R wpisz:<br />
_root.groove._x. W polu T wpisz:<br />
_root.groove._y-100. W polu B wpisz:<br />
_root.groove._y. Akcje przypisane do<br />
klipu filmowego suwaka wiaza jego<br />
krawedzie ze srodkiem klipu filmowego<br />
groove. Górna czesc suwaka jest<br />
przywiazana 100 pikseli powyzej dolnej<br />
krawedzi klipu filmowego groove, a jego<br />
dolna czesc jest zwiazana z dolna krawedzia<br />
klipu groove (rys. 8.31).<br />
6. Wybierz Actions/on. Zaznacz zdarzenie<br />
Release.<br />
7. Wybierz Actions/stopDrag.<br />
8. Wróc do glównej listwy czasowej<br />
i przeciagnij klon klipu filmowego suwaka<br />
na scene i nazwij go slider (suwak).<br />
Przetestuj film (rys. 8.32).<br />
Dynamiczna kontrola dzwieków<br />
253
Rozdzial 8.<br />
Dynamiczna kontrola dzwieków<br />
Metoda klipu filmowego GlobaltoLocal<br />
Drugi etap tworzenia systemu dynamicznej<br />
kontroli glosnosci to wzajemne<br />
przyporzadkowanie wspólrzednej y polozenia<br />
suwaka oraz parametru metody setVolume.<br />
Górny punkt sciezki ma odpowiadac poziomowi<br />
glosnosci 100, a jej dolna czesc – poziomowi<br />
glosnosci 0 (rys. 8.33). Tylko jak dopasowac<br />
wspólrzedne y poruszajacego sie suwaka do<br />
liczb z zakresu 0 do 100? Jednym ze sposobów<br />
jest posluzenie sie metoda globaltoLocal,<br />
która dokonuje konwersji wspólrzednych<br />
polozenia suwaka na wspólrzedne<br />
odpowiadajace klipowi filmowemu sciezki.<br />
Jako ze klip filmowy sciezki ma wysokosc 100<br />
pikseli, a suwak jest dopasowany do jego<br />
wysokosci, wspólrzedne lokalne sciezki mozna<br />
z latwoscia odniesc do ustawien glosnosci<br />
(rys. 8.34).<br />
W celu przeksztalcenia<br />
wspólrzednych globalnych na lokalne:<br />
1. Kontynuujac poprzednie cwiczenie, zaznacz<br />
klip filmowy suwaka i otwórz palete akcji.<br />
2. Wybierz Actions/onClipEvent.<br />
3. Na palecie akcji, zaznacz zdarzenie<br />
mouseEvent i wybierz Actions/set<br />
variable.<br />
4. W polu Variable wpisz nazwe obiektu,<br />
który bedzie przechowywal informacje<br />
o wspólrzednych x, y, przeksztalconych<br />
pózniej na wspólrzedne lokalne. To jest twój<br />
obiekt punktu.<br />
5. W polu Value wybierz Objects/Object/new<br />
Object. Zaznacz pole Expression<br />
(rys. 8.35).<br />
6. Ponownie wybierz Actions/set variable.<br />
(0,0)<br />
Rys. 8.33. Parametry setVolume musza<br />
odpowiadac pozycji suwaka na sciezce<br />
y=100<br />
x=120<br />
Scena<br />
Rys. 8.34. Wspólrzedne globalne suwaka sa<br />
okreslone przez glówna listwe czasowa sceny.<br />
Wspólrzedne lokalne sa uzaleznione od klipu<br />
filmowego sciezki<br />
Rys. 8.35. Obiekt punktu myPoint jest<br />
tworzony z podstawowej klasy obiektów<br />
Klip filmowy<br />
sciezki<br />
Klip filmowy<br />
suwaka<br />
Wspólrzedne globalne (120, 100), wspólrzedne lokalne<br />
okreslone wzgledem klipu filmowego sciezki (0, –20)<br />
254
Kontrolowanie dzwieku<br />
Rys. 8.36. Wspólrzedna myPoint.y zostaje<br />
przypisana do wspólrzednej y polozenia klipu<br />
filmowego suwaka<br />
Rys. 8.37. Wspólrzedne obiektu punktu myPoint<br />
(myPoint.x i myPoint.y) zostaja zamienione na<br />
wspólrzedne lokalne klipu filmowego sciezki<br />
7. W polu Variable wpisz nazwe twojego<br />
obiektu punktu, kropke i wlasciwosc y.<br />
W polu Value wpisz this._y. Zaznacz<br />
pole Expression (rys. 8.36).<br />
W ten sposób wlasciwosc y zostaje<br />
ustawiona tak, by odpowiadac wspólrzednej<br />
y polozenia przeciaganego klipu filmowego.<br />
8. Ponownie wybierz Actions/set variable.<br />
9. W polu Variable wpisz nazwe twojego<br />
obiektu punktu, kropke i wlasciwosc x.<br />
W polu Value wpisz this._x. Zaznacz<br />
pole Expression. W ten sposób wlasciwosc<br />
x zostaje ustawiona tak, by odpowiadac<br />
wspólrzednej x polozenia przeciaganego<br />
klipu filmowego.<br />
10. Wybierz Actions/evaluate .<br />
11. W polu Expression wprowadz sciezke<br />
dostepu do klipu filmowego, którego ukladu<br />
wspólrzednych chcialbys uzyc. Potem<br />
wybierz Objects/Movie Clip/<br />
globaltoLocal. W nawiasach metody<br />
globaltoLocal wpisz nazwe obiektu<br />
punktu (rys. 8.37). Flash przeksztalci<br />
wspólrzedne obiektu punktu (wzgledem<br />
glównej listwy czasowej) na wspólrzedne<br />
wskazanego klipu filmowego (wzgledem<br />
listwy czasowej klipu filmowego sciezki).<br />
Dynamiczna kontrola dzwieków<br />
255
Rozdzial 8.<br />
Dynamiczna kontrola dzwieków<br />
W celu polaczenia pozycji suwaka<br />
z ustawieniem glosnosci:<br />
1. Kontynuujac poprzednie cwiczenie,<br />
zaimportuj do Flasha plik dzwiekowy.<br />
2. Z menu Options biblioteki wybierz Linkage<br />
i nadaj dzwiekowi identyfikator.<br />
3. Utwórz symbol przycisku i umiesc jego klon<br />
na scenie. Zaznacz go i otwórz palete akcji.<br />
4. Przypisz akcje tak, jak robiles to<br />
w poprzednich cwiczeniach, w celu<br />
utworzenia nowego obiektu dzwiekowego.<br />
Przylacz dzwiek z biblioteki do obiektu<br />
dzwiekowego, a nastepnie przypisz mu<br />
metode rozpoczynajaca odgrywanie dzwieku<br />
(rys. 8.38).<br />
5. Zaznacz twój przeciagany klip filmowy.<br />
6. Dodaj na koncu akcji manipulator zdarzenia<br />
onClipEvent (mouseMove), wybierajac<br />
Actions/evaluate.<br />
7. Wprowadz sciezke dostepu do twojego<br />
obiektu dzwiekowego, a potem wybierz<br />
Objects/Sound/setVolume .<br />
8. W miejsce parametru volume wpisz<br />
–1*myPoint.y.<br />
Wspólrzedna y polozenia suwaka zmienia<br />
sie od –100 do 0. Mnozac obiekt punktu<br />
(myPoint) przez –1, zmieniasz ten zakres na<br />
100 do 0 (rys. 8.39).<br />
9. Wybierz Actions/evaluate . W polu<br />
Expression wpisz updateAfterEvent<br />
(mouseMove);.<br />
10. Przetestuj film.<br />
Teraz, przeciagajac suwak w góre lub w dól,<br />
bedziesz mógl zmieniac poziom glosnosci<br />
dzwieku.<br />
Rys. 8.38. Kolejny przycisk rozpoczyna<br />
odgrywanie dzwieku musicSample<br />
Rys. 8.39. Klip filmowy sciezki ma wysokosc<br />
100 pikseli i punkt srodkowy umieszczony<br />
przy dolnej krawedzi. Stad wspólrzedne<br />
lokalne tego klipu moga przyjmowac wartosci<br />
w zakresie –100 do 0. Jesli chcesz zmienic ten<br />
zakres, wykonaj mnozenie przez (–1).<br />
W rezultacie otrzymasz zakres od 100 do 0<br />
przy dolnej krawedzi, uzywany przez<br />
parametr setVolume<br />
256
Kontrolowanie dzwieku<br />
Rys. 8.40. Za pomoca opcji Stream Sync dzwiek<br />
przypisuje sie do okreslonych klatek na listwie<br />
czasowej<br />
Uzywanie dzwieków<br />
jako plików zewnetrznych<br />
Zawsze, gdy uzywasz okna dialogowego<br />
Symbol Linkage Properties do<br />
zidentyfikowania dzwieku w bibliotece<br />
i zaznaczenia go w celu wyeksportowania,<br />
dzwiek ten jest dodawany do pliku SWF,<br />
powiekszajac jego rozmiar. Dzwieki zajmuja<br />
ogromna ilosc miejsca, nawet z kompresja MP3,<br />
musisz wiec starannie oceniac potrzebe<br />
dolaczania dzwieków do filmu. Jednym ze<br />
sposobów takiego zarzadzania plikami<br />
dzwiekowymi, by zachowac minimalny rozmiar<br />
pliku wynikowego, jest przechowywanie ich<br />
w zewnetrznych filmach Flasha. Uzywaj akcji<br />
loadMovieNum do wprowadzania dzwieku do<br />
Flasha tylko wtedy, kiedy naprawde go<br />
potrzebujesz. Mozliwe jest takze zmienianie<br />
dzwieku w zewnetrznym filmie Flasha bez<br />
dokonywania poprawek w glównym filmie.<br />
Przykladowo, mozesz udostepnic<br />
uzytkownikowi kilka sciezek dzwiekowych do<br />
wyboru. Jednak do uruchomienia którejkolwiek<br />
z nich uzyj akcji loadMovieNum, a do<br />
wylaczenia muzyki posluz sie akcja<br />
unloadMovieNum. Mozesz równiez zrobic tak,<br />
zeby jeden zewnetrzny plik SWF uruchamial<br />
wczytywanie innego pliku, takze losowo<br />
wybranego. Dzieki temu mozna uzyskac funkcje<br />
wybierajaca losowo sciezke dzwiekowa<br />
z kolekcji przechowywanej w zewnetrznych<br />
plikach.<br />
W celu odtworzenia dzwieku<br />
z zewnetrznego filmu:<br />
1. Zaimportuj dzwiek do Flasha.<br />
2. Umiesc klon dzwieku w listwie czasowej.<br />
Z palety Sound wybierz opcje Stream Sync<br />
i dodaj klatki do listwy czasowej, zeby<br />
pomiescic caly plik dzwiekowy (rys. 8.40).<br />
3. Wyeksportuj plik do formatu SWF.<br />
4. Otwórz nowy plik Flasha.<br />
5. Utwórz symbol przycisku i umiesc jego klon<br />
na scenie.<br />
Dzwieki jako pliki zewnetrzne<br />
257
Rozdzial 8.<br />
Dzwieki jako pliki zewnetrzne<br />
6. Zaznacz przycisk i otwórz palete akcji.<br />
7. Wybierz Actions/loadMovie (Esc + lm).<br />
8. W polu URL palety akcji wpisz nazwe<br />
wyeksportowanego pliku SWF. W menu<br />
rozwijanym Location zaznacz Level i wpisz<br />
liczbe wieksza od 0 (rys. 8.41).<br />
9. Wyeksportuj ten film jako plik SWF i umiesc<br />
obydwa pliki w tym samym katalogu. Kiedy<br />
zwolnisz przycisk, muzyka z pierwszego pliku<br />
SWF zostanie wczytana i odtworzona.<br />
W celu zatrzymania<br />
odgrywania dzwieku<br />
umieszczonego<br />
w zewnetrznym filmie:<br />
1. Kontynuujac poprzednie cwiczenie, dodaj<br />
drugi klon przycisku do pliku, który ma juz<br />
akcje loadMovieNum przypisana do<br />
jednego przycisku.<br />
2. Wybierz Actions/unloadMovie (Esc + um).<br />
3. W menu rozwijanym Location palety akcji<br />
wybierz opcje Level i wpisz te sama liczbe,<br />
która wprowadziles wczesniej dla akcji<br />
loadMovieNum (rys. 8.42).<br />
4. Wyeksportuj ten film w postaci pliku SWF<br />
i umiesc obydwa pliki SWF w tej samej<br />
lokalizacji.<br />
5. Kiedy zwolnisz drugi z przycisków, muzyka<br />
z pierwszego pliku SWF przestanie byc<br />
odtwarzana, jako ze plik zostanie usuniety<br />
z tego poziomu.<br />
Wskazówki<br />
• Mozna odtwarzac kilka dzwieków<br />
jednoczesnie, wczytujac rózne pliki SWF<br />
do oddzielnych poziomów lub okreslonych<br />
klonów klipów filmowych.<br />
• Przypisz akcje kontrolujaca ujecia do<br />
ostatniego ujecia kluczowego<br />
w zewnetrznym pliku SWF, wczytujacym<br />
inny plik SWF do tego samego poziomu.<br />
Wówczas ten drugi plik SWF automatycznie<br />
zajmie miejsce pierwszego pliku, gdy tylko<br />
zakonczy sie odgrywanie dzwieku.<br />
Rys. 8.41. Powyzsze akcje, przypisane do<br />
przycisku, powoduja wczytanie pliku<br />
music.swf<br />
Rys. 8.42. Powyzsze akcje, przypisane do<br />
przycisku, usuwaja dowolny plik znajdujacy<br />
sie na poziomie 1<br />
258
Czesc 5.<br />
Przetwarzanie informacji<br />
259
Rozdzial 9.<br />
260
Kontrolowanie<br />
przeplywu informacji<br />
9<br />
Czesci skladowe jezyka HTML<br />
Kiedy w filmie Flasha wyswietlana jest grafika, animacja i odtwarzane sa dzwieki, wiele rzeczy<br />
dzieje sie „za kulisami” – rzeczy, których odbiorca filmu nie dostrzega. Dokument Flasha moze<br />
przetwarzac niezliczona ilosc informacji, np. liczbe zyc, które pozostaly jeszcze graczowi, nazwe<br />
uzytkownika i haslo, czy tez artykuly, które klient umiescil w wirtualnym koszyku. Okreslanie<br />
i przechowywanie takich informacji wymaga zastosowania zmiennych, które stanowia niejako<br />
pojemniki na dane. Zmienne sa kluczowym elementem kazdego filmu Flasha z mocno<br />
rozbudowana interaktywnoscia, jako ze umozliwiaja tworzenie scenariuszy dzialan w oparciu<br />
o zmieniajace sie informacje. Zmienne mozna modyfikowac, a nastepnie uzywac ich<br />
w wyrazeniach – formulach laczacych zmienne z innymi zmiennymi i wartosciami – i sprawdzac<br />
informacje, ustalajac warunki, w celu okreslenia dalszego zachowania filmu Flasha. Takie wlasnie<br />
sprawdzanie wykonuje sie przy pomocy wyrazen warunkowych, kontrolujacych przeplyw<br />
informacji. Wyrazenia warunkowe szacuja naplywajace dane, a potem nakazuja Flashowi<br />
wykonanie dzialania okreslonego na podstawie otrzymanej informacji. Wyobrazmy sobie sytuacja,<br />
w której wyrazen warunkowych mozesz uzyc chocby do odbicia pilki w przypadku wystapienia jej<br />
kolizji ze sciana czy tez do zwiekszenia szybkosci poruszania sie pilki, jesli czas gry przekroczy<br />
jedna minute.<br />
Niniejszy rozdzial opowiada o zarzadzaniu danymi za pomoca zmiennych, wyrazen i warunków.<br />
Zetknales sie juz czesciowo z tym tematem we wczesniejszych rozdzialach, teraz jednak<br />
omówimy go bardziej szczególowo. Zrozumienie zasad wprowadzania, modyfikowania<br />
i szacowania danych pomoze ci prawdziwie „rezyserowac” twoje filmy i dynamicznie zmieniac<br />
poszczególne jego elementy: grafike, animacje i dzwiek.<br />
Kontrolowanie przeplywu informacji<br />
261
Rozdzial 9.<br />
Deklarowanie danych<br />
Deklarowanie danych<br />
Zmienne sluza do przechowywania informacji.<br />
Zmienne mozesz tworzyc, zmieniac ich<br />
zawartosc i odrzucac w dowolnej chwili. Proces<br />
podstawiania informacji do zmiennej po raz<br />
pierwszy nazywa sie deklarowaniem<br />
zmiennej. Deklarowanie i przeksztalcanie<br />
zmiennej odbywa sie przy udziale akcji set<br />
variable. Zmienne deklarowales juz<br />
wczesniej, tylko nie nazywalismy tak tego<br />
procesu. Kiedy tworzysz nowe obiekty za<br />
pomoca akcji set variable, jak w wyrazeniu<br />
mójKolor = nowy Kolor<br />
(mójKlipFilmowy), jednoczesnie deklarujesz<br />
zmienna (tutaj mójKolor). W tym akurat<br />
przypadku zmienna przechowuje obiekt koloru,<br />
ale ogólnie moze przechowywac dowolny typ<br />
informacji, np. liczbe, litery, wartosc — prawda<br />
lub falsz, a nawet odwolanie do innej zmiennej.<br />
Rózne typy informacji przechowywanych<br />
w zmiennych nosza nazwe typów danych.<br />
Zmienne i typy danych<br />
Przykladami typowych zmiennych moga<br />
byc: wynik gracza (zmienna liczbowa),<br />
obiekt dzwiekowy (zmienna lancucha<br />
danych), stan wlaczony lub wylaczony<br />
przycisku wyboru (radio button) (zmienna<br />
boole’owska). Typ danych<br />
przechowywanych w zmiennej mozna latwo<br />
zmienic. Zmienna zadeklarowana pierwotnie<br />
jako zmienna liczbowa moze zostac<br />
zmieniona w dowolnej chwili odtwarzania<br />
filmu na zmienna lancucha danych przez<br />
wprowadzenie nowej akcji set variable.<br />
Jednak lepiej jest utrzymywac staly typ<br />
zadeklarowanych zmiennych, dzieki czemu<br />
w czasie manipulowania nimi nie zostaniesz<br />
zaskoczony niespodziewanymi rezultatami<br />
(jak np. mnozenie lancucha znaków przez<br />
inny lancuch znaków). Rózne typy danych<br />
przechowywanych w zmiennych<br />
przedstawia tabela 9.1.<br />
Nazwy zmiennych powinny opisywac rodzaj<br />
przechowywanych w nich informacji.<br />
Na przyklad, punktyGracza<br />
i predkoscPojazdu sa zupelnie poprawnymi<br />
nazwami zmiennych i z pewnoscia<br />
przyprawia cie o mniejszy ból glowy, niz<br />
cos w rodzaju xyz lub mojaZmienna.<br />
Zwykle zapisuje sie nazwy zmiennych bez<br />
spacji pomiedzy wyrazami, za to z wielka<br />
litera rozpoczynajaca kazdy kolejny wyraz<br />
za wyjatkiem pierwszego.<br />
Tabela 9.1. Typy danych do przechowywania w zmiennych<br />
Typ danych Opis Przyklad<br />
Liczba Wartosc liczbowa. mójWynik = 24<br />
Lancuch znakowy<br />
Typ boole’owski<br />
Obiekt<br />
Sekwencja znaków, liczb lub symboli.<br />
Lancuch zawsze zapisuje sie w cudzyslowie.<br />
Wartosc typu prawda (true) lub falsz<br />
(false). Nie stosuje sie cudzyslowu. Zamiast<br />
prawda mozna pisac 1, a w miejsce slowa<br />
falsz podstawiac 0.<br />
Nazwa obiektu utworzonego za pomoca<br />
funkcji konstruktora.<br />
twójEmail =<br />
"johndoe@domena.com"<br />
przyciskOpcji = true<br />
mójKolor = nowy<br />
Kolor(mójFilm)<br />
262
Kontrolowanie przeplywu informacji<br />
Rys. 9.1. Zmienne mozna deklarowac do<br />
przechowywania róznych typów informacji.<br />
Liczba (u góry) wymaga zaznaczenia pola<br />
wyboru Expression obok pola Value.<br />
W przypadku lancucha znakowego (u dolu) pole<br />
wyboru Expression obok pola Value pozostawia<br />
sie niezaznaczone<br />
W celu zadeklarowania zmiennej:<br />
1. Zaznacz pierwsze ujecie kluczowe na<br />
glównej listwie czasowej i otwórz palete<br />
akcji.<br />
2. Wybierz Actions/set variable (Esc + sv).<br />
3. W polu Variable palety akcji wpisz nazwe<br />
zmiennej. Pole Expression pozostaw<br />
niezaznaczone.<br />
4. W polu Value wprowadz informacje, która<br />
ma przechowywac zmienna. Moze to byc<br />
liczba, nowy obiekt, lancuch znaków lub<br />
wartosc boole’owska. Pole Expression<br />
pozostaw niezaznaczone, jesli uzyles<br />
lancucha znakowego jako typu zmiennej<br />
(rys. 9.1).<br />
Wskazówki<br />
• Istnieja pewne slowa, których nie mozesz<br />
uzywac w nazwach zmiennych, poniewaz sa<br />
zarezerwowane dla specjalnych funkcji lub<br />
slów kluczowych jezyka ActionScript. Jesli<br />
uzyjesz tych slów jako zmiennych, Flash<br />
bedzie je mylil wlasnie ze slowami<br />
kluczowymi lub funkcjami, którym<br />
normalnie odpowiadaja. Wsród nich<br />
znajduja sie nastepujace slowa: break,<br />
for, new, var, continue, function,<br />
return, void, delete, if, this, while,<br />
else, in, typeof, with, true i false.<br />
• Dobrze jest deklarowac zmienne<br />
w pierwszym ujeciu na listwie czasowej.<br />
W ten sposób trzymasz je wszystkie<br />
w jednym miejscu i latwo mozesz przejsc<br />
do edycji ich wartosci.<br />
Deklarowanie danych<br />
263
Rozdzial 9.<br />
Deklarowanie danych<br />
Czesto bedzie zachodzic potrzeba podstawienia<br />
do zmiennej okreslonej wlasciwosci obiektu<br />
i przechowania jej na pózniej. Przykladowo,<br />
móglbys chciec zachowac wspólrzedne x i y<br />
klipu filmowego, zeby po przeciagnieciu klipu<br />
przez uzytkownika w nowe miejsce, Flash mógl<br />
przywrócic jego pierwotna pozycje. W celu<br />
wywolania takiej wlasciwosci mozna posluzyc<br />
sie sciezka dostepu do niej (uzywajac skladni<br />
z kropka) lub tez funkcja getProperty.<br />
W celu<br />
przypisania wlasciwosci do zmiennej<br />
przez podanie sciezki dostepu:<br />
1. Zaznacz pierwsze ujecie kluczowe na listwie<br />
czasowej i otwórz palete akcji.<br />
2. Wybierz Actions/set variable.<br />
3. W polu Variable palety akcji wpisz nazwe<br />
swojej zmiennej. Pole Expression pozostaw<br />
niezaznaczone.<br />
4. W polu Value wprowadz sciezke dostepu<br />
do wybranej wlasciwosci, oddzielajac<br />
kolejne poziomy kropka. Zaznacz pole<br />
Expression (rys. 9.2).<br />
W celu<br />
przypisania wlasciwosci do zmiennej<br />
przez zastosowanie<br />
funkcji getProperty:<br />
1. Zaznacz pierwsze ujecie kluczowe na listwie<br />
czasowej i otwórz palete akcji. Wybierz<br />
Actions/set variable.<br />
2. W polu Variable palety akcji wpisz nazwe<br />
swojej zmiennej.<br />
3. W polu Value wybierz Functions/<br />
getProperty.<br />
W polu Value pojawi sie akcja<br />
getProperty wraz z argumentami<br />
target oraz property (rys. 9.3).<br />
X=100<br />
myMovieClip<br />
Rys. 9.2. Uzyj skladni z kropka do<br />
podstawienia wlasciwosci obiektu do<br />
zmiennej. Tutaj zmiennej myXPosition<br />
odpowiada wspólrzedna x obiektu<br />
myMovieClip w glównej listwie czasowej.<br />
Obecnie zmienna ta przechowuje wartosc 100<br />
Rys. 9.3. Akcja getProperty wymaga podania<br />
argumentów target i property<br />
264
Kontrolowanie przeplywu informacji<br />
Rys. 9.4. Argumentem target jest sciezka<br />
_root.myMovieClip, a wlasciwosc to wspólrzedna<br />
x klipu filmowego myMovieClip. Wartosc ta<br />
przypisana jest zmiennej myXPosition<br />
4. W miejsce argumentu target wpisz<br />
sciezke dostepu, a w miejsce argumentu<br />
property – wybrana wlasciwosc. Zaznacz<br />
pole Expression (rys. 9.4).<br />
Wskazówka<br />
• Kiedy przypisujesz zmiennej wlasciwosc lub<br />
odwolanie do innej zmiennej, Flash okresla<br />
aktualna wartosc i podstawia ja do zmiennej.<br />
Jesli taka wlasciwosc lub odwolanie do<br />
zmiennej zmienia swoja wartosc, wartosc<br />
twojej zmiennej pozostanie taka sama jak na<br />
poczatku, az do momentu przypisania jej<br />
wartosci na nowo. Oto przyklad:<br />
xPosition = _xmouse<br />
Po zadeklarowaniu tej zmiennej, o nazwie<br />
xPosition w pierwszym ujeciu twojego<br />
filmu, przechowuje ona wartosc<br />
wspólrzednej x polozenia wskaznika myszy.<br />
W czasie przesuwania wskaznika po ekranie<br />
wlasciwosc _xmouse oczywiscie ulega<br />
zmianie, jednak wartosc zmiennej xPosition<br />
pozostaje taka, jak w momencie deklaracji<br />
(czyli wykonania akcji wyrazenia set<br />
variable). Zeby zmienna mogla<br />
przyjmowac nowe wartosci, trzeba umiescic<br />
ja w petli, tak jak zdarzenia klipu filmowego<br />
EnterFrame lub Mouse move.<br />
Deklarowanie danych<br />
265
Rozdzial 9.<br />
Deklarowanie danych<br />
Lancuchy znakowe i wyrazenia<br />
Kiedy uzywasz akcji set variable do<br />
podstawienia informacji do zmiennej, masz<br />
mozliwosc zaznaczenia opcji Expression<br />
w bloku edycji parametrów dla pól Variable<br />
oraz Value (rys. 9.5). Zaznaczenie tej opcji dla<br />
pola Value powoduje usuniecie znaku<br />
cudzyslowu otaczajacego wprowadzona<br />
informacje i traktowanie jej jako wyrazenia,<br />
a nie lancucha znakowego. Wyrazenie to linia<br />
kodu, mogaca zawierac zmienne, wlasciwosci<br />
i obiekty, które musza zostac oszacowane,<br />
zanim Flash bedzie mógl okreslic ich wartosc.<br />
Wyrazenie przypomina wzór matematyczny,<br />
np. a 2 + b 2 . Wartosc wyrazenia musi zostac<br />
obliczona, zanim nastapi przypisanie jej do<br />
zmiennej (rys. 9.6). Z drugiej strony, lancuch<br />
znakowy jest traktowany przez Flasha po prostu<br />
jako grupa znaków. W tym przypadku wzór<br />
a 2 + b 2 jest tylko i wylacznie sekwencja siedmiu<br />
znaków (przy wyliczeniu odstepów). Kiedy<br />
deklarujesz zmienna znakowa, musisz<br />
pozostawic pole Expression niezaznaczone.<br />
W przypadku kazdego innego typu danych pole<br />
to powinno byc zaznaczane. Z kolei zaznaczenie<br />
pola Expression, widniejacego obok pola<br />
Variable, zmienia cale wyrazenie w oknie<br />
skryptu, nadajac mu forme set (variable,<br />
value). Ta skladnia umozliwia jednoczesne<br />
wprowadzenie wyrazenia zmiennej i jej<br />
wartosci. Na przyklad, wybierajac dla<br />
zmiennych nazwy player1, player2 i player3,<br />
mozesz je szybko utworzyc za pomoca<br />
wyrazenia "player" + counter, gdzie<br />
counter jest równiez zmienna, przechowujaca<br />
liczbe (rys. 9.7). Ten rodzaj wyrazenia zostanie<br />
omówiony w dalszej czesci rozdzialu.<br />
Rys. 9.5. Dla pól Variable oraz Value<br />
w bloku edycji parametrów sa dostepne<br />
pola wyboru Expression<br />
Rys. 9.6. Przyklady wyrazen. Nazwy zmienne<br />
stoja po lewej stronie znaku równosci,<br />
wyrazenia po prawej<br />
Rys. 9.7. Akcja set action (dostepna tylko<br />
przy wykorzystaniu akcji set variable)<br />
pozwala uzyc wyrazenia dla nazwy zmiennej<br />
266
Kontrolowanie przeplywu informacji<br />
Tabela 9.2. Najczesciej spotykane sekwencje<br />
opuszczania znaku<br />
Sekwencja Znak<br />
\b Backspace<br />
\r Return<br />
\t Tab<br />
\" Cudzyslów<br />
\’ Pojedynczy cudzyslów<br />
\\ Odwrócony ukosnik<br />
Wskazówka<br />
• Skoro znak cudzyslowu zawsze otacza<br />
domyslny lancuch znakowy, to jak<br />
wprowadzic cudzyslów dla wlasciwego,<br />
wprowadzonego przez ciebie lancucha<br />
znaków? Robi sie to, wpisujac odwrócony<br />
ukosnik (\) przed cudzyslowem. Nazywa sie<br />
to opuszczaniem znaku. Na przyklad,<br />
lancuch znakowy „The line, \”Call me<br />
Shane\” is from a 1953 movie Western”<br />
odczytuje sie jako: The line, ”Call me<br />
Shane” is from a 1953 movie Western.<br />
Kilka najczesciej uzywanych sekwencji<br />
opuszczania znaków specjalnych<br />
przedstawia tabela 9.2.<br />
Deklarowanie danych<br />
267
Rozdzial 9.<br />
Deklarowanie danych<br />
Poslugiwanie sie zmiennymi<br />
i wyrazeniami<br />
Zmiennych i wyrazen uzywa sie w skrypcie<br />
jako znaków-wypelniaczy dla parametrów.<br />
Niemal w kazdej akcji, wymagajacej okreslenia<br />
parametrów, mozesz zamiast nich podstawiac<br />
zmienne lub wyrazenia. Na przyklad<br />
podstawowa akcja gotoAndStop umozliwia<br />
ci wprowadzenie w polu Frame wyrazenia<br />
zamiast numeru ujecia. Wyrazeniem moze byc<br />
zmienna o nazwie mojaKarta, przechowujaca<br />
liczbe z zakresu 1 do 52. Klatki na listwie<br />
czasowej o numerach 1 do 52 moglyby wtedy<br />
zawierac grafiki 52 kart do gry, a zmiana<br />
zmiennej w akcji gotoAndStop moglaby<br />
powodowac wyswietlanie róznych kart.<br />
W przypadku akcji getURL, pole URL moze<br />
zawierac wyrazenie zamiast wlasciwego adresu<br />
internetowego. Przykladowo, wyrazenie moze<br />
stanowic lancuch znakowy polaczony ze<br />
zmienna, jak w ”http://”+twojaWitryna<br />
Sieciowa. Zmiana zmiennej o nazwie<br />
twojaWitrynaSieciowa bedzie powodowac<br />
wczytywanie róznych adresów URL przez akcje<br />
getURL. Wartosci dla wlasciwosci obiektów<br />
oraz sciezki dostepu do obiektów moga byc<br />
zastepowane wyrazeniami w akcji<br />
setProperty (rys. 9.8).<br />
Innym powszechnym sposobem uzycia<br />
zmiennej jest prosty licznik. Zamiast zajmowac<br />
miejsce parametru, zmienna w tym przypadku<br />
przechowuje numer okreslonego typu zdarzenia,<br />
potrzebny do pózniejszego przywolania<br />
i sprawdzenia. Wynik punktowy gracza moze<br />
byc przechowywany w zmiennej, dzieki czemu<br />
Flash okresli, czy gracz osiagnal ilosc punktów<br />
potrzebna do ukonczenia gry.<br />
Rys. 9.8. Przyklady podstawiania zmiennych<br />
i wyrazen w polach okreslania parametrów<br />
akcji: zmienna frameNumber w akcji<br />
gotoAndPlay (u góry), zmienne myURL oraz<br />
myWindowName w akcji getURL (w srodku)<br />
i zmienne MovieClipName oraz myRotation<br />
w akcji setProperty (u dolu)<br />
268
Kontrolowanie przeplywu informacji<br />
Rys. 9.9. Zmiennej frameNumber przypisano<br />
wartosc 5<br />
Rys. 9.10. Po wybraniu Expression z menu<br />
rozwijanego Type mozesz podstawic zmienna<br />
frameNumber w polu Frame<br />
stop ( )<br />
frameNumber=5<br />
Rys. 9.11. Kiedy uzytkownik zwolni przycisk<br />
umieszczony w dolnej warstwie, Flash odczyta na<br />
podstawie zmiennej (frameNumber) numer ujecia,<br />
do którego ma przeskoczyc – tutaj jest to klatka 5<br />
W celu wprowadzenia zmiennej<br />
do pola okreslania parametru:<br />
1. W pierwszym ujeciu kluczowym glównej<br />
listwy czasowej wybierz Actions/set<br />
variable. W polu Variable palety akcji<br />
wpisz nazwe swojej zmiennej. W polu<br />
Value wpisz liczbe. Zaznacz pole wyboru<br />
Expression dla pola Value (rys. 9.9).<br />
2. Utwórz symbol przycisku i umiesc jego klon<br />
na scenie.<br />
3. Zaznacz przycisk i na palecie akcji wybierz<br />
Basic Actions/Go To (rys. 9.10).<br />
4. W bloku edycji parametrów, w menu<br />
rozwijanym Type zaznacz Expression.<br />
W polu Frame wpisz nazwe zmiennej<br />
zadeklarowanej w glównej listwie czasowej<br />
(rys. 9.10).<br />
5. Udostepnij dodatkowe ujecia, które moglyby<br />
byc odtwarzane. Przetestuj film (rys. 9.11).<br />
Twoja zmienna przechowuje liczbe.<br />
W momencie wykonywania akcji<br />
gotoAndPlay Flash uzywa tej liczby jako<br />
oznaczenia ujecia, które ma odtworzyc.<br />
Wskazówka<br />
• W powyzszym cwiczeniu, kiedy deklarujesz<br />
zmienna w postaci lancucha znakowego,<br />
mozesz sprawic, zeby akcja gotoAndPlay<br />
powodowala przeskok do ujecia<br />
oznaczonego etykieta, zamiast numerem.<br />
Przypisz np. lancuch znaków „Konkluzja”<br />
do zmiennej mojaEtykietaUjecia.<br />
Uzywajac teraz nazwy mojaEtykietaUjecia<br />
jako parametru akcji gotoAndPlay,<br />
spowodujesz, ze Flash przeskoczy do ujecia<br />
z etykieta Konkluzja. Utwórz wiele etykiet,<br />
np. Tytul, Wstep, czy Tresc. Podstawiajac<br />
te nazwy do zmiennej mojaEtykietaUjecia,<br />
sprawisz, ze akcja gotoAndPlay bedzie<br />
odtwarzac rózne ujecia filmu.<br />
Deklarowanie danych<br />
269
Rozdzial 9.<br />
Deklarowanie danych<br />
Zakres dzialania zmiennych<br />
Kazda deklarowana zmienna nalezy do<br />
okreslonej listwy czasowej. Wlasciwosc ta<br />
nazywana jest zakresem dzialania zmiennej.<br />
Jesli zadeklarujesz zmienna z poziomu glównej<br />
listwy czasowej, to wlasnie ta zmienna bedzie<br />
ograniczona zakresem dzialania do glównej<br />
listwy czasowej. Jesli zadeklarujesz zmienna<br />
z poziomu klipu filmowego, to bedzie ono<br />
ograniczona zakresem dzialania do tego wlasnie<br />
klipu filmowego. Zakres dzialania zmiennej to<br />
niejako jej dom. Zmienne „egzystuja”<br />
w okreslonych listwach czasowych, wiec jesli<br />
chcesz uzyc informacji przechowywanej<br />
w którejs ze zmiennych, musisz najpierw podac<br />
do niej sciezke dostepu. Mamy tutaj sytuacje<br />
podobna do okreslania sciezek do klipów<br />
filmowych. Zeby uzyskac dostep do klipu<br />
filmowego lub zmiennej, trzeba je<br />
zidentyfikowac za pomoca sciezki dostepu.<br />
Konstruujac sciezki dostepu dla zmiennych,<br />
mozesz uzywac terminów okreslania<br />
wzglednosci _root, this oraz _parent.<br />
W kolejnym cwiczeniu utworzysz menu<br />
rozwijane wczytujace witryne sieciowa za<br />
pomoca akcji getURL. Adres URL dla tej akcji<br />
bedzie przechowywany w zmiennej<br />
zadeklarowanej i osadzonej w glównej listwie<br />
czasowej. Jako ze akcja getURL rezyduje<br />
w klipie filmowym menu rozwijanego, zarówno<br />
zmienna, jak i akcja korzystajaca z tej zmiennej<br />
maja rózne zakresy dzialania. Uzyjesz wiec<br />
sciezki dostepu do zidentyfikowania zmiennej<br />
w glównej listwie czasowej z poziomu listwy<br />
czasowej klipu filmowego.<br />
W celu zidentyfikowania zmiennej<br />
o innym zakresie dzialania:<br />
1. Utwórz klip filmowy bedacy menu<br />
rozwijanym, jak to opisano w rozdziale 4.<br />
Przeciagnij klon tego klipu filmowego<br />
z biblioteki na scene (rys. 9.12).<br />
2. Nazwij klip filmowy przy pomocy palety<br />
Instance.<br />
Rys. 9.12. Klip filmowy w formie menu<br />
rozwijanego posiada dwa stany – zwiniete<br />
(collapsed) i rozwiniete (expanded) – które<br />
moga sie zmieniac<br />
270
Kontrolowanie przeplywu informacji<br />
Rys. 9.13. Zadeklaruj zmienna myURL bedaca<br />
adresem witryny wydawnictwa Peachpit Press<br />
Akcja getURL, przypisana do przycisku wewnatrz klipu<br />
filmowego, odwoluje sie do zmiennej _root.myURL<br />
Zmienna<br />
myURL<br />
ograniczona<br />
zakresem<br />
dzialania<br />
do glównej<br />
listwy<br />
czasowej<br />
3. Zaznacz pierwsze ujecie kluczowe na<br />
glównej listwie czasowej i otwórz palete<br />
akcji.<br />
4. Wybierz Actions/set variable.<br />
5. W polu Variable wpisz nazwe. W polu<br />
Value wpisz adres internetowy. Obydwa<br />
pola wyboru Expression pozostaw<br />
niezaznaczone (rys. 9.13).<br />
Ta zmienna zostala zadeklarowana<br />
w glównej listwie czasowej i przechowuje<br />
dane w postaci lancucha znakowego.<br />
6. Przejdz do trybu edycji symbolu twojego<br />
klipu filmowego. Zaznacz jeden<br />
z przycisków w rozwinietym menu.<br />
7. Dodaj manipulator zdarzenia on<br />
(release), wybierajac Actions/getURL.<br />
8. W polu URL wpisz _root, nastepnie<br />
kropke, a potem nazwe zmiennej<br />
zadeklarowanej w glównej listwie czasowej.<br />
Zaznacz pole Expression (rys. 9.14).<br />
9. Przetestuj film. Kiedy zwolnisz przycisk<br />
zawarty w klipie filmowym, Flash odczyta<br />
informacje przechowywana w zmiennej na<br />
glównej listwie czasowej. Jesli nie<br />
zidentyfikowales glównej listwy czasowej<br />
w polu URL akcji getURL, Flash bedzie<br />
próbowal odnalezc zmienna w obrebie klipu<br />
filmowego, co zakonczy sie<br />
niepowodzeniem.<br />
Deklarowanie danych<br />
Rys. 9.14. Dla ostatniego przycisku w menu<br />
rozwijanym przypisz w polu URL akcje<br />
_root.myURL. Jako ze akcja ta jest przypisywana<br />
wewnatrz klipu filmowego menu rozwijanego,<br />
wpisanie _root jest niezbedne do<br />
zidentyfikowania zmiennej myURL,<br />
zadeklarowanej przeciez w glównej listwie<br />
czasowej<br />
271
Rozdzial 9.<br />
Deklarowanie danych<br />
Deklarujac zmienne, mozna przypisac je do<br />
innej listwy czasowej niz ta, w której zostaly<br />
utworzone. Zeby ustawic inny od domyslnego<br />
zakres dzialania zmiennej, trzeba podac sciezke<br />
dostepu do zmiennej w akcji set variable.<br />
W celu przypisania zmiennej<br />
innego zakresu dzialania:<br />
1. Kontynuujac poprzednie cwiczenie, zaznacz<br />
pierwsze ujecie kluczowe glównej listwy<br />
czasowej i otwórz palete akcji.<br />
2. W polu Variable w miejsce dotychczasowej<br />
zawartosci wstaw nazwe klonu klipu<br />
filmowego, do którego ma ograniczac sie<br />
zakres dzialania zmiennej, nastepnie wpisz<br />
kropke i na koncu nazwe zmiennej<br />
(rys. 9.15).<br />
Teraz twoja zmienna bedzie osadzona<br />
w klonie klipu filmowego w miejsce<br />
glównej listwy czasowej.<br />
3. Przejdz do trybu edycji symbolu twojego<br />
klipu filmowego. Zaznacz jeden<br />
z przycisków w rozwinietym menu.<br />
4. Zaznacz wyrazenie getURL.<br />
5. W polu URL dotychczasowa zawartosc<br />
zastap nazwa zmiennej zadeklarowanej<br />
w glównej listwie czasowej. Zaznacz pole<br />
wyboru Expression (rys. 9.16).<br />
6. Przetestuj film.<br />
Kiedy zwolnisz przycisk zawarty w klipie<br />
filmowym, Flash odczyta informacje<br />
przechowywana w zmiennej osadzonej<br />
w klipie filmowym. Poniewaz po<br />
zadeklarowaniu zmiennej ograniczono jej<br />
zakres dzialania do klipu filmowego, Flash<br />
potrafi ja zlokalizowac i uzyc<br />
przechowywanej w niej informacji jako<br />
adresu URL.<br />
Rys. 9.15. Sciezka dostepu menu.myURL<br />
deklaruje zmienna myURL w klipie filmowym<br />
bedacym menu rozwijanym<br />
Akcja getURL,<br />
przypisana do<br />
przycisku<br />
wewnatrz<br />
klipu<br />
filmowego,<br />
odwoluje sie<br />
do zmiennej<br />
myURL<br />
Zmienna myURL osadzona w listwie<br />
czasowej klipu filmowego<br />
Rys. 9.16. Ostatni przycisk w rozwijanym<br />
menu wymaga podania tylko nazwy zmiennej<br />
myURL, jako ze zmienna ta jest osadzona<br />
wlasnie w klipie filmowym menu rozwijanego<br />
272
Kontrolowanie przeplywu informacji<br />
Wczytywanie zmiennych<br />
z zewnatrz<br />
Tak naprawde, to zmiennych wcale nie trzeba<br />
deklarowac wewnatrz filmu. Flash pozwala na<br />
przechowywanie ich w dokumentach<br />
tekstowych, w kazdej chwili mozliwych do<br />
wczytania. W ten sposób mozesz latwo<br />
edytowac zmienne w obrebie takiego<br />
dokumentu tekstowego, a w rezultacie zmieniac<br />
caly film bez uzywania narzedzi Flasha. Dla<br />
przykladu, tworzac quiz dzialajacy w oparciu<br />
o zmienne w postaci pytan i odpowiedzi,<br />
przechowuj owe zmienne w dokumentach<br />
tekstowych. Kiedy pózniej bedziesz chcial<br />
wymienic pytania, wystarczy, ze dokonasz<br />
edycji samego dokumentu. Ponadto zmienne<br />
w dokumentach tekstowych moga byc<br />
generowane automatycznie przy pomocy<br />
skryptów serwerowych, bazujacych na danych<br />
dostarczanych z zewnatrz. Flash moze wtedy<br />
odczytywac zmienne z dokumentu tekstowego<br />
tylko z ostatnio wprowadzanymi przez<br />
uzytkownika wartoscia mi. Taki zewnetrzny<br />
dokument tekstowy moze przechowywac<br />
dowolna ilosc zmiennych, ale musi byc<br />
zapisany w formacie MIME – standardowym<br />
formacie wykorzystywanym w skryptach CGI.<br />
Zmienne zapisywane sa w nastepujacy sposób:<br />
zmienna1=wartosc1&zmienna2=<br />
wartosc2&zmienna3=wartosc3<br />
gdzie pary zmienna — wartosc oddzielane sa<br />
pojedynczym znakiem &.<br />
Zmienne moga byc wczytywane do okreslonego<br />
poziomu lub do wskazanego klipu filmowego.<br />
W obu przypadkach musisz jednak pamietac<br />
o ich zakresach dzialania, jesli masz zamiar<br />
odczytywac wartosci tych zmiennych.<br />
Wczytywanie zminnych z zewnatrz<br />
273
Rozdzial 9.<br />
Wczytywanie zminnych z zewnatrz<br />
W celu wczytania zmiennych<br />
umieszczonych w pliku tekstowym:<br />
1. Uruchom prosty edytor tekstowy i otwórz<br />
nowy dokument. Mozesz posluzyc sie np.<br />
windowsowym Notatnikiem.<br />
2. Zapisz swoje zmienne i ich wartosci<br />
w standardowym formacie MIME<br />
(rys. 9.17).<br />
3. Zapisz utworzony dokument tekstowy w tej<br />
samej lokalizacji, w której zapisany bedzie<br />
film Flasha. Niewazne, jak nazwiesz swój<br />
plik, ale najlepiej, zeby byla to nazwa<br />
opisowa ze standardowym trzyliterowym<br />
rozszerzeniem.<br />
4. We Flashu otwórz nowy film. Zaznacz<br />
pierwsze ujecie kluczowe w glównej listwie<br />
czasowej i otwórz palete akcji.<br />
5. Wybierz Actions/loadVariables (Esc + lv).<br />
6. W polu URL wprowadz sciezke dostepu do<br />
pliku tekstowego. Poniewaz zarówno plik<br />
tekstowy, jak i plik SWF sa w tym samym<br />
katalogu, wystarczy podac nazwe pliku. Pole<br />
Expression pozostaw niezaznaczone.<br />
7. W menu rozwijanym Location wybierz<br />
Level i nie zmieniaj wpisanej liczby 0<br />
(rys. 9.18).<br />
Flash wczyta zmienne z dokumentu<br />
tekstowego do poziomu 0 lub do glównej<br />
listwy czasowej.<br />
8. Utwórz symbol klipu filmowego i umiesc<br />
jego klon na scenie.<br />
9. Zaznacz klip filmowy. Na palecie akcji<br />
wybierz Actions/onClipEvent. Zaznacz<br />
zdarzenie Key Down w bloku edycji<br />
parametrów.<br />
10. Wybierz Actions/setProperty. Z menu<br />
rozwijanego Property wybierz Rotation.<br />
Rys. 9.17. Dwie zmienne i ich wartosci,<br />
zapisane w formacie MIME. W tym<br />
przykladzie, zmienne sa zapisane<br />
w dokumencie tekstowym o nazwie data.txt<br />
Rys. 9.18. Akcja LoadVariablesNum wczytuje<br />
zmienne z pliku data.txt do poziomu 0<br />
274
Kontrolowanie przeplywu informacji<br />
Rys. 9.19. Wartosc zmiennej myRotation z pliku<br />
tekstowego jest wykorzystywana do okreslenia<br />
stopnia obrotu klipu filmowego<br />
Rys. 9.20. Dwie dodatkowe akcje setProperty<br />
zmieniaja skale klipu filmowego, uzywajac w tym<br />
celu zmiennej mySize z pliku tekstowego. Klip<br />
filmowy przed wystapieniem zdarzenia keyDown<br />
(u góry z lewej) oraz po wystapieniu zdarzenia<br />
(u góry z prawej)<br />
11. W polu Target bloku edycji parametrów<br />
wpisz this. W polu Value wprowadz<br />
sciezke dostepu do wczytywanej zmiennej.<br />
Jako ze zmienne sa wczytywane do poziomu<br />
0, musisz wpisac _root lub _level0 przed<br />
nazwa zmiennej. Zaznacz obydwa pola<br />
Expression (rys. 9.19).<br />
Kiedy nacisniesz klawisz, Flash uzyje<br />
wczytanych zmiennych jako wartosci<br />
potrzebnych do wykonania rotacji klipu<br />
filmowego.<br />
12. Dodaj nastepna akcje setProperty w celu<br />
wykorzystania drugiej wczytywanej<br />
zmiennej (rys. 9.20).<br />
13. Wyeksportuj film do formatu SWF i zapisz<br />
go w tej samej lokalizacji, co plik tekstowy.<br />
Wskazówki<br />
• Jesli zamierzasz wczytac zmienne<br />
z zewnatrz do klipu filmowego, postaraj sie<br />
uzywac zawsze tej samej sciezki dostepu do<br />
klipu. Nazwij ja np. wczytywaneZmienne,<br />
a bedziesz wiedzial, gdzie szukac<br />
zmiennych, jako ze zostana osadzone w tym<br />
samym miejscu.<br />
• Zmienne umieszczone w dokumencie<br />
tekstowym sa wczytywane do Flasha jako<br />
lancuchy znakowe, co oznacza, ze nie trzeba<br />
wpisywac cudzyslowów wokól wartosci<br />
znakowych.<br />
• Pary zmienna — wartosc zapisuj<br />
w dokumentach tekstowych, pomijajac<br />
wszelkie przenoszenia do nastepnej linii,<br />
odstepy i interpunkcje, z wyjatkiem<br />
symbolu &. Byc moze tobie trudniej bedzie<br />
to odczytac, ale za to Flash szybciej to<br />
zrozumie.<br />
Wczytywanie zminnych z zewnatrz<br />
275
Modyfikowanie zmiennych<br />
Rozdzial 9.<br />
Modyfikowanie zmiennych<br />
Zmienne sa uzyteczne, poniewaz mozna<br />
zmieniac ich zawartosc wraz z odswiezeniem<br />
informacji o statusie filmu lub uzytkownika.<br />
Czasami sprowadza sie to tylko do przypisania<br />
zmiennej nowej wartosci. Kiedy indziej trzeba<br />
wartosci zmiennych dodac, odjac, pomnozyc<br />
lub podzielic, zmienic wartosc boole’owska<br />
true na false czy tez zmodyfikowac<br />
lancuch znakowy przez dodanie kilku znaków.<br />
Przykladowo, zmienna mójWynik moze byc<br />
zadeklarowana z wartoscia 0. Pózniej, z kazdym<br />
punktem zdobytym przez gracza, wartosc tej<br />
zmiennej bedzie rosla o 1. Przeprowadzaniem<br />
operacji polegajacych na modyfikowaniu<br />
informacji przechowywanych w zmiennych<br />
zajmuja sie operatory – symbole, które<br />
„operuja” danymi.<br />
Operator przypisania<br />
i operatory arytmetyczne<br />
Operator przypisania (=) to pojedynczy znak<br />
równosci, który przypisuje zmiennej okreslona<br />
wartosc. Miales juz okazje korzystac z tego<br />
operatora w akcjach set variable, które<br />
automatycznie wstawiaja operator przypisania<br />
do informacji wprowadzanych w polach<br />
Variable oraz Value. Mozesz tez uzyc akcji<br />
evaluate, która udostepnia puste pole<br />
Expression w bloku edycji parametrów. W polu<br />
tym wprowadzasz nazwe zmiennej, wartosc<br />
i operator przypisania pomiedzy nimi<br />
(rys. 9.21). Inne powszechnie uzywane<br />
operatory znajdziesz w tabeli 9.3.<br />
Rys. 9.21. Akcje set variable (u góry)<br />
oraz evaluate (u dolu) tworza skrypty<br />
o równowaznym znaczeniu. W przypadku<br />
akcji evaluate musisz jednak sam wprowadzic<br />
operator przypisania<br />
Tabela 9.3. Najczesciej uzywane operatory<br />
Symbol Opis<br />
+ Dodawanie.<br />
- Odejmowanie.<br />
* Mnozenie.<br />
/ Dzielenie.<br />
++ Zwieksza wartosc o jeden. x++ jest<br />
równowazne z x = x + 1.<br />
-- Zmniejsza wartosc o jeden. x-- jest<br />
równowazne z x = x – 1.<br />
+= Dodaje wartosc i przypisuje ja<br />
zmiennej. x += 5 jest równowazne<br />
z x = x + 5.<br />
-= Odejmuje wartosc i przypisuje ja<br />
zmiennej. x –= 5 jest równowazne<br />
z x = x – 5.<br />
*= Mnozy przez wartosc i przypisuje<br />
wynik zmiennej. x *= 5 jest<br />
równowazne z x = x * 5.<br />
/= Dzieli przez wartosc i przypisuje<br />
wynik zmiennej. x /= 5 jest<br />
równowazne z x = x / 5.<br />
276
Kontrolowanie przeplywu informacji<br />
Rys. 9.22. Po kazdym zwolnieniu wcisnietego<br />
przycisku, przypisana do niego akcja zwieksza<br />
wartosc zmiennej rotation o 10<br />
Operatory sa koniem pociagowym<br />
interaktywnosci Flasha. Bedziesz ich czesto<br />
uzywal do przeprowadzania obliczen w tle,<br />
dodawania wartosci jednej zmiennej do innej<br />
lub zmieniania wlasciwosci obiektu przez<br />
dodanie albo odjecie wartosci zmiennej.<br />
Ponizszy przyklad pokazuje proste<br />
zastosowanieoperatorów do modyfikowania<br />
zmiennej oddzialujacej na grafike filmu.<br />
Utworzysz przycisk, który zwieksza wartosc<br />
zmiennej po kazdym jego wcisnieciu.<br />
Wspomniana zmienna jest uzywana do<br />
ustawiania kata obrotu klipu filmowego.<br />
W celu zwiekszenia wartosci zmiennej<br />
oddzialujacej na wlasciwosc<br />
klipu filmowego:<br />
1. Utwórz klip filmowy i umiesc jego klon na<br />
scenie. Za pomoca palety Instance nadaj mu<br />
nazwe.<br />
2. W pierwszym ujeciu kluczowym glównej<br />
listwy czasowej zadeklaruj zmienna<br />
rotation o wartosci 0.<br />
3. Utwórz symbol przycisku i umiesc jego klon<br />
na scenie.<br />
4. Zaznacz przycisk i na palecie akcji wybierz<br />
Actions/evaluate. W polu Expression<br />
wpisz rotation += 10 (rys. 9.22).<br />
Wyrazenie to dodaje 10 do biezacej wartosci<br />
i przypisuje sume do zmiennej o nazwie<br />
rotation.<br />
5. Zaznacz klip filmowy i na palecie akcji<br />
wybierz Actions/onClipEvent. W bloku<br />
edycji parametrów zaznacz zdarzenie<br />
EnterFrame .<br />
6. Wybierz Actions/setProperty.<br />
Modyfikowanie zmiennych<br />
277
Rozdzial 9.<br />
Modyfikowanie zmiennych<br />
7. Z menu rozwijanego Property wybierz<br />
Rotation. W polu Target wpisz this.<br />
W polu Value wpisz _root.rotation.<br />
zaznacz obydwa pola wyboru Expression<br />
(rys. 9.23).<br />
Zdarzenie EnterFrame sprawia, ze akcja<br />
setProperty jest wykonywana<br />
nieustannie. W wyniku jej dzialania obrót<br />
klipu filmowego jest przypisywany do<br />
wartosci zmiennej rotation, która<br />
uzytkownik moze zwiekszyc, zwalniajac<br />
przycisk.<br />
8. Umiesc na scenie kolejny klon przycisku.<br />
Przypisz do zmiennej rotation operator<br />
zmniejszania wartosci o 1 (--), dzieki czemu<br />
wartosc zmiennej bedzie zmniejszac sie po<br />
kazdym kliknieciu przycisku. W ten sposób<br />
bedziesz mógl kontrolowac stopien obrotu<br />
klipu filmowego w odwrotnym kierunku<br />
(rys. 9.24).<br />
Wskazówki<br />
• W celu wykonania bardziej<br />
skomplikowanych obliczen matematycznych<br />
(np. potegowanie, sinus, cosinus) albo<br />
manipulacji lancuchem znakowym<br />
zmiennych lub ich wartosci, musisz uzyc<br />
obiektu matematycznego (Math) lub obiektu<br />
lancucha znakowego (String). Z obiektami<br />
tymi zapoznasz sie w rozdzialach 10. i 11.<br />
• We Flashu obowiazuja zasady kolejnosci<br />
wykonywania dzialan arytmetycznych<br />
(uczyles sie o nich na matematyce,<br />
pamietasz?). Znaczy to, ze pewne operatory<br />
maja pierwszenstwo przed innymi. Na<br />
przyklad, mnozenie i dzielenie zawsze<br />
wykonuje sie przed dodawaniem lub<br />
odejmowaniem (3 + 4 ∗ 2 daje zupelnie inny<br />
wynik niz 3 ∗ 4 + 2).<br />
• Jesli jakas czesc wyrazenia ma zostac<br />
obliczona przed innymi, zamknij<br />
odpowiednia grupe zmiennych i operatorów<br />
w nawiasach. Przykladowo, wynikiem<br />
dzialania ( 3 + 2 ) ∗ 4 jest wartosc 20, ale<br />
w przypadku braku nawiasów, 3 + 2 ∗ 4 da<br />
wynik równy 11.<br />
Rys. 9.23. Stopien obrotu biezacego klipu<br />
filmowego jest nieustannie uaktualniany do<br />
wartosci zmiennej rotation w glównej listwie<br />
czasowej<br />
Przycisk<br />
zmniejszajacy<br />
wartosc zmiennej<br />
Klip filmowy obraca sie w zaleznosci<br />
od wartosci zmiennej rotation<br />
Rys. 9.24. Lufa tego dziala to klip filmowy,<br />
którego wlasciwosc obrotu (_rotation)<br />
zmienia sie stosownie do wartosci zmiennej<br />
rotation<br />
Przycisk<br />
zwiekszaja<br />
cy wartosc<br />
zmiennej<br />
278
Kontrolowanie przeplywu informacji<br />
Rys. 9.25. Klip filmowy mushroom jest powielany<br />
po kazdym zwolnieniu przycisku. Nazwa nowego<br />
klonu oraz jego poziom glebokosci zaleza od<br />
wartosci zmiennej counter<br />
Wiazanie zmiennych<br />
i funkcja eval<br />
Operator dodawania (+) sumuje wartosci<br />
danych liczbowych. Jednak mozna uzyc go<br />
takze do laczenia lancuchów znakowych<br />
i zmiennych przechowujacych dane znakowe.<br />
Operacja taka nazywa sie wiazaniem. Wiazanie<br />
zmiennych i lancuchów znakowych umozliwia<br />
tworzenie sciezek dostepu i skomplikowanych<br />
wyrazen. Na przyklad, czesto praktykowanym<br />
sposobem nadawania nazw zduplikowanym<br />
klonom filmowym jest wiazanie zmiennej<br />
z nazwa oryginalnego klipu filmowego.<br />
Zmienna jest po prostu licznikiem dodajacym<br />
wartosc 1 za kazdym razem, kiedy nastepuje<br />
powielenie klipu. Jesli nazwa klipu filmowego<br />
jest mushroom (grzyb), a nazwa zmiennej<br />
Counter (licznik), to mozesz dowiazac nowa<br />
nazwe za pomoca wyrazenia:<br />
"mushroom" + counter<br />
a rezultatem beda kolejne nazwy, np.<br />
mushroom1 , mushroom2 itp.<br />
W celu dowiazania<br />
lancucha znakowego do zmiennej:<br />
1. Utwórz symbol klipu filmowego i umiesc<br />
jego klon na scenie. Za pomoca palety<br />
Instance nadaj mu nazwe.<br />
2. Utwórz symbol przycisku i umiesc jego klon<br />
na scenie.<br />
3. W pierwszym ujeciu glównej listwy<br />
czasowej uzyj akcji set variable do<br />
zadeklarowania zmiennej o wartosci 1.<br />
4. Zaznacz przycisk, otwórz palete akcji<br />
i wybierz Actions/duplicateMovieClip.<br />
5. W polu Target wpisz nazwe klipu<br />
filmowego. Pole Expression pozostaw<br />
niezaznaczone. W polu New Name wpisz<br />
nazwe klipu filmowego w cudzyslowie,<br />
dalej znak +, potem nazwe zmiennej.<br />
Zaznacz pole Expression. W polu Depth<br />
wpisz nazwe zmiennej (rys. 9.25).<br />
Wiazanie zmiennych i funkcja eval<br />
279
Rozdzial 9.<br />
Wiazanie zmiennych i funkcja eval<br />
Utworzony zostanie duplikat klipu<br />
filmowego, z wartoscia zmiennej dowiazana<br />
do nazwy klipu filmowego. Duplikat klipu<br />
jest umieszczany na poziomie glebokosci<br />
odpowiadajacym wartosci zmiennej.<br />
6. Wybierz Actions.setProperty. Z menu<br />
rozwijanego Property wybierz X Position.<br />
7. W polu Target wpisz nazwe klipu<br />
filmowego w cudzyslowie, znak + i nazwe<br />
zmiennej. zaznacz pole wyboru Expression.<br />
W polu Value wpisz nazwe zmiennej, znak<br />
*, i liczbe 20. Zaznacz pole Expression<br />
(rys. 9.26).<br />
Akcja setProperty umiesci duplikat klipu<br />
filmowego w nowym miejscu, wedlug<br />
wspólrzednej x okreslonej na podstawie<br />
wartosci zmiennej. Dzieki temu bedziesz<br />
mógl dostrzec duplikat.<br />
8. Wybierz Actions/evaluate . W polu<br />
Expression wpisz nazwe zmiennej, a dalej<br />
znak ++ (rys. 9.27).<br />
Za kazdym razem, kiedy zwalniasz przycisk<br />
i tworzysz duplikat klipu filmowego, twoja<br />
zmienna zwieksza wartosc o 1. Stad nowe<br />
duplikaty zawsze otrzymuja unikalne nazwy,<br />
oparte na wiazaniu lancucha znakowego<br />
(nazwy klipu) i zmiennej oraz indywidualne<br />
poziomy glebokosci i wspólrzedna x<br />
polozenia na scenie (rys. 9.28).<br />
Rys. 9.26. Duplikat klipu mushroom wedruje<br />
w nowe miejsce<br />
Rys. 9.27. Zmienna counter zwieksza swoja<br />
wartosc o 1<br />
mushroom1 na poziomie<br />
glebokosci = 1, x = 20<br />
mushroom2<br />
na poziomie<br />
glebokosci = 2,<br />
x = 40<br />
Oryginalny<br />
klip filmowy<br />
tanczacego<br />
grzyba,<br />
nazwany<br />
mushroom<br />
mushroom3 na poziomie glebokosci = 3, x = 60<br />
Rys. 9.28. Powielone tanczace grzybki<br />
otrzymuja nazwy utworzone w rezultacie<br />
wiazania lancucha znakowego „mushroom”<br />
ze zmienna counter<br />
280
Kontrolowanie przeplywu informacji<br />
Rys. 9.29. Metoda stop jest dolaczana do<br />
kazdego nowego duplikatu klipu filmowego<br />
mushroom<br />
Odtwarzanie<br />
mushroom1<br />
zatrzymane<br />
w klatce 1.<br />
Odtwarzanie<br />
mushroom2<br />
zatrzymane<br />
w klatce 1.<br />
Rys. 9.30. Przerwane zostaje odtwarzanie<br />
kazdego nowego duplikatu klipu filmowego<br />
mushroom<br />
Oryginalny<br />
klip filmowy<br />
tanczacego<br />
grzyba,<br />
nazwany<br />
mushroom<br />
Odtwarzanie mushroom3 zatrzymane w klatce 1.<br />
Po utworzeniu nowych zmiennych lub obiektów<br />
w wyniku wiazania — mozesz ich uzywac<br />
w innych wyrazeniach. Jednak, dla oszacowania<br />
zawartosci tych wyrazen musisz uzyc funkcji<br />
eval. Funkcja ta odczytuje wyrazenie i zwraca<br />
wartosc w postaci pojedynczego lancucha<br />
znakowego. Zalózmy np., ze chcesz odczytac<br />
wartosc poziomu przezroczystosci<br />
zduplikowanego klipu filmowego mushroom2.<br />
Móglbys spróbowac posluzyc sie takim<br />
wyrazeniem:<br />
"mushroom" + counter + "._alpha"<br />
jednak Flash odczyta to wyrazenie jako lancuch<br />
znakowy i nie rozpozna, ze _alpha to<br />
wlasciwosc klipu mushroom2. Rozwiazaniem<br />
tego problemu jest zgrupowanie pierwszej<br />
czesci wyrazenia w postaci argumentu funkcji<br />
eval, a nastepnie dopisanie wlasciwosci, jak<br />
nizej:<br />
eval ("mushroom" + counter)._alpha<br />
Funkcji eval mozesz uzywac wtedy, kiedy<br />
wyrazen wiazanych, np. w sciezkach dostepu<br />
lub argumentach metod.<br />
W celu uzycia<br />
funkcji eval w sciezce dostepu:<br />
1. Kontynuuj poprzednie cwiczenie. Zaznacz<br />
przycisk i otwórz palete akcji.<br />
2. Dodaj nowe wyrazenie przed wyrazeniem<br />
zwiekszania wartosci zmiennej, wybierajac<br />
najpierw Actions/evaluate.<br />
3. W polu Expression palety akcji wybierz<br />
Functions/eval. Pojawi sie wyrazenie eval<br />
z podswietlonym argumentem zmiennej<br />
(variable).<br />
4. W miejsce argumentu zmiennej wpisz<br />
nazwe klipu filmowego w cudzyslowie,<br />
nastepnie symbol + i na koncu nazwe<br />
zmiennej.<br />
5. Za wyrazeniem eval wpisz kropke, a potem<br />
metode, która ma byc wywolana (rys. 9.29).<br />
Wyrazenie eval szacuje wiazanie,<br />
a nastepnie dolacza do niego metode<br />
(rys. 9.30).<br />
Wiazanie zmiennych i funkcja eval<br />
281
Rozdzial 9.<br />
Sprawdzanie informacji<br />
Sprawdzanie informacji<br />
za pomoca<br />
wyrazen warunkowych<br />
Zmienne oraz wyrazenia sa scisle powiazane<br />
z wyrazeniami warunkowymi. Informacje, które<br />
odczytujesz, przechowujesz w zmiennych<br />
i modyfikujesz za pomoca wyrazen, beda<br />
naprawde uzyteczne dopiero wtedy, kiedy<br />
porównasz je z innymi fragmentami danych.<br />
Wykonanie takiego porównania to zadanie<br />
wlasnie dla wyrazen warunkowych, które<br />
ponadto umozliwiaja zrealizowanie dalszych<br />
instrukcji, w zaleznosci od otrzymanych<br />
rezultatów. Logika wyrazen warunkowych<br />
sprowadza sie w zasadzie do instrukcji: „Jesli<br />
abc jest prawda, to wy konaj xyz”, a we Flashu<br />
definiuje sie zarówno abc (warunek), jak i xyz<br />
(konsekwencja). Wyrazenia warunkowe<br />
przypominaja tez troche manipulatory zdarzen –<br />
obydwie funkcje reaguja na okreslone sytuacje.<br />
W przypadku manipulatorów zdarzen, taka<br />
sytuacja jest zazwyczaj ruch mysza lub<br />
klikniecie jej klawiszem. W wyrazeniach<br />
warunkowych natomiast sytuacja jest biezacy<br />
status zmiennej lub wlasciwosci obiektu.<br />
Wyrazenia warunkowe zaczynaja sie od<br />
instrukcji if (). Argument znajdujacy sie<br />
w nawiasach jest warunkiem – wyrazeniem<br />
porównujacym jedna rzecz z druga. Czy<br />
zmienna mójWynik ma wieksza wartosc od<br />
zmiennej najlepszyWynik? Czy wlasciwosc<br />
_droptarget mojego przeciaganego klipu<br />
filmowego jest niezgodna ze sciezka dostepu<br />
do klipu filmowego mójSmietnik? Czy<br />
wlasciwosc _currentFrame glównej listwy<br />
czasowej ma wartosc 10? To wszystko<br />
przyklady warunków. Jak sie je konstruuje?<br />
Za pomoca operatorów porównywania,<br />
dolaczanych do wyrazen.<br />
282
Kontrolowanie przeplywu informacji<br />
Tabela 9.4. Operatory porównywania<br />
Symbol<br />
Opis<br />
== Równe z...<br />
< Mniejsze niz<br />
> Wieksze niz<br />
= Wieksze lub równe<br />
!= Nie jest równe z...<br />
Rys. 9.31. Wtedy i tylko wtedy, gdy spelniony jest<br />
warunek okreslony w nawiasach, zostana<br />
wykonane konsekwencje warunku –<br />
consequence1, consequence2 i consequence3<br />
Rys. 9.32. Dodaj warunek do akcji przypisanych<br />
do prawego przycisku, który bedzie sprawdzal<br />
wartosc zmiennej rotation<br />
Operatory porównywania<br />
Operator porównywania szacuje wartosci<br />
po obu stronach wyrazenia i zwraca wartosc<br />
prawdy (true) lub falszu (false). Operatory te<br />
wymieniono w tabeli 9.4.<br />
Kiedy po oszacowaniu warunku okazuje sie, ze<br />
zostal spelniony (prawda), nastepuje wykonanie<br />
konsekwencji, okreslonej w nawiasach<br />
klamrowych wyrazenia if (rys. 9.31).<br />
W przypadku niespelnienia warunku (falsz),<br />
wszystkie akcje zamkniete w klamrach sa<br />
ignorowane.<br />
W ponizszym cwiczeniu skorzystasz z pliku,<br />
który utworzyles w celu wykonania obrotu lufy<br />
dziala, w podrozdziale „Modyfikowanie<br />
zmiennych”. Chcemy ustalic maksymalne<br />
odchylenie lufy na poziomie 90 stopni, dlatego<br />
tez skonstruujemy wyrazenie warunkowe<br />
nakazujace Flashowi sprawdzac, czy wartosc<br />
wychylenia (obrotu) jest wieksza niz 90.<br />
W przypadku spelnienia warunku, rotacja lufy<br />
zatrzyma sie na poziomie 90 stopni,<br />
zapobiegajac tym samym wychyleniu jej<br />
ponizej poziomej linii podstawy.<br />
W celu wprowadzenia<br />
wyrazenia warunkowego:<br />
1. Kontynuuj cwiczenie demonstrujace<br />
wykonanie obrotu klipu filmowego<br />
z podrozdzialu „Modyfikowanie<br />
zmiennych”. Zaznacz przycisk i otwórz<br />
palete akcji.<br />
2. Zaraz za wyrazeniem okreslajacym przyrost<br />
zmiennej o 10, wstaw wyrazenie<br />
warunkowe, wybierajac Actions/if<br />
(Esc + if).<br />
3. W polu Condition palety Actions wpisz<br />
nazwe zmiennej, nastepnie symbol > i na<br />
koncu wartosc 90 (rys. 9.32). Flash bedzie<br />
sprawdzal, czy zmienna ma wartosc<br />
wieksza od 90.<br />
Sprawdzanie informacji<br />
283
Rozdzial 9.<br />
Sprawdzanie informacji<br />
4. Wybierz Actions/set variable. W polu<br />
Variable wpisz nazwe zmiennej, a w polu<br />
Value wpisz 90. Zaznacz pole wyboru<br />
Expression (rys. 9.33).<br />
Jesli wartosc zmiennej przekracza 90, Flash<br />
resetuje jej wartosc z powrotem na 90.<br />
Dzieki temu lufa nie obróci sie ponizej<br />
poziomej linii podstawy.<br />
5. Zaznacz drugi przycisk, zmniejszajacy<br />
stopien obrotu i przygotuj podobne<br />
wyrazenie warunkowe, sprawdzajace, czy<br />
zmienna ma wartosc mniejsza niz –90.<br />
W przypadku spelnienia warunku, wartosc<br />
zmiennej powinna byc resetowana do<br />
wartosci –90.<br />
Wskazówka<br />
• Dowolna akcja wprowadzona poza<br />
wyrazeniem warunkowym if bedzie<br />
wykonywana niezaleznie od tego, czy<br />
warunek okreslony w tym wyrazeniu zostal<br />
spelniony, czy nie. Rozwaz nastepujacy<br />
fragment skryptu:<br />
if (myVariable == 10) {<br />
myVariable = 20;<br />
}<br />
myVariable = 30;<br />
Po wykonaniu tych instrukcji, zmienna<br />
myVariable bedzie zawsze przyjmowala<br />
wartosc 30, nawet wtedy, gdy spelniony<br />
zostanie warunek myVariable == 10.<br />
Ostatnie wyrazenie jest wykonywane<br />
niezaleznie od wszystkich innych wyrazen.<br />
Klip filmowy obrócony o 90 stopni<br />
Rys. 9.33. Lufa dziala nie moze obrócic sie<br />
o kat powyzej 90 stopni poniewaz wyrazenie<br />
if nie pozwala zmiennej rotation przyjmowac<br />
wartosci wiekszych niz 90<br />
284
Kontrolowanie przeplywu informacji<br />
Wprowadzanie alternatywy do<br />
wyrazen warunkowych<br />
W wielu sytuacjach bedzie zachodzic potrzeba<br />
wprowadzenia do wyrazenia warunkowego<br />
alternatywnego wyboru. Wyrazenie else<br />
pozwala na wykonanie konsekwencji warunku<br />
w momencie, kiedy nie jest on spelniony.<br />
Wyrazenie else bylo omówione w rozdziale 7.,<br />
jako sposób na wykrycie upuszczonych klipów<br />
filmowych. W tamtym przykladzie wyrazenie<br />
if sprawdzalo, czy klip filmowy zostal<br />
upuszczony w miejscu zajmowanym przez inny<br />
klip filmowy. Gdy warunek byl spelniony,<br />
upuszczony klip znikal; w przypadku<br />
niespelnienia warunku, wyrazenie else<br />
odsylalo przeciagniety klip filmowy do jego<br />
pierwotnej pozycji. Wyrazenie else odnosi<br />
sie do wszystkich warunków niespelnionych<br />
w wyrazeniu if.<br />
Wyrazenie else zawsze towarzyszy wyrazeniu<br />
if, a jego skladnia wyglada nastepujaco:<br />
if (warunek) {<br />
} else {<br />
}<br />
konsekwencja1;<br />
konsekwencja2;<br />
Uzywaj instrukcji else w przypadku istnienia<br />
mozliwosci wyboru pomiedzy dwiema opcjami,<br />
np. przy detekcji kolizji, sprawdzaniu<br />
prawdziwosci argumentu, poprawnosci<br />
odpowiedzi lub hasla.<br />
Wprowadzanie alternatywy<br />
285
Rozdzial 9.<br />
Wprowadzanie alternatywy<br />
W celu wprowadzenia alternatywy<br />
dla warunku prawda lub falsz:<br />
1. Utwórz klip filmowy bedacy przyciskiem<br />
wyboru (radio button), jak to opisano<br />
w rozdziale 5. Klip ten powinien posiadac<br />
przyciski zmieniajace stan na wlaczony lub<br />
wylaczony. Umiesc klon klipu filmowego<br />
na scenie. Za pomoca palety Instance nadaj<br />
mu nazwe.<br />
2. Zaznacz klip filmowy i otwórz palete akcji.<br />
3. Wybierz Actions/onClipEvent. Pozostan<br />
przy zdarzeniu Load.<br />
4. Wybierz Actions/set variable. W polu<br />
Variable wpisz nazwe zmiennej, a w polu<br />
Value wpisz false. Zaznacz pole wyboru<br />
Expression obok pola Value (rys. 9.34).<br />
Po wczytaniu tego klipu filmowego,<br />
zmienna zostanie zadeklarowana z wartoscia<br />
false (falsz). Zwróc uwage, ze zawartosc<br />
pola Value jest wyrazeniem, dlatego tez<br />
false jest odczytywane jako zmienna<br />
boole’owska, a nie znakowa.<br />
5. Przejdz do trybu edycji symbolu twojego<br />
klipu filmowego z przyciskiem wyboru.<br />
6. Zaznacz przycisk w stanie „wylaczony”.<br />
Dodaj kolejne wyrazenie ponizej akcji<br />
gotoAndStop, wybierajac Actions/set<br />
variable. W polu Variable wpisz nazwe<br />
zmiennej zadeklarowanej za pomoca<br />
manipulatora zdarzenia klipu filmowego.<br />
W polu Value wpisz true. Zaznacz pole<br />
wyboru Expression obok pola Value<br />
(rys. 9.35).<br />
Po wcisnieciu przycisku wyboru zmienna<br />
przyjmie wartosc true.<br />
Rys. 9.34. Klip filmowy bedacy przyciskiem<br />
wyboru deklaruje zmienna answer<br />
(odpowiedz) z wartoscia boole’owska false<br />
(falsz)<br />
Rys. 9.35. Przycisk w stanie „wylaczony”<br />
zmienia wartosc zmiennej answer na true<br />
(prawda)<br />
286
Kontrolowanie przeplywu informacji<br />
Rys. 9.36. Przycisk w stanie „wlaczony” zmienia<br />
wartosc zmiennej answer na false (falsz)<br />
Rys. 9.37. Przycisk sprawdza zmienna answer,<br />
osadzona w klipie filmowym przycisku wyboru.<br />
Jesli warunek jest spelniony, inny klip filmowy,<br />
o nazwie response (odpowiedz), przeskakuje do<br />
ujecia wyswietlajacego komunikat<br />
7. Zaznacz przycisk w stanie „wlaczony”.<br />
Dodaj kolejne wyrazenie ponizej akcji<br />
gotoAndStop, wybierajac Actions/set<br />
variable. W polu Variable wpisz nazwe<br />
zmiennej zadeklarowanej za pomoca<br />
manipulatora zdarzenia klipu filmowego.<br />
W polu Value wpisz false. Zaznacz pole<br />
wyboru Expression obok pola Value<br />
(rys. 9.36).<br />
Ponowne klikniecie przycisku (powodujace<br />
„wylaczenie” go) ustawia wartosc zmiennej<br />
na false.<br />
8. Utwórz symbol przycisku i umiesc jego klon<br />
na scenie.<br />
9. Zaznacz przycisk i na palecie akcji wybierz<br />
Actions/if.<br />
10. W polu Condition wprowadz sciezke<br />
dostepu, nazwe zmiennej oraz instrukcje<br />
sprawdzania, czy zmienna ma wartosc true.<br />
Pamietaj, ze twoja zmienna jest ograniczona<br />
zakresem dzialania do klipu filmowego,<br />
a nie do glównej listwy czasowej.<br />
11. Wybierz akcje, która ma byc wykonywana<br />
w przypadku prawdziwosci warunku true<br />
(rys. 9.37).<br />
12. Wybierz Actions/else (Esc + el).<br />
13. Wybierz inna akcje, która ma byc<br />
wykonywana w przypadku prawdziwosci<br />
warunku false (rys. 9.38).<br />
Wskazówka<br />
• Nie nalezy mylic warunku prawda lub falsz<br />
z wartosciami true i false zmiennej<br />
boole’owskiej. Akurat w powyzszym<br />
przykladzie zmiennej true odpowiada<br />
spelnienie warunku prawda. Jednak mozliwa<br />
jest tez sytuacja odwrotna, kiedy zmiennej<br />
false odpowiada spelnienie warunku<br />
prawda.<br />
Wprowadzanie alternatywy<br />
Rys. 9.38. Wyrazenie else sprawia, ze klip<br />
filmowy response przeskakuje do innego ujecia<br />
w przypadku, gdy zmienna answer przyjmuje<br />
wartosc false<br />
287
Rozdzial 9.<br />
Rozgalezianie wyrazen warunkowych<br />
Rozgalezianie wyrazen<br />
warunkowych<br />
Jesli masz do czynienia z kilkoma mozliwymi<br />
do spelnienia warunkami oraz odpowiadajaca<br />
im liczba konsekwencji, musisz posluzyc sie<br />
jeszcze bardziej rozgalezionymi wyrazeniami<br />
warunkowymi, niz te, które sa dostepne przy<br />
uzywaniu wyrazenia else. W przypadku np.<br />
projektowania interfejsu witryny sieciowej lub<br />
gry, wymagajacej wprowadzania danych<br />
z klawiatury, bedziesz chcial zapewne<br />
sprawdzac, który klawisz zostal wcisniety,<br />
a nastepnie wymuszac wykonanie akcji<br />
odpowiadajacej temu konkretnemu klawiszowi.<br />
Za pomoca dostepnej we Flashu instrukcji else<br />
if mozesz konstruowac takie wlasnie<br />
rozbudowane wyrazenia warunkowe wraz<br />
z odpowiadajacymi im konsekwencjami.<br />
Skladnia wyglada nastepujaco:<br />
if (warunek1) {<br />
konsekwencja1;<br />
} else if (warunek2) {<br />
konsekwencja2;<br />
} else if (warunek3) {<br />
}<br />
konsekwencja3;<br />
Kazde z wyrazen else if posiada swój wlasny<br />
warunek, który jest szacowany, a takze wlasny<br />
zestaw konsekwencji, wykonywanych<br />
w przypadku spelnienia warunku. W nastepnym<br />
cwiczeniu wykorzystujemy obiekt Key oraz<br />
rozgalezione wyrazenie warunkowe do<br />
przesuniecia i obrócenia klipu filmowego<br />
w sposób uzalezniony od rodzaju wcisnietego<br />
klawisza.<br />
288
Kontrolowanie przeplywu informacji<br />
Rys. 9.39. Po wcisnieciu klawisza strzalki w góre<br />
ten klip filmowy jest obracany o 0 stopni<br />
i przesuwany o 30 pikseli w góre sceny<br />
W celu<br />
rozgalezienia akcji alternatywnych<br />
za pomoca instrukcji else if:<br />
1. Utwórz symbol klipu filmowego i umiesc<br />
jego klon na scenie. Nadaj mu nazwe za<br />
pomoca palety Instance.<br />
2. Zaznacz klip filmowy i otwórz palete akcji.<br />
3. Wybierz Actions/onClipEvent. Zaznacz<br />
zdarzenie EnterFrame.<br />
4. Wybierz Actions/if. W polu Condition<br />
wpisz Key.isDown(Key.UP).<br />
Pierwszy warunek korzysta z metody<br />
isDown obiektu Key do sprawdzenia, czy<br />
wcisniety zostal klawisz strzalki w góre.<br />
5. Wybierz Actions/setProperty. Z menu<br />
rozwijanego Property wybierz Rotation.<br />
W polu Target wpisz this. W polu Value<br />
wpisz 0. Zaznacz obydwa pola wyboru<br />
Expressions.<br />
6. Ponownie wybierz Actions/setProperty.<br />
Z menu rozwijanego Property wybierz<br />
Y Position. W polu Target wpisz this.<br />
W polu Value wpisz this._y – 30.<br />
Te dwie akcje setProperty obracaja klip<br />
filmowy w ten sposób, ze jego górna<br />
krawedz jest zwrócona do góry, po czym<br />
odejmuja wartosc 30 pikseli od<br />
wspólrzednej y jego polozenia, dzieki czemu<br />
klip przesuwa sie po scenie. Zaznacz<br />
obydwa pola wyboru Expression (rys. 9.39).<br />
7. Wybierz Actions/else if (Esc + ei). W polu<br />
Condition wpisz Key.isDown<br />
(Key.RIGHT).<br />
8. Wybierz dwie akcje setProperty do<br />
ustawienia obrotu klipu filmowego na<br />
wartosc 90 i dodania wartosci 30 do<br />
wspólrzednej x jego polozenia.<br />
9. Wybierz Actions/else if. W polu Condition<br />
wpisz Key.isDown(Key.DOWN).<br />
Rozgalezianie wyrazen warunkowych<br />
289
Rozdzial 9.<br />
Rozgalezianie wyrazen warunkowych<br />
10. Wybierz dwie akcje setProperty do<br />
ustawienia obrotu klipu filmowego na<br />
wartosc 180 i dodania wartosci 30 do<br />
wspólrzednej y jego polozenia.<br />
11. Wybierz Actions/else if. W polu Condition<br />
wpisz Key.isDown(Key.LEFT).<br />
12. Wybierz dwie akcje setProperty do<br />
ustawienia obrotu klipu filmowego na<br />
wartosc 270 i odjecia wartosci 30 do<br />
wspólrzednej x jego polozenia.<br />
13. Przetestuj film.<br />
Ta seria wyrazen if oraz else if<br />
sprawdza, czy uzytkownik wcisnal klawisz<br />
strzalki, a jesli tak, to przesuwa klip filmowy<br />
stosownie do wcisnietego klawisza<br />
(rys. 9.40). Stworzyles zaczatek gry<br />
Frogger!<br />
Wskazówka<br />
• Instrukcje sprawdzania warunku uzyte<br />
w powyzszym cwiczeniu nie zawieraja<br />
operatora porównywania zgodnosci (==).<br />
Jednak w przypadku zmiennych i metod<br />
boole’owskich nie zachodzi potrzeba<br />
specjalnego przyrównywania ich do wartosci<br />
true (prawda). Tak wiec ponizsze<br />
wyrazenia sa ekwiwalentne:<br />
if (Key.isDown(Key.LEFT))<br />
if (Key.isDown(Key.LEFT)==true)<br />
Rys. 9.40. Kompletny skrypt (u dolu) zawiera<br />
cztery wyrazenia warunkowe z instrukcjami if<br />
i else if, sprawdzajacymi, czy wcisnieto którys<br />
z klawiszy strzalek (góra, lewo, prawo lub<br />
dól). Stopien obrotu i pozycja klipu<br />
filmowego (zuczek na rysunku u góry)<br />
zmieniaja sie w zaleznosci od tego, który<br />
z warunków zostal spelniony<br />
290
Kontrolowanie przeplywu informacji<br />
Rys. 9.41. Operator logiczny && laczy te dwa<br />
wyrazenia, w wyniku czego do spelnienia calego<br />
warunku niezbedne jest wcisniecie jednoczesnie<br />
dwóch klawiszy – strzalka w góre i strzalka<br />
w prawo<br />
Laczenie wyrazen warunkowych<br />
za pomoca operatorów logicznych<br />
Istnieje mozliwosc tworzenia zlozonych<br />
wyrazen warunkowych – za pomoca operatorów<br />
logicznych && (AND), || (OR) oraz ! (NOT).<br />
Operatory te lacza dwa lub wiecej warunków<br />
w jednym wyrazeniu if, umozliwiajac<br />
sprawdzanie bardziej skomplikowanych<br />
scenariuszy dzialan. Przykladem moze byc<br />
sprawdzanie, czy wcisnieto jednoczesnie<br />
klawisze strzalki w góre oraz strzalki w prawo,<br />
z zamiarem przesuniecia klipu filmowego po<br />
skosie. Mozliwe tez byloby sprawdzenie, na<br />
której sposród kilku mozliwych pozycji<br />
upuszczony zostal przeciagany klip filmowy.<br />
Operator NOT mozna wykorzystac do<br />
sprawdzenia, czy zmienna zawiera wazny adres<br />
e-mail, ale jednoczesnie taki, którego domena<br />
nie jest obwarowana zakazem dostepu.<br />
Ponizsze cwiczenie bazuje na pliku, który<br />
utworzyles wczesniej, w celu przesuwania klipu<br />
filmowego za pomoca klawiatury. Polaczysz<br />
teraz dwa warunki w jednym wyrazeniu, dzieki<br />
czemu Flash bedzie mógl sprawdzic wcisnieta<br />
kombinacje klawiszy i w efekcie przesunac klip<br />
filmowy po skosie.<br />
W celu polaczenia warunków:<br />
1. Kontynuujemy poprzednie cwiczenie.<br />
Zaznacz symbol klipu filmowego i otwórz<br />
palete akcji.<br />
2. Zaznacz pierwsze wyrazenie if.<br />
3. W polu Condition, umiesc wskaznik myszy<br />
na koncu istniejacego juz warunku.<br />
4. Wybierz Operators/&&.<br />
5. Wprowadz drugi warunek zaraz za<br />
podwójnym symbolem & (rys. 9.41).<br />
Obydwa warunki pojawia sie w polu<br />
Condition, oddzielone operatorem &&.<br />
Laczenie wyrazen warunkowych<br />
291
Rozdzial 9.<br />
6. Zmien odpowiednio akcje setProperty<br />
w celu stworzenia mozliwosci obracania<br />
klipu filmowego i przesuwania go po skosie<br />
(rys. 9.42).<br />
7. Kontynuuj dodawanie wyrazen else if<br />
z polaczonymi warunkami dla pozostalych<br />
kombinacji klawiszy, nie usuwajac jednak<br />
wczesniej przygotowanych warunków<br />
ograniczajacych ruch klipu filmowego<br />
do plaszczyzny wylacznie pionowej lub<br />
poziomej (rys. 9.43).<br />
Dzieki wprowadzeniu operatora logicznego<br />
&& Flash bedzie sprawdzal, czy uzytkownik<br />
wcisnal kombinacje dwóch klawiszy.<br />
Rys. 9.42. Pierwszy fragment skryptu<br />
wskazuje, ze po wcisnieciu jednoczesnie<br />
klawiszy strzalki w góre i strzalki w prawo<br />
zuczek wykona obrót o 45 stopni i przesunie<br />
sie po skosie w kierunku prawo-góra<br />
Laczenie wyrazen warunkowych<br />
Wskazówka<br />
• Mozliwe jest zagniezdzanie wyrazen if<br />
w innych wyrazeniach if, co z kolei jest<br />
równowazne z wprowadzeniem operatora<br />
logicznego && w pojedynczym wyrazeniu<br />
if. Dla przykladu, ponizsze dwa fragmenty<br />
skryptu przed ustawieniem nowej zmiennej<br />
sprawdzaja, czy obydwa warunki zostaly<br />
spelnione:<br />
if (twójWiek >= 12) {<br />
}<br />
if (twójWiek = 12 && twójWiek<br />
Kontrolowanie przeplywu informacji<br />
Zapetlanie wyrazen<br />
Zapetlajac wyrazenia, mozesz tworzyc akcje<br />
lub grupy akcji, które beda wykonywane<br />
okreslona ilosc razy, lub tez dopóki spelniony<br />
bedzie pewien warunek. Powtarzajace sie akcje<br />
sa czesto wykorzystywane do budowania tablic,<br />
specjalnej odmiany zmiennych,<br />
przechowujacych dane w strukturalny, latwo<br />
dostepny sposób. Akcja wykonywana w petli<br />
daje pewnosc, ze kazdy fragment danych jest<br />
wprowadzany i odczytywany w prawidlowej<br />
kolejnosci. Wiecej o tablicach dowiesz sie<br />
z rozdzialu 11. Generalnie jednak, zapetlajacych<br />
sie wyrazen uzywa sie do automatycznego<br />
wykonywania akcji przez ilosc razy okreslana<br />
za pomoca zmiennej o narastajacej wartosci.<br />
Taka zmienna modyfikuje argumenty kazdej<br />
nastepnej metody w petli albo okreslone<br />
wlasciwosci tworzonych obiektów. Na przyklad,<br />
mozesz dynamicznie generowac grafike<br />
w calosci za posrednictwem ActionScript,<br />
powielajac tylko klipy filmowe za pomoca<br />
wyrazen i akcji duplicateMovieClip.<br />
Korzystaj z zapetlajacych sie wyrazen, gdy<br />
zachodzi potrzeba zmiany wlasciwosci calej<br />
serii klipów filmowych, modyfikowania<br />
zlozonych ustawien dzwieku lub wprowadzania<br />
zmian do wartosci grupy zmiennych.<br />
Istnieja trzy rodzaje wyrazen dzialajacych<br />
w petli – akcje while, do while i for – ale<br />
wszystkie one maja to samo zastosowanie. Dwa<br />
pierwsze wykonuja petle, dopóki spelniony jest<br />
okreslony warunek. Trzecie wyrazenie<br />
wykonuje petle, korzystajac przy tym<br />
z wbudowanego licznika.<br />
W celu zastosowania wyrazenia while do<br />
powielania klipów filmowych:<br />
1. Utwórz symbol klipu filmowego i umiesc<br />
jego klon na scenie. Nadaj mu nazwe za<br />
pomoca palety Instance.<br />
2. Utwórz symbol przycisku i umiesc jego klon<br />
na scenie.<br />
Zapetlanie wyrazen<br />
293
Rozdzial 9.<br />
Zapetlanie wyrazen<br />
3. Zaznacz przycisk i otwórz palete akcji.<br />
Wybierz Actions/set variable. W polu<br />
Variable wpisz i. W polu Value wpisz 0.<br />
Zaznacz pole wyboru obok pola Value<br />
(rys. 9.44).<br />
Zmienna i lub j jest czesto uzywana<br />
w postaci licznika petli.<br />
4. Wybierz Actions/while (Esc + wh). W polu<br />
Condition wpisz i < 361.<br />
5. Przypisz dowolne akcje, które maja byc<br />
wykonywane, dopóki warunek pozostaje<br />
spelniony (dopóki i jest mniejsze niz 361).<br />
W tym cwiczeniu dodajemy wyrazenie<br />
duplicateMovieClip oraz dwa wyrazenia<br />
setProperty, obracajace i modyfikujace<br />
przezroczystosc duplikatów (rys. 9.45).<br />
6. Wybierz Actions/evaluate . W polu<br />
Expression wpisz i += 30. Ewentualnie<br />
posluz sie akcja setVariable do<br />
wprowadzenia równowaznego wyrazenia,<br />
i = i + 30. Po kazdym uruchomieniu<br />
petli zmienna i zwieksza wartosc o 30. Po<br />
przekroczeniu wartosci 361 warunek, który<br />
wyrazenie while sprawdza przy kazdym<br />
wykonaniu, przestaje byc spelniony. Flash<br />
konczy wykonywanie petli i przechodzi do<br />
kolejnego wyrazenia (rys. 9.46).<br />
Rys. 9.44. Zadeklaruj zmienna i dla<br />
manipulatora zdarzenia on (release)<br />
Rys. 9.45. Klip filmowy bar jest powielany,<br />
obracany i otrzymuje nowa wartosc poziomu<br />
przezroczystosci tak dlugo, jak dlugo<br />
zmienna I ma wartosc mniejsza niz 361<br />
Klip filmowy bar<br />
Przycisk<br />
Duplikaty klipu<br />
filmowego bar<br />
Rys. 9.46. Klip filmowy bar (u góry) jest<br />
podstawa wzorku (w srodku) wykreslonego<br />
przez wykonywane w petli wyrazenie (u dolu)<br />
294
Kontrolowanie przeplywu informacji<br />
Rys. 9.47. Równowazne wyrazenie do while<br />
Rys. 9.48. Równowazne wyrazenie for<br />
Rys. 9.49. To ostrzegawcze okno dialogowe<br />
pojawia sie, kiedy niespodziewanie próbujesz<br />
uruchomic nieskonczona petle<br />
Wyrazenie do while<br />
Wyrazenie while (Esc + do) jest zblizone do<br />
wyrazenia while, tyle ze warunek jest tu<br />
sprawdzany na koncu petli, a nie na poczatku.<br />
Oznacza to, ze akcje w petli sa wykonywane<br />
co najmniej raz. Ten sam skrypt, który<br />
utworzylismy w poprzednim cwiczeniu, mozna<br />
zapisac za pomoca wyrazenia do while, jak<br />
pokazano na rys. 9.47.<br />
Wyrazenie for<br />
Wyrazenie for (Esc + fr) udostepnia<br />
wbudowany licznik i parametry do zwiekszania<br />
oraz zmniejszania jego zawartosci, dzieki czemu<br />
mozesz uniknac pisania oddzielnych wyrazen.<br />
Parametry wyrazenia for to: Init, deklarujace<br />
zmienna licznika, Condition, czyli sprawdzane<br />
wyrazenie, Next, okreslajace wartosc przyrostu<br />
lub zmniejszania sie zmiennej licznika. Skrypt<br />
utworzony w poprzednim cwiczeniu mozna<br />
zapisac równiez za pomoca wyrazenia for, jak<br />
widac na rys. 9.48.<br />
Wskazówki<br />
• Nie uzywaj zapetlajacych sie wyrazen do<br />
konstruowania zestawów instrukcji<br />
sprawdzajacych okreslony warunek. Takie<br />
sprawdzanie w czasie rzeczywistym<br />
powinno odbywac sie z wykorzystaniem<br />
wyrazenia if w zdarzeniach klipu<br />
filmowego EnterFrame lub Mouse move.<br />
Kiedy Flash wykonuje petle, system<br />
pozostaje zamrozony, co oznacza, ze<br />
zarówno mysz, jak i klawiatura nie reaguja.<br />
• Upewnij sie, ze wartosc przyrostu zmiennej<br />
podajesz w nawiasach klamrowych<br />
towarzyszacych wyrazeniom while lub do<br />
while. Jesli tego nie uczynisz, warunek<br />
nigdy nie zostanie okreslony i Flash zacznie<br />
wykonywac petle nieskonczona ilosc razy.<br />
Na szczescie program ostrzega przed tym<br />
problemem w momencie, kiedy<br />
nieskonczona petla spowalnia dzialanie<br />
procesora (rys. 9.49).<br />
Zapetlanie wyrazen<br />
295
Rozdzial 9.<br />
296
Kontrolowanie tekstu 10<br />
Czesci skladowe jezyka HTML<br />
Na pewno wiesz, ze Flash umozliwia tworzenie przyciagajacych wzrok elementów tekstowych,<br />
w rodzaju tytulów, etykiet i opisów, towarzyszacych twojej animacji i dzwiekowi. Czy jednak<br />
spodziewales sie, ze oprócz okreslenia stylu, koloru i rozmiaru tekstu mozesz zrobic z nim cos<br />
wiecej? Tekst we Flashu jest naprawde zywy, co oznacza, ze uzytkownik moze wprowadzac go,<br />
a nawet zaznaczac i edytowac w czasie odtwarzania filmu. No i moze byc tez dynamiczny, czyli<br />
odswiezany podczas odtwarzania. Kazdy kolejny fragment tekstu wprowadzany przez odbiorce<br />
nazywa sie tekstem pobieranym, a tekst, który mozesz uaktualniac w czasie odtwarzania –<br />
tekstem dynamicznym. Zarówno pobierany, jak i dynamiczny tekst stwarzaja mozliwosc<br />
otrzymywania ze strony uzytkownika zlozonych informacji i dostosowywania filmu Flasha do<br />
tych danych. Mozna np. uzyc tekstu pobieranego do umozliwienia uzytkownikom wpisania ich<br />
imion, a potem spersonalizowania komunikatów pojawiajacych sie podczas odtwarzania filmu.<br />
Ciekawym pomyslem jest tez przygotowanie internetowego samouczka, korzystajacego z funkcji<br />
pobierania tekstu do wprowadzania krótkich odpowiedzi oraz tekstu dynamicznego do<br />
wyzwolenia odpowiedniej reakcji programu.<br />
Za pomoca palety Text Options definiuje sie pola tekstu pobieranego, do których uzytkownik<br />
wprowadza tekst, oraz pola dynamicznego tekstu, wyswietlajacego tekst zmieniajacy sie<br />
w zaleznosci od podanych kryteriów. Tekstom pobieranym przypisuje sie zmienne, dzieki czemu<br />
mozna przechowywac i modyfikowac informacje wprowadzane przez odbiorce, a takze sprawdzac<br />
je za pomoca wyrazen warunkowych. Takie fragmenty tekstu moga byc pózniej wykorzystywane<br />
w skryptach. Dwa obiekty kontrolujace informacje zawarte w pobieranym i dynamicznym tekscie<br />
– obiekt selekcji (Selection) i obiekt lancucha znakowego (String) – pozwalaja analizowac<br />
i manipulowac tekstem lub polozeniem kursora w obrebie pola tekstowego. Dzieki temu mozna<br />
np. wylapywac bledy w pisowni lub we wprowadzanych informacjach, zanim zostana<br />
wykorzystane w filmie Flasha lub przeniesione do zewnetrznej aplikacji w celu przetworzenia.<br />
Niniejszy rozdzial przedstawia niektóre z wielu mozliwosci, jakie niesie ze soba zastosowanie<br />
tekstu pobieranego i dynamicznego, a takze wprowadza cie w zagadnienia zwiazane z uzywaniem<br />
narzedzi kontrolujacych przeplyw informacji pomiedzy filmem Flasha i jego odbiorcami.<br />
Kontrolowanie tekstu<br />
297
Rozdzial 10.<br />
Tekst pobierany<br />
Tekst pobierany<br />
Projekty, które tworzysz we Flashu, moga byc<br />
tak zaprojektowane, by móc pobierac<br />
informacje bezposrednio od odbiorcy – np.<br />
nazwe identyfikujaca uzytkownika i haslo, dane<br />
osobowe potrzebne do przegladu, odpowiedzi<br />
na pytania konkursowe, zamówienia czy<br />
odpowiedzi w internetowych pogawedkach.<br />
Dane takie, nazywane we Flashu tekstem<br />
pobieranym (input text), przypisuje sie do<br />
zmiennych, dzieki czemu moga byc przesylane<br />
do przetworzenia w innych czesciach filmu lub<br />
wysylane do aplikacji serwerowej za pomoca<br />
metod GET i POST.<br />
Ponizsze cwiczenie demonstruje sposób<br />
umozliwienia odbiorcy kontrolowania<br />
parametrów akcji za posrednictwem tekstu<br />
pobieranego. W tym przypadku informacje beda<br />
pobierane od uzytkownika za pomoca bloku<br />
tekstowego, a nastepnie wykorzystywane do<br />
wczytania witryny sieciowej o podanym<br />
adresie URL.<br />
W celu uzycia tekstu pobieranego<br />
do zadania wczytania<br />
witryny sieciowej:<br />
1. Wybierz narzedzie tekstowe (Text Tool )<br />
i narysuj na scenie pole tekstowe (rys. 10.1).<br />
2. Na palecie Text Options wybierz Input<br />
Text z rozwijanego menu (rys. 10.2).<br />
Aktualnie zaznaczone pole tekstowe<br />
przyjmie postac pola tekstu pobieranego,<br />
umozliwiajacego wprowadzanie tekstu<br />
w czasie odtwarzania filmu.<br />
3. W polu Variable palety Text Options wpisz<br />
nazwe zmiennej. Dowolny tekst<br />
wprowadzony podczas odtwarzania filmu<br />
zostanie przypisany i przechowany w tej<br />
zmiennej.<br />
4. Zaznacz pole Border/Bg. Twoje pole<br />
tekstowe bedzie teraz mialo czarna ramke<br />
i biale tlo (rys. 10.3).<br />
Uchwyt zmiany<br />
rozmiaru pola<br />
Rys. 10.1. Pole tekstowe tworzy sie za<br />
pomoca narzedzia tekstowego. Mozesz<br />
zmieniac rozmiar pola, przeciagajac uchwyt<br />
w jego prawym dolnym rogu<br />
Rys. 10.2. Takie ustawienia na palecie Text<br />
Options definiuja pole tekstowe jako pole<br />
tekstu pobieranego (Input Text)<br />
Rys. 10.3. Pole tekstowe z nieokreslona<br />
ramka i tlem (z lewej) jest widoczne na scenie<br />
w trybie edycji w postaci pola otoczonego<br />
kropkowana linia. Pole tekstowe, któremu<br />
przypisano ramke i wypelnienie (tlo)<br />
(z prawej), posiada czarna, ciagla ramke<br />
i biale tlo<br />
298
Kontrolowanie tekstu<br />
Rys. 10.4. Akcje przypisane do przycisku<br />
wczytuja do nowego okna przegladarki witryne<br />
sieciowa o adresie przechowywanym w zmiennej<br />
myURL<br />
Rys. 10.5. Zmienna w polu tekstu pobieranego<br />
jest uzywana jako adres URL dla akcji getURL.<br />
Zwróc uwage, ze w polu tekstowym musi byc<br />
podany protokól http://<br />
5. Utwórz symbol przycisku i umiesc jego klon<br />
na scenie, ponizej pola tekstowego. Zaznacz<br />
przycisk i otwórz palete akcji.<br />
6. Wybierz Actions/on. W bloku edycji<br />
parametrów zaznacz zdarzenie Release.<br />
7. Wybierz Actions/getURL. W polu URL<br />
bloku edycji parametrów wpisz nazwe<br />
zmiennej pola tekstu pobieranego. Zaznacz<br />
pole wyboru Expression obok pola URL.<br />
W polu Window wybierz _blank<br />
(rys. 10.4).<br />
8. Przetestuj film.<br />
Kiedy odbiorca filmu wpisze adres URL<br />
w polu tekstowym, adres ten zostanie<br />
zapamietany pod postacia zmiennej.<br />
Nastepnie, po kliknieciu przycisku, Flash<br />
otworzy nowe okno w przegladarce i wczyta<br />
podana strone internetowa (rys. 10.5).<br />
Wskazówki<br />
• Opcje, które wybierzesz na paletach<br />
Character oraz Paragraph, np. font<br />
(czcionka), color (barwa) i alignment<br />
(wyrównanie), zostana przypisane do tekstu<br />
wpisywanego przez odbiorce filmu.<br />
• Istnieje mozliwosc umieszczania w polach<br />
tekstu pobieranego instrukcji na temat tego,<br />
co ma byc wpisane. Umiesc np. zdanie<br />
Tutaj wpisz adres witryny<br />
internetowej w bloku tekstowym w taki<br />
sposób, zeby odbiorca mógl zastapic je<br />
wybranym adresem URL. Mozesz tez<br />
wprowadzic poczatkowa czesc adresu,<br />
np. http://, a uzytkownik dopisze sobie<br />
reszte.<br />
Tekst pobierany<br />
299
Rozdzial 10.<br />
Tekst pobierany<br />
Opcje tekstu pobieranego<br />
Dla tekstu pobieranego – na palecie Text<br />
Options dostepnych jest wiele róznych opcji<br />
(rys. 10.6). Chociaz najwazniejszym polem do<br />
wypelnienia jest Variable, to za pomoca innych<br />
opcji mozesz modyfikowac sposób, w jaki<br />
odbiorca bedzie wprowadzal tekst.<br />
υ<br />
υ<br />
υ<br />
υ<br />
Single Line wymusza wyswietlanie<br />
wprowadzonego tekstu w jednej linii bloku<br />
tekstowego. Jesli dlugosc tekstu wykracza<br />
poza szerokosc bloku, to bedzie on<br />
przewijany horyzontalnie.<br />
Multiline umozliwia wyswietlanie tekstu<br />
w wiecej niz jednej linii bloku tekstowego,<br />
jesli uzytkownik wcisnie klawisz Enter<br />
w celu przejscia do nastepnej linii.<br />
Password ukrywa wpisywane znaki pod<br />
postacia gwiazdek. Uzyj tej opcji do<br />
ukrywania waznych informacji, np. hasla,<br />
przed wzrokiem ludzi zagladajacych<br />
odbiorcy filmu przez ramie.<br />
HTML zezwala na formatowanie tekstu<br />
w standardzie HTML 1.0 w celu<br />
poprawnego wyswietlania.<br />
υ<br />
υ<br />
υ<br />
υ<br />
Border/Bg rysuje czarna ramke wokól<br />
bloku tekstowego i wypelnia go bialym<br />
tlem. Nie zaznaczaj tej opcji, jesli blok<br />
tekstowy ma byc niewidoczny. Postaraj sie<br />
mimo wszystko oznaczac w jakis sposób<br />
bloki tekstowe na scenie, aby byly<br />
widoczne dla odbiorcy filmu.<br />
Word wrap, opcja pojawiajaca sie tylko<br />
po wybraniu innej opcji, Multiline.<br />
Automatycznie przenosi tekst do nastepnej<br />
linii jesli jego dlugosc przekracza szerokosc<br />
bloku.<br />
Max. Chars okresla maksymalna ilosc<br />
znaków mozliwych do wprowadzenia<br />
w bloku tekstowym. Jesli np. odbiorca ma<br />
wpisac nazwe stanu za pomoca<br />
dwuliterowego skrótu, wpisz w tym polu<br />
cyfre 2.<br />
Embed fonts dolacza fonty do<br />
eksportowanego pliku SWF, dzieki czemu<br />
w bloku tekstowym beda wyswietlane<br />
wygladzone fonty wybrane przez ciebie,<br />
a nie te, którymi akurat dysponuje odbiorca.<br />
Jednak pamietaj, ze zwieksza to objetosc<br />
pliku wynikowego.<br />
Rysuje ramke i tlo<br />
Typ tekstu<br />
Sposób wyswietlania<br />
tekstu (ilosc linii)<br />
Nazwa zmiennej<br />
Dolacza wszystkie fonty<br />
Wprowadza<br />
formatowanie HTML<br />
Maksymalna liczba<br />
znaków<br />
Dolacza wzory znaków<br />
specjalnych<br />
Dolacza wybrane fonty<br />
Rys. 10.6. Opcje dostepne na palecie Text Options pozwalaja<br />
zdefiniowac wlasciwosci bloku tekstowego<br />
300
Kontrolowanie tekstu<br />
Wiecej o osadzaniu czcionek i czcionkach systemowych<br />
Osadzenie czcionek w pliku z filmem Flasha<br />
daje pewnosc, ze odbiorca bedzie ogladal<br />
w czasie jego odtwarzania dokladnie takie<br />
fonty, jakich ty uzyles przy projektowaniu<br />
filmu. Domyslnie opcje osadzania czcionek<br />
uruchamia sie dla statycznego tekstu, ale<br />
w przypadku tekstu dynamicznego<br />
i pobieranego – musisz zdecydowac. Jesli nie<br />
dolaczysz czcionek do dokumentu, Flash uzyje<br />
ich najblizszych ekwiwalentów dostepnych<br />
w systemie odbiorcy, wyswietlajac je bez<br />
wygladzania (rys. 10.7).<br />
Dlaczego by wiec nie wybierac opcji osadzania<br />
czcionek za kazdym razem? Przede wszystkim<br />
dlatego, ze drastycznie zwieksza ona wielkosc<br />
eksportowanego pliku SWF z powodu<br />
dolaczania informacji potrzebnych do<br />
wyswietlenia okreslonego fontu.<br />
Tekst pobierany<br />
w fazie<br />
projektowania<br />
Tekst pobierany<br />
w czasie odtwarzania,<br />
z dolaczonym fontem<br />
Tekst pobierany w czasie odtwarzania,<br />
bez dolaczonego fontu<br />
Rys. 10.7. Tekst pobierany, korzystajacy<br />
z okreslonej czcionki w fazie powstawania<br />
projektu (u góry), jest wyswietlany podczas<br />
odtwarzania inaczej, niz na komputerze<br />
odbiorcy, który nie posiada w systemie<br />
odpowiednika czcionki uzytej przez projektanta,<br />
a niedolaczonej do pliku (u dolu)<br />
Jednak ostateczny rozmiar pliku mozna<br />
zmniejszyc, dolaczajac tylko te fonty,<br />
którymi uzytkownik bedzie sie poslugiwal<br />
przy wpisywaniu tekstu. Jesli np.<br />
wymagasz wprowadzania tylko wartosci<br />
numerycznych, dolacz jedynie wzory dla<br />
czcionek przedstawiajacych cyfry. Wtedy<br />
wszystkie cyfry beda dostepne w trakcie<br />
odtwarzania filmu, natomiast pozostale<br />
znaki w ogóle nie wyswietla sie na ekranie<br />
(beda niedostepne).<br />
Innym sposobem na zachowanie<br />
minimalnych rozmiarów pliku,<br />
a jednoczesnie wyeliminowanie problemu<br />
spowodowanego brakiem wlasciwych<br />
fontów po stronie odbiorcy, jest<br />
wykorzystanie czcionek systemowych.<br />
Czcionki te pojawiaja sie na koncu listy<br />
dostepnej w menu rozwijanym Font, a sa<br />
to _sans, _serif i _typewriter. Opcja ta<br />
wyszukuje fonty w systemie odbiorcy,<br />
najbardziej zblizone do okreslonego fontu<br />
systemowego. Oto lista odpowiedników<br />
fontów systemowych:<br />
υ<br />
υ<br />
υ<br />
Arial dla fontów typu _sans<br />
Times New Roman dla fontów typu<br />
_serif<br />
Courier New dla fontów typu<br />
_typewriter<br />
Kiedy uzywasz fontów systemowych,<br />
mozesz byc pewien, ze odbiorca widzi<br />
na ekranie tekst bardzo zblizony do tekstu,<br />
z którego korzystales, tworzac projekt.<br />
Jednak fonty systemowe maja tez dwie<br />
wady: sa wyswietlane bez wygladzania<br />
i nie moga byc animowane lub maskowane.<br />
Tekst pobierany<br />
301
Tekst dynamiczny<br />
Rozdzial 10.<br />
Tekst dynamiczny<br />
W przypadku tekstu, który ma zmieniac swoje<br />
wlasciwosci, jak np. punktacja w grze<br />
zrecznosciowej, wynik obliczen czy tez procent<br />
ilosci ujec twojego filmu Flasha, sciagnietych<br />
z sieci, najlepiej spisuje sie tekst dynamiczny.<br />
Podczas gdy bloki tekstu pobieranego akceptuja<br />
informacje dostarczane przez odbiorce, bloki<br />
tekstu dynamicznego przekazuja dane<br />
uzytkownikowi. Tak jak w przypadku tekstu<br />
pobieranego, równiez i tutaj mamy do czynienia<br />
ze zmienna, a jej zawartosc jest wlasnie tym, co<br />
widac bedzie w bloku tekstowym. W dodatku,<br />
opcje dynamicznego tekstu sa zgodne z tymi,<br />
które pojawiaja sie podczas edycji tekstu<br />
pobieranego, choc z jednym wyjatkiem: polem<br />
wyboru Selectable. Zaznaczenie tej opcji<br />
pozwoli uzytkownikowi zaznaczac i kopiowac<br />
tekst wyswietlany w bloku, ale uniemozliwi<br />
dokonywanie przez niego zmian.<br />
W kolejnym cwiczeniu przygotujemy zarówno<br />
bloki tekstu pobieranego, jak i dynamicznego.<br />
Po wprowadzeniu przez uzytkownika<br />
temperatury w stopniach Celsjusza w bloku<br />
tekstu pobieranego, Flash przeksztalci podana<br />
wartosc do skali Fahrenheita i wyswietli wynik<br />
w bloku tekstu dynamicznego.<br />
W celu uzycia tekstu dynamicznego<br />
do wyprowadzania<br />
informacji na ekran:<br />
1. Wybierz narzedzie tekstowe (Text Tool )<br />
i przeciagnij nim po scenie w celu<br />
narysowania bloku tekstowego.<br />
2. Na palecie Text Options, wybierz Input<br />
Text z pierwszego menu rozwijanego.<br />
W polu Variable wpisz nazwe zmiennej<br />
tekstu pobieranego (rys. 10.8).<br />
Aktualnie zaznaczony blok tekstowy<br />
przyjmie postac bloku tekstu pobieranego,<br />
umozliwiajac wprowadzanie informacji<br />
w czasie odtwarzania filmu.<br />
3. Ponownie wybierz narzedzie tekstowe<br />
(Text Tool) i przeciagnij nim po scenie w celu<br />
narysowania kolejnego bloku tekstowego.<br />
Rys. 10.8. Blok tekstu pobieranego nazwij<br />
celsius<br />
302
Kontrolowanie tekstu<br />
Rys. 10.9. Blok tekstu dynamicznego<br />
nazwij fahrenheit<br />
Rys. 10.10. To wyrazenie oblicza wartosc<br />
zmiennej Fahrenheit na podstawie wyrazenia<br />
wprowadzonego w polu Value<br />
Blok tekstu<br />
pobieranego Celsius<br />
Blok tekstu dynamicznego<br />
Fahrenheit<br />
Rys. 10.11. Zawartosc bloku tekstu<br />
dynamicznego (Fahrenheit) jest uaktualniana<br />
po wprowadzeniu nowej informacji do bloku<br />
tekstu pobieranego (Celsius)<br />
• Wykorzystaj bloki dynamicznego tekstu,<br />
wyswietlajace zawartosc zmiennych jako<br />
narzedzie do wykrywania i usuwania bledów<br />
w programie. Jesli projektujesz<br />
rozbudowany film Flasha, korzystajacy<br />
z duzej ilosci zmiennych, mozesz utworzyc<br />
blok tekstu dynamicznego, wyswietlajacego<br />
aktualne wartosci zmiennych, a tym samym<br />
bedziesz wiedzial, w jaki sposób Flash<br />
przetwarza informacje. W rozdziale 12.<br />
zapoznasz sie z innymi jeszcze metodami<br />
sledzenia zmiennych, ale juz ta opisana<br />
powyzej pozwala dolaczyc do filmu<br />
narzedzie podgladu wartosci zmiennych.<br />
4. Na palecie Text Options, wybierz tym<br />
razem Dynamic Text z pierwszego menu<br />
rozwijanego.<br />
Aktualnie zaznaczony blok tekstowy<br />
przyjmie postac bloku tekstu dynamicznego,<br />
umozliwiajac wyswietlanie i uaktualnianie<br />
informacji za posrednictwem tego pola.<br />
5. W polu Variable palety Text Options<br />
wpisz nazwe zmiennej tekstu dynamicznego<br />
(rys. 10.9).<br />
6. Zaznacz obydwa bloki tekstowe i wybierz<br />
Insert/Convert to Symbol . Wpisz nazwe<br />
symbolu i wybierz opcje Movie Clip<br />
w typie Behavior . Kliknij OK.<br />
Flash umiesci obydwa bloki tekstowe<br />
w obrebie klipu filmowego, którego klon<br />
pozostanie na scenie.<br />
7. Zaznacz nowo utworzony klon klipu<br />
filmowego, zawierajacy przygotowane<br />
wczesniej bloki tekstowe i otwórz palete akcji.<br />
8. Wybierz Actions/onClipEvent. W bloku<br />
edycji parametrów zaznacz zdarzenie<br />
EnterFrame .<br />
9. Wybierz Actions/set variable. W polu<br />
Variable wpisz nazwe zmiennej tekstu<br />
dynamicznego. W polu Value wprowadz<br />
formule wykorzystujaca zmienna tekstu<br />
pobieranego. Zaznacz pole wyboru<br />
Expression obok pola Value (rys. 10.10).<br />
10. Przetestuj film. Flash wyswietla wartosc<br />
zmiennej tekstu dynamicznego na podstawie<br />
informacji wprowadzonej przez<br />
uzytkownika w bloku tekstu pobieranego<br />
(rys. 10.11). Obliczanie odbywa sie w czasie<br />
rzeczywistym, a wyswietlana informacja jest<br />
uaktualniana po kazdej zmianie zawartosci<br />
bloku tekstu pobieranego.<br />
Wskazówki<br />
• W powyzszym cwiczeniu zmienna tekstu<br />
jest dynamicznego uaktualniana nieustannie,<br />
poniewaz zawiera sie w detektorze<br />
onClipEvent (enterFrame).<br />
Tekst dynamiczny<br />
303
Rozdzial 10.<br />
Wiazanie tekstu<br />
Wiazanie tekstu<br />
Wykorzystanie dynamicznego tekstu do<br />
wiazania lub laczenia pobieranego tekstu<br />
z innymi zmiennymi i lancuchami znakowymi<br />
pozwala na bardziej elastyczna prace<br />
z wyrazeniami, a takze tworzenie<br />
spersonalizowanej interakcji Flasha z odbiorca.<br />
Uzytkownik moze np. zostac najpierw<br />
poproszony o wpisanie swojego imienia do<br />
bloku tekstu pobieranego o nazwie twojeImie.<br />
W polu tekstu dynamicznego mozesz ustawic<br />
jego zmienna tak:<br />
"Czesc, "+twojeImie+", witamy<br />
w programie Flash!"<br />
w efekcie czego odbiorca zobaczy swoje imie<br />
podstawione do komunikatu powitalnego.<br />
W jednym z wczesniejszych cwiczen tworzyles<br />
film Flasha wczytujacy witryne sieciowa<br />
o adresie wprowadzonym do bloku tekstu<br />
pobieranego. Wiazac zmienna myURL<br />
w wyrazeniu:<br />
"http://"+myURL<br />
eliminujesz potrzebe wpisywania przez<br />
uzytkownika schematu protokolu internetowego<br />
przed wlasciwym adresem witryny.<br />
Posluguj sie ta strategia, wraz z innymi<br />
akcjami Flasha, w tworzeniu elastycznych<br />
i edytowalnych funkcji oraz interfejsów.<br />
W ponizszym przykladzie powiazesz bloki<br />
tekstu pobieranego od klienta do<br />
automatycznego skompilowania informacji<br />
we wlasciwym porzadku, a nastepnie<br />
uzyjesz akcji print do wydrukowania<br />
kompletnego rachunku lub zamówienia.<br />
W celu<br />
powiazania bloków tekstowych<br />
na potrzeby wydruku:<br />
1. Wybierz narzedzie tekstowe (Text Tool )<br />
i utwórz kilka bloków tekstu<br />
pobieranego. Za pomoca palety Text<br />
Options przypisz kazdemu z nich<br />
zmienna o unikalnej nazwie (rys. 10.12).<br />
2. Utwórz symbol klipu filmowego<br />
i przejdz do trybu edycji tego symbolu.<br />
3. Przypisz akcje stop do pierwszego<br />
ujecia kluczowego klipu filmowego.<br />
Pozostaw to ujecie kluczowe pustym.<br />
Akcja stop zapobiega odtwarzaniu tego<br />
klipu filmo wego w nieskonczonosc.<br />
Nazwa zmiennej bloku tekstu pobieranego = Name<br />
Nazwa zmiennej bloku tekstu pobieranego = Address<br />
Nazwa zmiennej bloku tekstu pobieranego = City<br />
Nazwa zmiennej bloku tekstu pobieranego = State<br />
Nazwa zmiennej bloku tekstu pobieranego = Zip<br />
Nazwa zmiennej bloku tekstu pobieranego = Widgets<br />
Rys. 10.12. Zdefiniuj szesc bloków tekstu pobieranego z unikalnymi nazwami zmiennych<br />
304
Kontrolowanie tekstu<br />
Dolacz wszystkie<br />
wykorzystane fonty<br />
Akcja stop w ujeciu kluczowym 1.<br />
Rys. 10.13. Blok dynamicznego tekstu jest<br />
umieszczony w ujeciu kluczowym 2., wraz<br />
z grafika gotowa do wydruku<br />
Ujecie<br />
kluczowe 2.<br />
z etykieta #p<br />
Grafika<br />
towarzyszaca<br />
Blok tekstu<br />
dynamicznego<br />
Ujecie<br />
kluczowe 7.<br />
z etykieta #b<br />
Kryjacy<br />
prostokat<br />
4. Nadaj nastepnemu ujeciu kluczowemu<br />
etykiete #p i utwórz w nim duzy blok tekstu<br />
dynamicznego. Na palecie Text Options,<br />
wybierz Multiline z menu rozwijanego,<br />
nastepnie wpisz nazwe zmiennej i zaznacz<br />
opcje Word wrap oraz Embed fonts, zeby<br />
dolaczyc do pliku potrzebne czcionki. Dodaj<br />
tez grafike, która bedzie pojawiac sie na<br />
wydruku (rys. 10.13).<br />
Blok tekstu dynamicznego bedzie<br />
wyswietlal powiazane informacje, a etykieta<br />
#p pozwoli na wydrukowanie oznaczonego<br />
nia ujecia kluczowego.<br />
5. Nadaj innemu ujeciu kluczowemu etykiete<br />
#b i narysuj duzy, kryjacy prostokat, który<br />
bedzie pokrywal obszar zajmowany przez<br />
blok dynamicznego tekstu, umieszczony<br />
w poprzednim ujeciu kluczowym<br />
(rys. 10.14).<br />
Etykieta #b wskazuje, ze to ujecie kluczowe<br />
stanowi obszar drukowany.<br />
6. Wróc do glównej listwy czasowej<br />
i przeciagnij na scene klon klipu filmowego<br />
z trzema utworzonymi wlasnie ujeciami<br />
kluczowymi. Nazwij klon orderform za<br />
posrednictwem pola Name palety Instance.<br />
7. Utwórz symbol przycisku i umiesc jego klon<br />
na scenie.<br />
8. Zaznacz klon przycisku i na palecie akcji<br />
wybierz Actions/set variable.<br />
9. W polu Variable wprowadz sciezke dostepu<br />
do zmiennej tekstu dynamicznego. W polu<br />
Value wpisz kombinacje znaków<br />
i zmiennych tekstu pobieranego w celu<br />
powiazania informacji wprowadzanej przez<br />
uzytkownika w zwarta, drukowalna postac.<br />
Wiazanie tekstu<br />
Rys. 10.14. Kryjacy prostokat wyznacza obszar<br />
drukujacy sie dla wszystkich ujec kluczowych<br />
oznaczonych etykieta #p<br />
305
Rozdzial 10.<br />
Wiazanie tekstu<br />
Uzyj sekwencji opuszczania znaku, np. \r,<br />
do wprowadzenia przejsc do kolejnej linii.<br />
Zaznacz pole wyboru Expression obok pola<br />
Value (rys. 10.15)<br />
10. Na palecie akcji wybierz Actions/print.<br />
W menu rozwijanym Print wybierz<br />
As vectors, a nastepnie zaznacz Target<br />
w polu Location oraz wpisz nazwe klonu<br />
klipu filmowego orderform. Zaznacz pole<br />
wyboru Expression obok pola Location.<br />
W polu Bounding box wybierz opcje<br />
Movie (rys. 10.16).<br />
11. Przetestuj film. Kiedy odbiorca filmu<br />
wprowadzi dane do bloków tekstu<br />
pobieranego i kliknie przycisk, blok<br />
dynamicznego tekstu powiaze zmienne<br />
tekstu pobieranego i wyswietli odpowiednia<br />
informacje w ujeciu kluczowym z etykieta #p.<br />
Potem akcja print spowoduje wydrukowanie<br />
zawartosci tego ujecia (rys. 10.17).<br />
Wskazówki<br />
• Upewnij sie, ze w polu Name na palecie<br />
Instance wpisales nazwe dla klipu<br />
filmowego zawierajacego ujecie<br />
przeznaczone do wydruku. Nawet jesli nie<br />
potrzebujesz podawac sciezki dostepu do<br />
klipu z poziomu utworzonego przycisku,<br />
to nazwa ta musi zostac wprowadzona, jesli<br />
Flash ma wydrukowac zawartosc klipu<br />
filmowego.<br />
• Mozesz ukryc klip filmowy znajdujacy sie<br />
na scenie – a jednoczesnie nie utracic<br />
mozliwosci jego wydrukowania – ustawiajac<br />
wlasciwosc _visible na wartosc falsz<br />
(false). Zmiana tej wlasciwosci nie wplywa<br />
na sposób wydruku zawartosci klipu<br />
filmowego.<br />
• W przypadku drukowania zawartosci<br />
bloków dynamicznego tekstu wazne jest<br />
dolaczanie do pliku wykorzystanych fontów.<br />
Osiaga sie dzieki temu znacznie lepsza<br />
jakosc wydruku.<br />
Rys. 10.15. Sciezka dostepu do bloku tekstu<br />
dynamicznego o nazwie printOutput zawiera<br />
odwolanie do klipu filmowego orderform<br />
(formularz zamówienia). Blok tekstu<br />
dynamicznego wyswietla lancuch znakowy<br />
wiazacy zmienne tekstu pobieranego i podaje<br />
koncowy koszt zamówionych produktów<br />
(widgets), mnozac zmienna przez 5<br />
Rys. 10.16. Wyrazenie print przesyla dane<br />
zawarte w ujeciu z etykieta #p do drukarki<br />
Rys. 10.17. Film Flasha (u góry) udostepnia<br />
bloki tekstu pobieranego, których zawartosc<br />
jest kompilowana w bloku dynamicznego<br />
tekstu, a nastepnie drukowana (u dolu)<br />
306
Kontrolowanie tekstu<br />
Wyswietlanie tekstu HTML<br />
Flash umozliwia wyswietlanie w blokach tekstu<br />
dynamicznego dokumentów w formacie HTML<br />
1.0. Jesli wstawisz tekst do zmiennej bloku<br />
tekstu dynamicznego, wczesniej zaznaczajac<br />
wprowadzany dokument jako HTML, Flash<br />
zinterpretuje odpowiednio znaczniki i zachowa<br />
styl formatowania. Oznacza to tyle, ze mozesz<br />
integrowac dokumenty HTML z filmem Flasha,<br />
zachowujac wszystkie ich style i funkcjonalnosc<br />
punktów wezlowych HREF (czyli hiperlaczy).<br />
Znaczniki HTML<br />
zgodne z blokami tekstowymi Flasha<br />
υ<br />
υ<br />
υ<br />
υ<br />
υ<br />
υ<br />
υ<br />
υ<br />
Znacznik wykorzystywany do<br />
tworzenia hiperlaczy<br />
Styl pogrubiony pisma<br />
Kolor czcionki<br />
Rodzaj czcionki<br />
Rozmiar czcionki<br />
Styl pochyly pisma<br />
Akapit<br />
Styl podkreslony pisma<br />
Duze mozliwosci stwarza kombinacja tekstu<br />
HTML wczytanego do bloków tekstu<br />
dynamicznego za pomoca akcji<br />
loadVariablesNum. W celu uaktualnienia<br />
informacji wyswietlanych w czasie odtwarzania<br />
filmu wystarczy wówczas zmienic jedynie<br />
dokument HTML rezydujacy poza plikiem<br />
Flasha. To bardzo wygodne, gdyz w takiej<br />
sytuacji nie trzeba otwierac pliku Flasha w celu<br />
dokonania okresowych zmian. Wszystkie<br />
niezbedne uaktualnienia moze wykonac<br />
aplikacja serwerowa lub uzytkownik<br />
nieznajacy Flasha.<br />
Wyswietlanie tekstu HTML<br />
307
Rozdzial 10.<br />
Wyswietlanie tekstu HTML<br />
W celu wczytania i wyswietlenia<br />
dokumentu HTML<br />
w bloku dynamicznego tekstu:<br />
1. Uruchom dowolny edytor tekstu lub edytor<br />
HTML i utwórz swój dokument HTML. Na<br />
samym poczatku tekstu HTML wprowadz<br />
nazwe zmiennej i operator przypisania (znak<br />
równosci, =). Zapisz gotowy plik tekstowy<br />
(rys. 10.18).<br />
2. We Flashu – zaznacz pierwsze ujecie<br />
kluczowe na glównej listwie czasowej<br />
i otwórz palete akcji.<br />
3. Wybierz Actions/loadVariables. W polu<br />
URL wpisz nazwe utworzonego wczesniej<br />
dokumentu HTML. Pozostaw biezace<br />
ustawienie opcji Location (Level, liczba 0)<br />
(rys. 10.19).<br />
Flash wczyta plik tekstowy zawierajacy<br />
zmienna.<br />
4. Wybierz narzedzie tekstowe (Text Tool )<br />
i narysuj blok tekstowy o wielkosci<br />
zblizonej do rozmiarów sceny.<br />
5. Na palecie Text Options wybierz opcje<br />
Dynamic Text, Multiline i zaznacz pola<br />
HTML oraz Word wrap. Nadaj blokowi<br />
tekstowemu nazwe zmiennej (rys. 10.20).<br />
6. Utwórz symbol przycisku i umiesc jego klon<br />
na scenie. Zaznacz przycisk i otwórz palete<br />
akcji.<br />
7. Wybierz Actions/set variable. W polu<br />
Variable wpisz nazwe zmiennej tekstu<br />
dynamicznego. W polu Value wpisz nazwe<br />
zmiennej wprowadzonej w pliku tekstowym<br />
(rys. 10.21).<br />
Rys. 10.18. Tekst HTML zostal przypisany do<br />
zmiennej o nazwie HTMLpage i zapisany<br />
w oddzielnym dokumencie<br />
Rys. 10.19. Ta akcja kontrolujaca ujecia<br />
wczytuje plik variables.txt, zawierajacy<br />
zmienna przechowujaca tekst HTML<br />
Rys. 10.20. Nazwij blok tekstu dynamicznego<br />
displayMyPage<br />
Rys. 10.21. Zmienna tekstu dynamicznego<br />
o nazwie displayMyPage wyswietla zawartosc<br />
zmiennej HTMLpage<br />
308
Kontrolowanie tekstu<br />
Blok<br />
dynamicznego<br />
tekstu<br />
displayMyPage<br />
Rys. 10.22. Blok tekstu dynamicznego wyswietla<br />
teks w formacie HTML<br />
8. Wyeksportuj plik SWF do tej samej<br />
lokalizacji, w której znajduje sie<br />
przygotowany na poczatku plik tekstowy.<br />
Odtwórz plik SWF za pomoca przegladarki<br />
lub odtwarzacza Flasha.<br />
Kiedy uzytkownik kliknie przycisk, Flash<br />
podstawi zmienna tekstu dynamicznego do<br />
zewnetrznej zmiennej w pliku tekstowym,<br />
przechowujacej tekst w formacie HTML.<br />
W bloku dynamicznego tekstu wyswietlane<br />
beda informacje z zachowaniem stylu<br />
i formatu ustalonych za pomoca znaczników<br />
(rys. 10.22).<br />
Wskazówki<br />
• Jako ze tylko niektóre sposród znaczników<br />
HTML sa czytelne dla bloków<br />
dynamicznego tekstu, powinienes dokladnie<br />
sprawdzac swoje dokumenty pod katem<br />
poprawnosci wyswietlania. Jesli Flash nie<br />
rozpozna znacznika, to zostanie on<br />
zignorowany.<br />
• Znacznik w srodowiskach przegladarek<br />
pojawia sie normalnie jako podkreslony<br />
i w innym kolorze, natomiast we Flashu<br />
hiperlacze jest sygnalizo wane jedynie przez<br />
wskaznik myszy przyjmujacy postac<br />
„raczki”. Mozna jednak recznie ustawic<br />
kolor i styl podkreslony dla hiperlaczy,<br />
dodajac znaczniki (styl podkreslony)<br />
oraz
Animowanie dynamicznego tekstu<br />
Rozdzial 10.<br />
Animowanie<br />
dynamicznego tekstu<br />
Jesli przeksztalcisz bloki tekstu dynamicznego<br />
w symbole, to bedziesz mógl je animowac, tak<br />
jak robi sie to z wszystkimi innymi klonami<br />
symboli. Dzieki temu mozliwe staje sie<br />
tworzenie tytulów i bannerów reklamowych,<br />
które nie tylko dynamicznie zmieniaja<br />
zawartosc, ale takze przesuwaja sie po ekranie,<br />
obracaja i zmieniaja swoje rozmiary. Wyobraz<br />
sobie na przyklad sterowiec z przyczepiona do<br />
jego boku tablica wyników, podrózujacy wzdluz<br />
sceny. Jesli wykorzystasz owa tablice jako blok<br />
dynamicznego tekstu, bedziesz mógl<br />
uaktualniac wynik lub wyswietlac komunikaty<br />
za kazdym nastepnym przelotem sterowca.<br />
W podobny sposób mozna przygotowac monitor<br />
notowan gieldowych, z cenami akcji<br />
przesuwajacymi sie wzdluz ekranu. Jeszcze inny<br />
przyklad to gra, w której status gracza jest<br />
wyswietlany obok symbolizujacej go ikony,<br />
nawet jesli przemieszcza sie ona po scenie.<br />
W celu utworzenia przemieszczajacego sie<br />
bloku dynamicznego tekstu:<br />
1. Wybierz narzedzie tekstowe (Text Tool )<br />
i utwórz blok tekstowy.<br />
2. Na palecie Text Options wybierz<br />
z kolejnych menu rozwijanych opcje<br />
Dynamic Text oraz Single Line. Wprowadz<br />
nazwe zmiennej (Variable) i osadz<br />
wszystkie potrzebne fonty (rys. 10.23).<br />
3. Z glównego paska menu wybierz<br />
Insert/Convert to Symbol . Nazwij swój<br />
symbol i w oknie dialogowym, które sie<br />
pojawi, wybierz Graphic w typie Behavior .<br />
Kliknij OK.<br />
Flash umiesci blok dynamicznego tekstu<br />
wewnatrz symbolu graficznego i wprowadzi<br />
jego klon na scene.<br />
Rys. 10.23. Zmienna dynamicznego tekstu<br />
nazwij display i osadz w pliku wszystkie fonty<br />
310
Kontrolowanie tekstu<br />
Klon symbolu graficznego zawierajacy<br />
blok dynamicznego tekstu<br />
Maska w warstwie 5.<br />
Grafika tla<br />
Rys. 10.24. Do listwy czasowej klipu filmowego<br />
tablicy wyników (blimp scoreboard) dolacz<br />
animowany klon symbolu graficznego,<br />
zawierajacego dynamiczny tekst. Grafika bedzie<br />
przemieszczac sie po scenie wraz z maska tablicy<br />
wyników<br />
Rys. 10.25. Nazwij blok tekstu pobieranego<br />
message (komunikat)<br />
4. Zaznacz klon symbolu graficznego i wybierz<br />
Insert/Convert to Symbol . Nazwij symbol<br />
i w oknie dialogowym, które sie pojawi,<br />
wybierz Movie Clip w typie Behavior.<br />
Kliknij OK.<br />
Flash umiesci symbol graficzny wewnatrz<br />
symbolu klipu filmowego i wprowadzi jego<br />
klon na scene.<br />
5. Za pomoca pola Name palety Instance<br />
nadaj nazwe dla klonu klipu filmowego.<br />
6. Przejdz do trybu edycji symbolu twojego<br />
klipu filmowego. Klip ten zawiera teraz klon<br />
symbolu graficznego, w którym z kolei<br />
umieszczony jest blok dynamicznego tekstu.<br />
7. Utwórz sekwencje animacji ruchu klonu<br />
symbolu graficznego przemieszczajacego sie<br />
po scenie (rys. 10.24).<br />
8. Wróc do glównej listwy czasowej. Wybierz<br />
narzedzie tekstowe (Text Tool) i utwórz<br />
kolejny blok tekstowy ponizej klonu klipu<br />
filmowego.<br />
9. Na palecie Text Options wybierz opcje<br />
Input Text i Single Line. Wprowadz nazwe<br />
zmiennej (Variable) dla tego bloku<br />
tekstowego (rys. 10.25).<br />
10. Zaznacz klon klipu filmowego i otwórz<br />
palete akcji. Wybierz Actions/onClipEvent,<br />
a nastepnie zdarzenie EnterFrame.<br />
11. Wybierz Actions/set variable. W polu<br />
Variable wprowadz sciezke dostepu do<br />
zmiennej tekstu dynamicznego. W polu<br />
Value wprowadz sciezke dostepu do<br />
zmiennej tekstu pobieranego. Zaznacz pole<br />
wyboru Expression obok pola Value<br />
(rys. 10.26).<br />
Blok dynamicznego tekstu bedzie teraz<br />
nieustannie uaktualniany stosownie do<br />
zawartosci bloku tekstu pobieranego.<br />
Animowanie dynamicznego tekstu<br />
Rys. 10.26. Przypisz zmienna dynamicznego<br />
tekstu o nazwie display do zmiennej tekstu<br />
pobieranego, nazwanej message<br />
311
Rozdzial 10.<br />
Animowanie dynamicznego tekstu<br />
12. Przetestuj film.<br />
Informacja wprowadzona przez uzytkownika<br />
do bloku tekstu pobieranego zostanie<br />
przypisana do bloku tekstu dynamicznego,<br />
zawierajacego sie w animacji klipu<br />
filmowego. Uaktualniony tekst bedzie<br />
przesuwal sie po scenie (rys. 10.27).<br />
Wskazówki<br />
• Umiesc blok dynamicznego tekstu wewnatrz<br />
klipu filmowego i kontroluj jego wyglad za<br />
pomoca ActionScript. Uzyj akcji<br />
setProperty do modyfikowania<br />
wlasciwosci klipu filmowego – np. rotacji,<br />
przezroczystosci, umiejscowienia –<br />
a polozenie i wyglad bloku tekstowego beda<br />
sie zmieniac odpowiednio do wybranych<br />
ustawien.<br />
• Pamietaj, zeby dolaczac wszystkie fonty<br />
w przypadku dynamicznego tekstu, który<br />
ma byc animowany, lub który jest czescia<br />
maskowanej warstwy. Jesli tego nie zrobisz,<br />
blok tekstowy nie bedzie animowany we<br />
wlasciwy sposób albo zostanie przykryty<br />
maska.<br />
Tekst dynamiczny<br />
Tekst pobierany<br />
Rys. 10.27. Blok dynamicznego tekstu<br />
(u góry) wyswietla animacje dowolnego<br />
tekstu wprowadzonego przez uzytkownika<br />
do bloku tekstu pobieranego (u dolu)<br />
312
Kontrolowanie tekstu<br />
Widoczny fragment tekstu w bloku<br />
Scroll = 1<br />
Rys. 10.28. Wlasciwosc scroll okresla pierwsza<br />
widoczna linie tekstu<br />
Kontrolowanie przewijania bloku<br />
tekstowego<br />
Jesli informacja wprowadzana do bloku tekstu<br />
dynamicznego lub pobieranego przekracza<br />
zdefiniowane rozmiary bloku, Flash zaczyna<br />
przewijac tekst, dzieki czemu aktualnie<br />
edytowany fragment moze byc widoczny. Linie<br />
tekstu, które nie mieszcza w wyznaczonym<br />
obszarze, moga byc ukryte przed wzrokiem<br />
odbiorcy, ale mimo to pozostaja dla niego<br />
dostepne – wystarczy kliknac wewnatrz bloku<br />
tekstowego i przeniesc kursor w góre lub w dól.<br />
Mozna tez dynamiczne wyswietlac rózne linie<br />
tekstu, ukryte lub nie, kontrolujac pozycje<br />
pierwszej widocznej linii tekstu w bloku<br />
tekstowym. Umozliwiajaca to wlasciwosc nosi<br />
nazwe scroll (przewijanie). Górna linia<br />
przyjmuje wartosc 0 i zmienia sie wraz<br />
z przewijaniem nowych linii tekstu w góre<br />
lub w dól (rys. 10.28).<br />
Flash pozwala ci na odczytanie wartosci<br />
wlasciwosci scroll, dzieki czemu wiesz, na<br />
która dokladnie linie tekstu aktualnie patrzy<br />
odbiorca filmu. Mozliwe jest równiez<br />
modyfikowanie wartosci wlasciwosci scroll<br />
i tym samym wymuszanie na odbiorcy<br />
obejrzenia okreslonej linii tekstu. Zwykle<br />
tworzy sie interfejs w ten sposób, zeby<br />
uzytkownik mógl sam decydowac o przewijaniu<br />
tekstu, podobnie jak kontroluje paski<br />
przewijania w przegladarce czy dowolnym<br />
innym oknie na ekranie monitora. W ponizszym<br />
cwiczeniu utworzysz taki wlasnie interfejs.<br />
Przewijanie bloku tekstowego<br />
313
Rozdzial 10.<br />
Przewijanie bloku tekstowego<br />
W celu utworzenia<br />
przewijanego bloku tekstu<br />
pobieranego:<br />
1. Wybierz narzedzie tekstowe (Text Tool )<br />
i przeciagnij nim po scenie, tworzac w ten<br />
sposób blok tekstowy.<br />
2. Na palecie Text Options, zaznacz opcje<br />
Input Text oraz Multiline w kolejnych<br />
menu rozwijanych. Zaznacz pola wyboru<br />
Border/Bg i Word wrap. W polu Variable<br />
wpisz nazwe bloku tekstu pobieranego<br />
(rys. 10.29).<br />
3. Utwórz symbol przycisku w ksztalcie<br />
strzalki zwróconej w góre. Umiesc klon<br />
przycisku na scenie.<br />
4. Umiesc na scenie kolejny klon przycisku<br />
i wybierz Modify/Transform/Flip Vertical,<br />
dzieki czemu druga strzalka skierowana<br />
bedzie w dól. Wyrównaj obydwa przyciski<br />
w pionie, ustawiajac je obok bloku tekstu<br />
pobieranego (rys. 10.30).<br />
5. Zaznacz przycisk strzalki w góre i otwórz<br />
palete akcji. Wybierz Actions/on. Zaznacz<br />
zdarzenie Press.<br />
6. Wybierz Actions/set variable. W polu<br />
Variable wpisz nazwe zmiennej pressing<br />
(naciskanie). W polu Value wpisz wartosc<br />
logiczna true (prawda). Zaznacz pole<br />
wyboru Expression obok pola Value.<br />
7. Ponownie wybierz Actions/set variable.<br />
W polu Variable wpisz nazwe zmiennej<br />
movement (ruch). W polu Value wpisz<br />
cyfre –1 i zaznacz pole wyboru Expression<br />
(rys. 10.31).<br />
Po nacisnieciu klawisza myszy zmienna<br />
pressing przyjmie wartosc true, a zmienna<br />
movement wartosc –1.<br />
8. Wybierz Actions/on. Zaznacz zdarzenie<br />
Release.<br />
Rys. 10.29. Nazwij blok tekstu pobieranego<br />
scrollwindow (okno przewijane)<br />
Blok tekstu pobieranego<br />
Rys. 10.30. Umiesc dwa przyciski obok bloku<br />
tekstu pobieranego<br />
Rys. 10.31. Klikniecie przycisku strzalki do<br />
góry przypisuje zmiennej pressing wartosc<br />
true i zmiennej movement wartosc –1<br />
Klon pierwszego<br />
przycisku<br />
Klon drugiego<br />
przycisku<br />
314
Kontrolowanie tekstu<br />
Rys. 10.32. Zwolnienie przycisku strzalki w góre<br />
przypisuje zmiennej pressing wartosc false<br />
Rys. 10.33. Kompletny skrypt dla przycisku<br />
strzalki w dól, tak jak jest widoczny w oknie<br />
skryptu palety akcji<br />
Rys. 10.34. Akcje przypisane do klipu filmowego<br />
dodaja wartosc zmiennej movement do<br />
wlasciwosci scroll bloku tekstowego<br />
scrollwindow, jesli zmienna pressing ma<br />
wartosc true<br />
Rys. 10.35. Przyciski po prawej zwiekszaja lub<br />
zmniejszaja wartosc wlasciwosci scroll bloku<br />
tekstu pobieranego<br />
9. Wybierz Actions/set variable. W polu<br />
Variable wpisz nazwe zmiennej pressing.<br />
W polu Value wp isz wartosc logiczna<br />
false (falsz) i zaznacz pole wyboru<br />
Expression.<br />
Po zwolnieniu klawisza myszy zmienna<br />
pressing przyjmie wartosc false<br />
(rys. 10.32).<br />
10. Zaznacz przycisk strzalki w dól i wprowadz<br />
te same wyrazenia w oknie skryptu palety<br />
akcji, z wyjatkiem p rzypisania do zmiennej<br />
movement wartosci 1 w momencie<br />
nacisniecia klawisza myszy (rys. 10.33).<br />
11. Zaznacz obydwa przyciski i wybierz<br />
Insert/Convert to Symbol . Wprowadz<br />
nazwe symbolu i wybierz opcje Movie Clip<br />
w typie Behavior. Kliknij OK.<br />
Utworzone klawisze strzalek zostana<br />
wprowadzone do symbolu klipu filmowego.<br />
Klon klipu pozostanie na scenie.<br />
12. Zaznacz klon klipu filmowego<br />
zawierajacego dwa przyciski i na palecie<br />
akcji wybierz Actions/onClipEvent.<br />
Wybierz zdarzenie EnterFrame.<br />
13. Wybierz Actions/if. W polu Condition<br />
wpisz:<br />
this.pressing == true<br />
14. Wybierz Actions/set variable. W polu<br />
Variable wprowadz pelna sciezke dostepu<br />
do zmiennej tekstu pobieranego, a nastepnie<br />
kropke i wlasciwosc scroll. W polu Value<br />
wprowadz pelna sciezke dostepu do<br />
zmiennej tekstu pobieranego, nastepnie<br />
kropke i wlasciwosc scroll, po czym dodaj<br />
wartosc zmiennej this.movement.<br />
Zaznacz pole Expression (rys. 10.34).<br />
Flash sprawdzi, czy kliknieto którys<br />
z przycisków. Jesli tak, program doda<br />
wartosc zmiennej movement do biezacej<br />
wartosci scroll. W przypadku wcisniecia<br />
górnej strzalki wartosc scroll zmniejszy<br />
sie o 1. Jesli to dolna strzalka zostala<br />
wcisnieta, wartosc scroll zwiekszy sie o 1<br />
(rys. 10.35).<br />
Przewijanie bloku tekstowego<br />
315
Rozdzial 10.<br />
Przewijanie bloku tekstowego<br />
Podczas gdy wlasciwosc scroll okresla<br />
pierwsza widoczna linie w bloku tekstowym,<br />
wlasciwosc maxscroll definiuje maksymalna<br />
dozwolona wartosc wlasciwosci scroll w tym<br />
bloku tekstowym. Oznacza ona linie u szczytu<br />
bloku w momencie, kiedy widoczna jest ostatnia<br />
w ogóle linia tekstu (rys. 10.36). Nie mozna<br />
zmieniac wartosci maxscroll, jako ze<br />
definiuje ja dlugosc i rozmiar tekstu w bloku,<br />
ale mozliwe jest odczytanie jej wartosci.<br />
Przypisz wartosc maxscroll do wlasciwosci<br />
scroll, a bedziesz mógl automatycznie<br />
przewinac tekst do dolnej czesci bloku.<br />
Ewentualnie oblicz wartosc scroll w proporcji<br />
do maxscroll i zbuduj przeciagany pasek<br />
przewijania, odzwierciedlajacy i kontrolujacy<br />
pozycje tekstu w obrebie bloku tekstowego.<br />
W celu przewiniecia tekstu<br />
do konca bloku tekstowego:<br />
1. Kontynuujac poprzednie cwiczenie, utwórz<br />
nowy symbol przycisku i umiesc jego klon<br />
na scenie.<br />
2. Zaznacz przycisk i otwórz palete akcji.<br />
wybierz Actions/set variable.<br />
3. W polu Variable wpisz nazwe zmiennej<br />
tekstu pobieranego, kropke i wlasciwosc<br />
scroll. W polu Value wpisz nazwe<br />
zmiennej tekstu pobieranego, kropke<br />
i wlasciwosc maxscroll. Zaznacz pole<br />
wyboru Expression obok pola Value<br />
(rys. 10.37).<br />
Po kliknieciu przycisku biezaca wartosc<br />
maxscroll zostanie przypisana do<br />
wlasciwosci scroll bloku tekstu<br />
pobieranego. Wówczas tekst zostanie<br />
automatycznie przewiniety, dzieki czemu<br />
widoczna stanie sie ostatnia linia.<br />
Widoczna czesc bloku tekstowego<br />
Wlasciwosc<br />
maxscroll<br />
Rys. 10.36. W tym przykladzie maxscroll = 4<br />
Rys. 10.37. Wartosc maxscroll jest<br />
przypisywana do wlasciwosci scroll bloku<br />
tekstowego scrollwindow<br />
316
Kontrolowanie tekstu<br />
Manipulowanie<br />
lancuchami znakowymi<br />
Definiujac blok tekstowy jako blok tekstu<br />
pobieranego, dajesz odbiorcy mozliwosc<br />
wprowadzania i edytowania informacji. Wiesz<br />
juz, jak taka informacja moze zostac uzyta<br />
w wyrazeniach z innymi akcjami, czy tez<br />
dowiazana i wyswietlana w blokach<br />
dynamicznego tekstu. Jednak, czesto konieczne<br />
jest przeanalizowanie tekstu, wprowadzonego<br />
przez uzytkownika, przed wykorzystaniem go.<br />
Byc moze trzeba bedzie usunac pewne slowa<br />
lub zlokalizowac okreslony znak czy tez<br />
sekwencje znaków. Na przyklad, jesli<br />
wymagasz od odbiorcy wprowadzenia adresu<br />
e-mail, mozesz sprawdzic, czy podano adres we<br />
wlasciwej formie, wyszukujac symbol @.<br />
Mozna tez w podobny sposób sprawdzic numer<br />
telefonu klienta, okreslic numer kierunkowy na<br />
podstawie trzech pierwszych cyfr<br />
i spersonalizowac zasoby odbiorcy lub liste<br />
nowosci, podajac lokalne zainteresowania.<br />
Ten rodzaj sprawdzania, manipulowania<br />
i kontrolowania informacji wprowadzonej do<br />
bloku tekstu pobieranego odbywa sie dzieki<br />
kombinacji obiektu selekcji (Selection)<br />
i obiektu lancucha znakowego (String). Obiekt<br />
selekcji pozwala okreslic, który blok tekstowy<br />
jest aktualnie zaznaczony, a takze kontrolowac<br />
pozycje kursora w obrebie tego bloku. Obiekt<br />
lancucha znakowego umozliwia odczytywanie<br />
i zmienianie wlasciwosci informacji<br />
wprowadzonych do bloku tekstu pobieranego.<br />
Manipulowanie lancuchami znakowymi<br />
317
Rozdzial 10.<br />
Obiekt selekcji<br />
Obiekt selekcji odpowiada za kontrole<br />
zaznaczenia tekstu w bloku tekstu pobieranego.<br />
W odróznieniu od wiekszosci innych obiektów,<br />
obiekt selekcji nie potrzebuje funkcji<br />
konstruktora do przygotowania klonu, zanim<br />
bedziesz mógl go uzyc. Wynika to z faktu, ze<br />
w filmie Flasha moze istniec naraz tylko jedna<br />
pozycja kursora lub jedno zaznaczenie<br />
(co oznacza, ze w danej chwili uzytkownik<br />
moze wpisywac lub selekcjonowac tekst tylko<br />
w jednym bloku tekstowym). Tak wiec obiekt<br />
selekcji bedzie zawsze odnosil sie do tej jednej<br />
pozycji kursora lub zaznaczenia w bloku<br />
tekstowym tekstu pobieranego lub<br />
dynamicznego.<br />
Obiekt selekcji<br />
Metody obiektu selekcji oddzialuja na dwie<br />
wlasciwosci bloku tekstowego: okreslenie<br />
w lancuchu tekstowym miejsca, w którym<br />
znajduje sie kursor, oraz, ustalenie aktualnie<br />
aktywnego – inaczej zogniskowanego – bloku<br />
tekstowego. Metody obiektu selekcji<br />
wymieniono w tabeli 10.1.<br />
Tabela 10.1. Metody obiektu selekcji<br />
Metoda<br />
getBeginIndex()<br />
getEndIndex()<br />
getCaretIndex()<br />
setSelection(beginIndex,<br />
endIndex)<br />
getFocus()<br />
Opis<br />
Odczytuje indeks poczatku selekcji.<br />
Odczytuje indeks konca selekcji.<br />
Odczytuje indeks pozycji kursora.<br />
Ustawia selekcje wedlug okreslonych indeksów poczatku oraz konca.<br />
Odczytuje nazwe zmiennej aktywnego w danym momencie bloku<br />
tekstowego.<br />
setFocus(variableName) Ustawia ogniskowanie bloku tekstowego o podanej nazwie zmiennej,<br />
dzieki czemu mozna odczytywac informacje o tekscie zawartym<br />
w danym bloku tekstowym, jesli istnieje kilka bloków tekstowych.<br />
318
Kontrolowanie tekstu<br />
Rys. 10.38. Nazwij blok tekstu pobieranego<br />
mySelection (moje zaznaczenie)<br />
Rys. 10.39. Nazwij blok tekstu dynamicznego<br />
myIndex (mój indeks)<br />
Kontrolowanie selekcji wewnatrz<br />
bloków tekstowych<br />
Istnieje mozliwosc kontrolowania selekcji lub<br />
pozycji kursora wewnatrz edytowalnych bloków<br />
tekstowych. Pozwala to kierowac uwage<br />
odbiorcy na okreslone znaki lub wprowadzane<br />
przez niego slowa, byc moze w celu wskazania<br />
ewentualnych bledów w pisowni. Poza tym<br />
mozesz sledzic polozenie kursora, podobnie jak<br />
dzieki wlasciwosciom _xmouse i _ymouse<br />
okresla sie lokalizacje wskaznika myszy<br />
uzytkownika.<br />
Pozycja kazdego znaku w lancuchu znakowym<br />
jest numerowana i uzywana w postaci<br />
wskaznika na potrzeby metod obiektu selekcji.<br />
Pierwszy znak otrzymuje indeks 0, nastepny 1,<br />
itd. Jesli kursor nie znajduje sie wewnatrz bloku<br />
tekstowego w momencie, kiedy Flash odczytuje<br />
indeks zaznaczenia, zwracana jest wartosc –1.<br />
W celu<br />
zidentyfikowania pozycji kursora<br />
w bloku tekstowym:<br />
1. Wybierz narzedzie tekstowe (Text Tool )<br />
i przeciagnij nim po scenie w celu<br />
utworzenia bloku tekstowego. Na palecie<br />
Text Options, wybierz Input Text oraz<br />
Multiline z kolejnych menu rozwijanych.<br />
Przydziel dla bloku tekstu pobieranego<br />
nazwe zmiennej (Variable). Zaznacz pola<br />
Border/Bg i Word wrap (rys. 10.38).<br />
2. Wybierz narzedzie tekstowe (Text Tool)<br />
i przeciagnij nim po scenie w celu utworzenia<br />
kolejnego bloku tekstowego. Na palecie Text<br />
Options, wybierz Dynamic Text oraz<br />
Multiline z kolejnych menu rozwijanych.<br />
Przydziel dla bloku dynamicznego tekstu<br />
nazwe zmiennej (Variable). Zaznacz pole<br />
Border/Bg (rys. 10.39).<br />
3. Zaznacz obydwa bloki tekstowe i wybierz<br />
Insert/Convert to Symbol . Nazwij symbol<br />
i wybierz opcje Movie Clip w typie<br />
Behavior. Kliknij OK.<br />
Kontrolowanie selekcji<br />
319
Rozdzial 10.<br />
Kontrolowanie selekcji<br />
Obydwa twoje bloki tekstowe zostana<br />
umieszczone wewnatrz symbolu klipu<br />
filmowego, którego klon pozostanie obecny<br />
na scenie.<br />
4. Zaznacz klon klipu filmowego i otwórz<br />
palete akcji. Wybierz Actions/onClipEvent.<br />
Zaznacz zdarzenie enterFrame.<br />
5. Wybierz Actions/set variable. Umiesc<br />
kursor w polu Value i wybierz Objects/<br />
Selection/getCaretIndex (rys. 10.40).<br />
W polu Value pojawi sie metoda<br />
getCaretIndex. Zaznacz pole Expression.<br />
6. Przetestuj film.<br />
Na poczatku blok dynamicznego tekstu<br />
wyswietla wartosc –1, z uwagi na to, iz blok<br />
tekstu pobieranego nie jest aktualnie<br />
zogniskowany. Kiedy odbiorca rozpocznie<br />
wpisywanie tekstu w bloku tekstu<br />
pobieranego, Flash uaktualni blok<br />
dynamicznego tekstu, wyswietlajac pozycje<br />
kursora (rys. 10.41).<br />
W celu zmiany selekcji<br />
w obrebie bloku tekstowego:<br />
1. Kontynuujac poprzednie cwiczenie, zaznacz<br />
klon klipu filmowego i otwórz palete akcji.<br />
2. Dodaj wyrazenie za akcja set variable,<br />
wybierajac Actions/if.<br />
3. W polu Condition wpisz:<br />
Key.isDown(Key.ENTER)<br />
Flash sprawdzi, czy nacisniety zostal<br />
klawisz Enter.<br />
4. Wybierz Actions/evaluate .<br />
Rys. 10.40. Flash przypisuje pozycje kursora<br />
(caret, karetke) zmiennej myIndex<br />
Rys. 10.41. Biezacy indeks kursora to 12.<br />
Pierwsza litera „T” ma indeks 0. Odstep<br />
pomiedzy wyrazami „position” i „of” ma<br />
indeks 12<br />
320
Kontrolowanie tekstu<br />
Rys. 10.42. Powyzsza metoda setSelection<br />
zaznacza znaki wprowadzone miedzy<br />
parametrami beginIndex i endIndex<br />
Rys. 10.43. Powyzsza metoda setSelection<br />
zaznacza znaki wprowadzone miedzy pierwszym<br />
znakiem i biezaca pozycja kursora<br />
Rys. 10.44. Uzytkownik wpisuje tekst do bloku<br />
tekstu pobieranego (z lewej). Po wcisnieciu<br />
klawisza Enter, Flash automatycznie zaznacza<br />
tekst (z prawej). Indeks u dolu zmienia wartosc<br />
z 30 na 31, poniewaz uzycie Entera liczy sie jako<br />
kolejna pozycja indeksu<br />
5. Umiesc kursor w polu Expression i wybierz<br />
Objects/Selection/setSelection.<br />
W polu Expression pojawi sie metoda<br />
setSelection(beginIndex,<br />
endIndex)(rys. 10.42).<br />
6. W miejsce parametru beginIndex wpisz 0.<br />
Zmien parametr endIndex, wybierajac<br />
Objects/Selection/getCaretIndex<br />
(rys. 10.43).<br />
7. Przetestuj film.<br />
Kiedy uzytkownik zacznie wpisywac tekst<br />
do bloku tekstu pobieranego, blok<br />
dynamicznego tekstu wyswietli indeks<br />
kursora. Po wcisnieciu klawisza Enter<br />
wywolywana jest metoda setSelection.<br />
Metoda ta powoduje zaznaczenie znaków<br />
wpisanych pomiedzy indeksem 0<br />
(pierwszym znakiem) i biezaca pozycja<br />
kursora, czyli zostaje zaznaczone wszystko,<br />
co uzytkownik wpisal (rys. 10.44).<br />
Kontrolowanie selekcji<br />
321
Rozdzial 10.<br />
Ogniskowanie bloków tekstowych<br />
Ogniskowanie<br />
bloków tekstowych<br />
Jesli masz na scenie wiele bloków tekstowych,<br />
musisz miec mozliwosc kontrolowania, który<br />
z nich jest w danym momencie aktywny lub<br />
zogniskowany, zanim bedziesz mógl odczytac<br />
albo przypisac pozycje kursora czy tez selekcji.<br />
Do tego celu sluza metody getFocus<br />
i setFocus obiektu selekcji.<br />
Metoda getFocus zwraca lancuch znakowy<br />
zawierajacy bezwzgledna sciezke dostepu do<br />
bloku tekstowego, korzystajac z instrukcji<br />
_level0. Przykladowo, jesli aktualn ie<br />
zaznaczony blok tekstowy o nazwie twojeImie<br />
znajduje sie w glównej listwie czasowej, a ty<br />
wywolasz metode getFocus, zostanie<br />
zwrócona nastepujaca wartosc:<br />
"_level0.twojeImie"<br />
Musisz zapamietac, ze zwracana wartosc jest<br />
lancuchem znakowym, a uzyto instrukcji<br />
_level0. Jesli przyrównasz wartosc getFocus<br />
do sciezki, uzywajac _root lub this,<br />
ewentualnie zapomnisz o znaku cudzyslowu,<br />
Flash nie rozpozna sciezki. Jesli na scenie nie<br />
ma aktualnie zogniskowanego bloku<br />
tekstowego, metoda getFocus zwraca wartosc<br />
null (nic).<br />
Podobnie jak getFocus, równiez metoda<br />
setFocus wymaga uzycia lancucha znakowego<br />
i bezwzglednej sciezki dostepu do bloku<br />
tekstowego. Mozesz jednak w tym wypadku<br />
korzystac z instrukcji _level0 lub _root.<br />
W kolejnym cwiczeniu utworzysz kilka bloków<br />
tekstu pobieranego. W zaleznosci od tego, który<br />
blok tekstowy wybierze uzytkownik, blok<br />
dynamicznego tekstu bedzie wyswietlal<br />
odpowiedni komunikat.<br />
322
Kontrolowanie tekstu<br />
Rys. 10.45. Utwórz trzy bloki tekstu pobieranego<br />
(pokazano tu wyglad palety Text Options dla<br />
srodkowego bloku) (u góry) i jeden blok<br />
dynamicznego tekstu (u dolu)<br />
Rys. 10.46. Jesli metoda getFocus zwraca<br />
wartosc null, to znaczy, ze zaden z bloków<br />
tekstowych nie zostal zogniskowany<br />
W celu zogniskowania<br />
bloku tekstowego:<br />
1. Wybierz narzedzie tekstowe (Text Tool )<br />
i przeciagnij nim po scenie w celu<br />
utworzenia bloku tekstowego. Na palecie<br />
Text Options, wybierz Input Text oraz<br />
Single Line z kolejnych menu rozwijanych.<br />
Przydziel dla bloku tekstu pobieranego<br />
nazwe zmiennej (Variable).<br />
2. Ponownie wybierz narzedzie tekstowe<br />
(Text Tool) i utwórz kolejne dwa bloki<br />
tekstu pobieranego. Przydziel kazdemu<br />
z nich unikalna nazwe zmiennej.<br />
3. Wybierz narzedzie tekstowe (Text Tool )<br />
i przeciagnij nim po scenie w celu<br />
utworzenia czwartego bloku tekstowego.<br />
Na palecie Text Options, wybierz Dynamic<br />
Text oraz Multiline z kolejnych menu<br />
rozwijanych. Zaznacz pole Word wrap.<br />
Wprowadz nazwe zmiennej dla bloku<br />
dynamicznego tekstu (rys. 10.45).<br />
4. Zaznacz wszystkie bloki tekstowe i wybierz<br />
Insert/Convert to Symbol . Wpisz nazwe<br />
symbolu i wybierz opcje Movie Clip<br />
w typie Behavior, po czym kliknij OK.<br />
Utworzone bloki tekstowe zostana<br />
umieszczone w symbolu klipu filmowego,<br />
którego klon pozostanie obecny na scenie.<br />
5. Nazwij klip filmowy za pomoca pola Name<br />
palety Instance.<br />
6. Majac zaznaczony klon klipu filmowego,<br />
otwórz palete akcji. Wybierz<br />
Actions/onClipEvent. Zaznacz zdarzenie<br />
enterFrame .<br />
7. Wybierz Actions/if.<br />
8. Majac kursor w polu Condition, wybierz<br />
Objects/Selection/getFocus. W polu<br />
Condition pojawi sie metoda getFocus.<br />
9. Dopisz w polu Condition == null<br />
(rys. 10.46).<br />
Flash sprawdzi, czy uzytkownik nie<br />
zaznaczyl któregos z bloków tekstowych.<br />
Ogniskowanie bloków tekstowych<br />
323
Rozdzial 10.<br />
10. Wybierz Actions/set variable. W polu<br />
Variable wpisz nazwe zmiennej bloku<br />
dynamicznego tekstu. W polu Value wpisz<br />
tresc komunikatu nakazujacego odbiorcy<br />
zaznaczyc blok tekstowy (rys. 10.47).<br />
11. Wybierz Actions/else if. W polu Condition<br />
wybierz metode getFocus i przyrównaj<br />
zwracana przez nia wartosc do sciezki<br />
dostepu do zmiennej pierwszego bloku<br />
tekstu pobieranego (rys. 10.48).<br />
Rys. 10.47. Komunikat wpisany do pola<br />
Value pojawi sie w bloku dynamicznego<br />
tekstu o nazwie display<br />
Ogniskowanie bloków tekstowych<br />
12. Wybierz Actions/set variable. Przypisz<br />
zmiennej dynamicznego tekstu komunikat<br />
zawierajacy instrukcje dla uzytkownika<br />
(rys. 10.49).<br />
13. Dodaj kolejne dwa warunki else if i ustal,<br />
zeby blok dynamicznego tekstu zmienial<br />
swoja zawartosc w momencie spelnienia<br />
kazdego z warunków. Kompletny skrypt<br />
powinien wygladac jak na rys. 10.50.<br />
14. Przetestuj film.<br />
Kiedy uzytkownik oglada film Flasha po raz<br />
pierwszy, zaden z bloków tekstowych nie<br />
jest zogniskowany, ale komunikat<br />
wyswietlany w bloku dynamicznego tekstu<br />
mówi mu, co ma zrobic. Jesli odbiorca<br />
zaznaczy blok tekstowy, Flash natychmiast<br />
rozpozna, o który blok chodzi (rys. 10.51).<br />
Rys. 10.48. Flash sprawdza, czy blok tekstu<br />
pobieranego o nazwie name, umieszczony<br />
w klipie filmowym myMovieClip, jest<br />
aktualnie zaznaczony<br />
Zaden z bloków tekstu<br />
pobieranego nie jest<br />
aktualnie zogniskowany<br />
Blok dynamicznego tekstu<br />
Zogniskowany jest<br />
blok tekstowy name<br />
Blok dynamicznego tekstu<br />
Rys. 10.51. Dla kazdego zogniskowanego bloku<br />
tekstowego pojawia sie inny komunikat. Powyzszy<br />
przyklad ilustruje sytuacje, kiedy zaden z bloków<br />
nie jest aktywny (u góry) oraz kiedy<br />
zogniskowano górny blok tekstowy (u dolu)<br />
Rys. 10.49. Komunikat wpisany w polu Value<br />
pojawia sie w bloku dynamicznego tekstu<br />
o nazwie display<br />
Rys. 10.50. Kompletny skrypt zawiera<br />
wayrazenia warunkowe dla kazdego<br />
zogniskowanego bloku tekstowego<br />
324
Kontrolowanie tekstu<br />
Rys.10.52. Ponizej pierwszego warunku else if<br />
wstaw warunek sprawdzajacy, czy wcisnieto<br />
klawisz Enter<br />
Rys. 10.53. Ta metoda setFocus ogniskuje blok<br />
tekstu pobieranego o nazwie address (adres),<br />
rezydujacy w klipie filmowym myMovieClip<br />
Rys. 10.54. Kompletny skrypt zawiera warunki<br />
niezbedne do zogniskowania nastepnego bloku<br />
tekstu pobieranego po wcisnieciu klawisza Enter<br />
W celu wybrania aktywnego<br />
bloku tekstowego:<br />
1. Kontynuujac poprzednie cwiczenie, zaznacz<br />
klon klipu filmowego i otwórz palete akcji.<br />
2. Zaznacz pierwsze wyrazenie else if.<br />
Dopisz ponizej wyrazenie if. W polu<br />
Condition wpisz:<br />
Key.isDown (Key.ENTER)<br />
Jest to instrukcja, która nakazuje Flashowi<br />
sprawdzic, czy uzytkownik nacisnal klawisz<br />
Enter w momencie, kiedy pierwszy blok<br />
tekstowy jest zogniskowany (rys. 10.52).<br />
3. Wybierz Actions/evaluate . Majac kursor<br />
w polu Expression, wybierz<br />
Objects/Selection/setFocus.<br />
W polu Expression pojawi sie metoda<br />
setFocus, z podswietlonym parametrem<br />
variableName.<br />
4. W miejsce parametru variableName<br />
wprowadz bezwzgledna scie zke dostepu do<br />
zmiennej drugiego bloku tekstu<br />
pobieranego, uzywajac znaku cudzyslowu<br />
(rys. 10.53).<br />
Flash zogniskuje teraz nastepny blok<br />
tekstowy.<br />
5. Kontynuuj dodawanie wyrazen<br />
warunkowych i metod setFocus dla<br />
pozostalych dwóch linii skryptu else if<br />
(rys. 10.54).<br />
6. Przetestuj film.<br />
Kiedy uzytkownik wprowadzi tekst do<br />
pierwszego bloku tekstu pobieranego<br />
i wcisnie klawisz Enter, Flash zogniskuje<br />
nastepny blok tekstu pobieranego, dzieki<br />
czemu uzytkownik bedzie mógl<br />
kontynuowac wprowadzanie informacji bez<br />
potrzeby klikania odpowiedniego bloku<br />
w celu jego uaktywnienia. Uzyj<br />
przedstawionej metody przygotowania<br />
interfejsu kontroli zaznaczania bloków<br />
tekstowych za pomoca klawisza Tab.<br />
Ogniskowanie bloków tekstowych<br />
325
Rozdzial 10.<br />
Obiekt lancucha znakowego<br />
Obiekt lancucha znakowego<br />
Metody i wlasciwosci mozna przypisac do<br />
obiektu lancucha znakowego w celu<br />
analizowania i manipulowania danymi<br />
znakowymi. Obiekt lancucha moze powiedziec<br />
ci np., gdzie znajduje sie okreslony znak, czy<br />
tez jaki znak znajduje sie na wskazanej pozycji.<br />
Mozliwe jest takze wyciecie fragmentu<br />
lancucha (nazywanego podl ancuchem)<br />
i wstawienie go do innego, jak równiez wiazanie<br />
lancuchów i podlancuchów. Obiekt lancucha<br />
znakowego pozwala zmieniac fragmenty<br />
lancucha znakowego na pisane wielkimi lub<br />
malymi literami. Rózne metody i wlasciwosci<br />
tego typu obiektu przedstawiono w tabeli 10.2.<br />
Wszystkie te operacje z poprawianiem<br />
i przestawianiem lancuchów znakowych mozesz<br />
wykonywac bez wczesniejszego utworzenia<br />
klonu obiektu lancucha znakowego. Flash robi<br />
to automatycznie, tworzac tymczasowy obiekt<br />
lancucha znakowego, który po wykonaniu<br />
metody jest usuwany.<br />
Tabela 10.2. Metody i wlasciwosci obiektu lancucha znakowego<br />
Metoda lub wlasciwosc<br />
indexOf(searchString,<br />
fromIndex)<br />
lastIndexOf(searchString,<br />
fromIndex)<br />
charAt(index)<br />
substring(indexA, indexB)<br />
substr(start, length)<br />
Opis<br />
Podobnie jak w przypadku obiektu selekcji,<br />
indeksy obiektu lancucha znakowego sa<br />
tworzone na podstawie pozycji znaku<br />
w lancuchu. Pierwszy znak otrzymuje<br />
indeks 0, drugi indeks 1, itd.<br />
Wskazówka<br />
• Mozesz uzyc funkcji String w celu<br />
dokonania konwersji wartosci dowolnej<br />
zmiennej, wyrazenia lub obiektu na<br />
lancuch znakowy, zanim wykonane<br />
zostana metody obiektu lancucha<br />
znakowego. Przykladowo, jesli twoja<br />
zmienna przyciskWyboru jest zmienna<br />
boole’owska, to wyrazenie<br />
String (przyciskWyboru)<br />
zwraca lancuch znakowy true (prawda)<br />
lub false (falsz). Od teraz znaki te<br />
moga podlegac manipulowaniu za<br />
pomoca metod obiektu lancucha<br />
znakowego.<br />
Przeszukuje lancuch znakowy i zwraca miejsce wystapienia po<br />
raz pierwszy podlancucha wskazanego parametrem<br />
searchString. Opcjonalny parametr fromIndex okresla<br />
punkt rozpoczecia przeszukiwania.<br />
Przeszukuje lancuch znakowy i zwraca miejsce wystapienia po<br />
raz ostatni podlancucha wskazanego parametrem<br />
searchString. Opcjonalny parametr fromIndex okresla<br />
punkt rozpoczecia przeszukiwania.<br />
Zwraca znak znajdujacy sie na pozycji wskazanej indeksem.<br />
Zwraca lancuch znakowy, którego pozycje wyznaczaja parametry<br />
indexA i indexB.<br />
Zwraca lancuch znakowy o podanej dlugosci, zaczynajacy sie od<br />
indeksu start.<br />
concat(string1,...,stringN) Wiaze wskazane lancuchy.<br />
toLowerCase()<br />
Zamienia znaki w lancuchu na pisane mala litera.<br />
toUpperCase()<br />
Zamienia znaki w lancuchu na pisane wielka litera.<br />
length<br />
Wlasciwosc zwracajaca dlugosc lancucha.<br />
326
Kontrolowanie tekstu<br />
Rys. 10.55. Nazwij blok tekstu pobieranego<br />
myString (mój lancuch)<br />
Rys. 10.56. Przypisz metode indexOf do bloku<br />
myString<br />
Rys. 10.57. Metoda indexOf sprawdza blok<br />
myString w poszukiwaniu znaku % i podstawia<br />
jego indeks do zmiennej characterPosition<br />
(pozycja znaku)<br />
Analizowanie lancuchów<br />
znakowych za pomoca obiektu<br />
lancucha znakowego<br />
Uzyj metod obiektu lancucha znakowego do<br />
zidentyfikowania znaku lub znaków w tym<br />
lancuchu. Ponizsze cwiczenia ilustruja sposób<br />
analizowania bloków tekstu pobieranego w celu<br />
sprawdzenia, czy uzytkownik wprowadzil<br />
pozadana informacje.<br />
W celu<br />
zidentyfikowania pozycji znaku:<br />
1. Wybierz narzedzie tekstowe (Text Tool )<br />
i przeciagnij nim po scenie w celu<br />
utworzenia bloku tekstowego. Na palecie<br />
Text Options, wybierz Input Text oraz<br />
Single Line z kolejnych menu rozwijanych.<br />
Przydziel dla bloku tekstu pobieranego<br />
nazwe zmiennej (Variable) (rys. 10.55).<br />
2. Utwórz symbol przycisku i umiesc jego klon<br />
na scenie. Zaznacz go i otwórz palete akcji.<br />
3. Wybierz Actions/set variable.<br />
4. W polu Variable wpisz nazwe zmiennej.<br />
W polu Value wpisz nazwe zmiennej bloku<br />
tekstu pobieranego. Nastepnie, majac kursor<br />
w polu Value, wybierz Objects/String/<br />
indexOf.<br />
Metoda indexOf pojawi sie za zmienna<br />
tekstu pobieranego. Podswietlone zostana<br />
argumenty searchString i fromIndex.<br />
Parametr searchString sluzy do<br />
okreslenia znaku, który chcesz<br />
zidentyfikowac w lancuchu. Parametr<br />
fromIndex jest punktem poczatkowym<br />
lancucha – jest to parametr opcjonalny<br />
(rys. 10.56).<br />
5. W miejsce parametru searchString wpisz<br />
znak, który ma byc wyszukany. Upewnij sie,<br />
ze wpisales go w cudzyslowie. Usun<br />
parametr fromIndex. Zaznacz pole wyboru<br />
Expression obok pola Value (rys. 10.57).<br />
Analizowanie lancuchów znakowych<br />
327
Rozdzial 10.<br />
Analizowanie lancuchów znakowych<br />
Kiedy uzytkownik wprowadzi tekst do bloku<br />
tekstu pobieranego i kliknie utworzony<br />
przycisk, Flash sprawdzi tekst<br />
w poszukiwaniu wskazanego znaku<br />
i przypisze jego pozycje zmiennej. Uzyj tej<br />
zmiennej w metodach obiektu selekcji lub<br />
obiektu lancucha znakowego w celu<br />
dalszego modyfikowania informacji.<br />
Wskazówki<br />
• Odwrotnoscia metody indexOf jest metoda<br />
charAt. Zwraca ona znak zajmujacy<br />
pozycje w lancuchu o podanym indeksie.<br />
Metody tej móglbys uzyc np. w celu<br />
sprawdzenia, czy pierwszy, drugi i trzeci<br />
znak odpowiadaja numerowi kierunkowemu<br />
telefonu do danej miejscowosci.<br />
• Jesli poszukiwany znak, oznaczony<br />
parametrem indexOf, wystepuje<br />
w lancuchu znakowym wiecej niz raz, Flash<br />
zwróci tylko indeks pozycji, na której ten<br />
znak wystepuje po raz pierwszy. Uzyj<br />
metody lastIndexOf do odczytania<br />
miejsca ostatniego wystapienia tego znaku.<br />
• Gdybys chcial wyszukac wszystkie<br />
miejsca wystepowania okreslonego<br />
znaku, musisz uzyc wielu iteracji metody<br />
indexOf. Wykorzystaj przy tym<br />
opcjonalny parametr fromIndex, który<br />
rozpoczyna wyszukiwanie od<br />
wskazanego indeksu. Wyobraz sobie np.,<br />
ze zmienna wejsciowa zawiera lancuch<br />
znakowy „home/images/vacation”.<br />
Nastepnie przypisz skrypt:<br />
slash1 = input.indexOf ("/");<br />
slash1 = input.indexOf ("/",<br />
slash1+1);<br />
Pierwsze wyrazenie przypisuje zmienna<br />
slash1 do miejsca pierwszego<br />
wystapienia symbolu ukosnika<br />
w lancuchu znakowym wprowadzonej<br />
informacji (slash1 = 4). Drugie<br />
wyrazenie ponownie wyszukuje symbol<br />
ukosnika, ale zaczynajac od znaku<br />
stojacego za pierwszym napotkanym<br />
ukosnikiem (przy indeksie 5 lub literze<br />
„i” w slowie „images”). Konstruujac<br />
petle while lub do while, mozesz<br />
zmusic Flasha do przeszukania calego<br />
lancucha, zaczynajac za kazdym razem<br />
od ostatniego miejsca wystapienia znaku.<br />
Powtarzaj czynnosc, dopóki wartosc<br />
zwracana metody indexOf nie bedzie<br />
równa wartosci metody lastIndexOf.<br />
328
Kontrolowanie tekstu<br />
Rys. 10.58. Nazwij blok tekstu pobieranego<br />
yourEmail (twój e-mail)<br />
Rys. 10.59. Nazwij blok tekstu dynamicznego<br />
display (ekran)<br />
Jesli Flash przeszukuje lancuch znakowy<br />
z uzyciem metod indexOf lub lastIndexOf<br />
i nie znajduje wskazanego znaku, zwracana jest<br />
wartosc –1. Mozna wykorzystac te wlasciwosc<br />
do wyszukiwania brakujacych znaków w<br />
lancuchu. Przykladowo, jesli indexOf("%")<br />
== -1, to wiadomo, ze symbolu procentu<br />
brakuje w lancuchu znakowym. W kolejnym<br />
cwiczeniu sprawdzimy zmienna<br />
wprowadzonego tekstu w poszukiwaniu<br />
symbolu @ oraz kropki, aby przekonac sie,<br />
czy adres e-mail zostal wpisany poprawnie.<br />
W celu sprawdzenia bloku tekstowego w<br />
poszukiwaniu brakujacego znaku:<br />
1. Wybierz narzedzie tekstowe (Text Tool )<br />
i przeciagnij nim po scenie w celu<br />
utworzenia bloku tekstowego. Na palecie<br />
Text Options, wybierz Input Text oraz<br />
Single Line z kolejnych menu rozwijanych.<br />
Przydziel dla bloku tekstu pobieranego<br />
nazwe zmiennej (Variable) (rys. 10.58).<br />
2. Ponownie wybierz narzedzie tekstowe<br />
(Text Tool) i przeciagnij nim po scenie<br />
w celu utworzenia kolejnego bloku<br />
tekstowego. Na palecie Text Options,<br />
wybierz Dynamic Text oraz Multiline<br />
z kolejnych menu rozwijanych. Zaznacz<br />
pole Word wrap. Przydziel dla bloku tekstu<br />
dynamicznego nazwe zmiennej (Variable)<br />
(rys. 10.59).<br />
3. Utwórz symbol przycisku i umiesc jego klon<br />
na scenie, pomiedzy dwoma blokami<br />
tekstowymi. Zaznacz przycisk i otwórz<br />
palete akcji.<br />
4. Na palecie akcji wybierz Actions/if.<br />
5. W polu Condition wpisz nazwe zmiennej<br />
bloku tekstu pobieranego. Majac kursor<br />
w polu Condition, wybierz Objects/<br />
Objects/String/indexOf. Za zmienna bloku<br />
tekstu pobieranego pojawi sie metoda<br />
indexOf, z podswietlonymi argumentami<br />
searchString i fromIndex.<br />
Analizowanie lancuchów znakowych<br />
329
Rozdzial 10.<br />
Analizowanie lancuchów znakowych<br />
6. W miejsce parametru searchString wpisz<br />
symbol "@". Upewnij sie, ze dolaczyles<br />
cudzyslów. Usun parametr fromIndex.<br />
Flash sprawdzi blok tekstu pobieranego<br />
w poszukiwaniu symbolu @.<br />
7. Uzupelnij do konca wyrazenie warunkowe.<br />
Powinno ono wygladac tak:<br />
yourEmail.indexOf ("@") == -1<br />
Ten warunek sprawdza, czy symbol @ nie<br />
jest obecny w zmiennej yourEmail<br />
(rys. 10.60).<br />
8. W tym samym polu Condition wpisz<br />
operator logiczny OR, ||.<br />
9. Dodaj drugi warunek, sprawdzajacy, czy<br />
znak kropki (.) nie jest obecny w zmiennej:<br />
yourEmail.indexOf (".") == -1<br />
10. Wybierz Actions/set variable. W polu<br />
Variable wpisz nazwe zmiennej bloku<br />
dynamicznego tekstu. W polu Value<br />
wprowadz komunikat informujacy odbiorce<br />
o zaistnialym bledzie w pisowni<br />
(rys. 10.61).<br />
11. Wybierz Actions/else. Nastepnie wybierz<br />
Actions/set variable. Przypisz dodatkowy<br />
komunikat do zmiennej dynamicznego<br />
tekstu, bedacy podziekowaniem za podanie<br />
adresu e-mail (rys. 10.62).<br />
12. Przetestuj film. Kiedy uzytkownik kliknie<br />
przycisk po wprowadzeniu adresu e-mail do<br />
bloku tekstu pobieranego, Flash sprawdzi<br />
lancuch znakowy w poszukiwaniu symbolu<br />
@ i kropki, a nastepnie zwróci ich indeksy.<br />
Jesli którys z indeksów bedzie mial wartosc<br />
–1, uzytkownik zobaczy komunikat<br />
informujacy o podaniu nieprawidlowego<br />
adresu. W przeciwnym wypadku,<br />
wyswietlony zostanie komunikat<br />
z podziekowaniem (rys. 10.63).<br />
Rys. 10.60. Warunek zostanie spelniony,<br />
jesli w zmiennej yourEmail nie pojawi<br />
sie symbol @<br />
Rys. 10.61. Komunikat wpisany w polu Value<br />
pojawi sie w bloku dynamicznego tekstu<br />
o nazwie display<br />
Rys. 10.62. Ten komunikat pojawi sie w bloku<br />
dynamicznego tekstu o nazwie display<br />
w przypadku niespelnienia warunku<br />
Rys. 10.63. Wprowadzenie nieprawidlowego<br />
adresu e-mail w bloku tekstu pobieranego<br />
powoduje wyswietlenie ostrzezenia bloku<br />
dynamicznego tekstu (u góry). Wpisanie<br />
adresu zawierajacego Symbol @ oraz kropke<br />
powoduje wyswietlenie w bloku<br />
dynamicznego tekstu komunikatu<br />
z podziekowaniem (u dolu)<br />
330
Kontrolowanie tekstu<br />
Rys. 10.64. Flash sprawdza, czy nie brakuje<br />
symbolu @, kropki, a takze ustala, czy blok tekstu<br />
pobieranego o nazwie yourEmail jest pusty<br />
4. Dodaj trzeci warunek, sprawdzajacy dlugosc<br />
lancucha. Stosowne wyrazenie powinno<br />
wygladac tak:<br />
yourEmail.length == 0<br />
Kiedy uzytkownik kliknie przycisk, Flash<br />
sprawdzi dlugosc lancucha znakowego<br />
w bloku tekstu pobieranego i ustali, czy<br />
cokolwiek zostalo wpisane (rys. 10.64).<br />
Wskazówka<br />
• Uzyj metod indexOf lub lastIndexOf<br />
w celu odszukania znaku lub sekwencji<br />
znaków. Jesli jako argument wprowadzisz<br />
lancuch znakowy, np. indexOf (".org"),<br />
Flash zwróci indeks miejsca pierwszego<br />
wystapienia sekwencji .org w lancuchu.<br />
Obiekt lancucha znakowego posiada jedna<br />
wlasciwosc, length, okreslajaca liczbe znaków<br />
w lancuchu. Jest to wlasciwosc tylko do<br />
odczytu, uzyteczna do sprawdzania wzglednego<br />
umiejscowienia znaków. Na przyklad, budujac<br />
interfejs internetowego sklepiku z blokami<br />
tekstu pobieranego do podawania cen, mozesz<br />
sprawdzac wprowadzany tekst w celu ustalenia,<br />
czy znak kropki znajduje sie trzy miejsca przed<br />
dlugoscia lancucha, jak w wyrazeniu:<br />
input.indexOf (".") == input.length<br />
– 3<br />
Jesli powyzszy warunek jest spelniony, mozna<br />
potraktowac dwie ostatnie cyfry jako czesc<br />
dziesietna.<br />
Nastepne cwiczenie uzupelnia przedstawiony<br />
wczesniej proces sprawdzania poprawnosci<br />
wpisanego adresu e-mail. Tym razem nakazesz<br />
Flashowi upewnic sie, ze dlugosc<br />
wprowadzonego lancucha znakowego nie<br />
wynosi 0 (co oznacza, ze odbiorca nic nie<br />
wpisal).<br />
W celu sprawdzenia dlugosci<br />
lancucha znakowego:<br />
1. Kontynuujemy poprzednie cwiczenie,<br />
sprawdzajace poprawnosc wpisanego adresu<br />
e-mail. Zaznacz przycisk i otwórz palete<br />
akcji.<br />
2. Zaznacz wyrazenie if.<br />
3. W polu Condition dodaj kolejny operator<br />
logiczny ||.<br />
Analizowanie lancuchów znakowych<br />
331
Przegrupowywanie lancuchów<br />
Rozdzial 10.<br />
Przegrupowywanie lancuchów<br />
znakowych za pomoca<br />
obiektu lancucha znakowego<br />
Kiedy juz posiadasz informacje<br />
o umiejscowieniu poszczególnych znaków<br />
w lancuchu oraz o dlugosci samego lancucha<br />
znakowego, mozesz zaznaczyc jego czesc<br />
i podstawic ja do innej zmiennej. Flash<br />
umozliwia wykorzystanie wyselekcjonowanych<br />
fragmentów lancucha wraz z innymi lancuchami<br />
znakowymi, a odbywa sie to przy uzyciu metod<br />
concat, fromCharCode, slice, split,<br />
substr lub substring. Wiekszosc tych metod<br />
jest do siebie podobna. W ksiazce omówimy<br />
tylko metody substring (pozwalajaca<br />
wykorzystac zaznaczony fragment lancucha)<br />
i concat (umozliwiajaca laczenie kilku<br />
oddzielnych lancuchów znakowych). Mozesz<br />
uzywac kombinacji tych dwóch metod do<br />
kontrolowania informacji przeplywajacych<br />
miedzy blokami tekstu pobieranego i reszta<br />
elementów filmu Flasha, by na koncu trafic do<br />
bloku dynamicznego tekstu.<br />
W celu wykorzystania<br />
wyselekcjonowanego<br />
fragmentu lancucha znakowego:<br />
1. Wybierz narzedzie tekstowe (Text Tool )<br />
i przeciagnij nim po scenie w celu<br />
utworzenia bloku tekstowego. Na palecie<br />
Text Options, wybierz Input Text oraz<br />
Multiline z kolejnych menu rozwijanych.<br />
Przydziel dla bloku tekstu pobieranego<br />
nazwe zmiennej (Variable). Zaznacz pole<br />
Word wrap (rys. 10.65).<br />
2. Ponownie wybierz narzedzie tekstowe<br />
(Text Tool) i przeciagnij nim po scenie<br />
w celu utworzenia kolejnego bloku<br />
tekstowego. Na palecie Text Options,<br />
wybierz Dynamic Text oraz Multiline<br />
z kolejnych menu rozwijanych. Przydziel dla<br />
bloku tekstu dynamicznego nazwe zmiennej<br />
(Variable). Zaznacz pole Word wrap<br />
(rys. 10.66).<br />
Rys. 10.65. Nazwij blok tekstu pobieranego<br />
inputBox<br />
Rys. 10.66. Nazwij blok tekstu dynamicznego<br />
outputBox<br />
332
Kontrolowanie tekstu<br />
Rys. 10.67. Zmienna o nazwie beginning<br />
(poczatek) przechowuje pozycje poczatkowa<br />
selekcji<br />
Rys. 10.68. Zmienna o nazwie ending (koniec)<br />
przechowuje pozycje koncowa selekcji<br />
Rys. 10.69. Metoda substring tworzy podlancuch<br />
na podstawie zawartosci zmiennej inputBox,<br />
przechowujacej indeksy indexA i indexB<br />
Rys. 10.70. Zmienna beginning wskazuje<br />
poczatek podlancucha znakowego, a zmienna<br />
ending – jego koniec<br />
3. Utwórz symbol przycisku i umiesc jego klon<br />
na scenie, pomiedzy dwoma blokami<br />
tekstowymi. Zaznacz przycisk i otwórz<br />
palete akcji.<br />
4. Wybierz Action/on. Zaznacz zdarzenie<br />
Roll Over.<br />
5. Wybierz Actions/set variable. W polu<br />
Variable wpisz nazwe zmiennej. W polu<br />
Value wybierz Objects/Selection/<br />
getBeginIndex. Zaznacz pole wyboru<br />
Expression obok pola Value (rys. 10.67).<br />
Do zmiennej przypisana zostanie pozycja<br />
poczatku selekcji.<br />
6. Wybierz Actions/set variable. W polu<br />
Variable wpisz nazwe kolejnej zmiennej.<br />
Umiesc kursor w polu Value i wybierz<br />
Objects/Selection/getEndIndex. Zaznacz<br />
pole wyboru Expression obok pola Value<br />
(rys. 10.68).<br />
Do zmiennej przypisana zostanie pozycja<br />
konca selekcji.<br />
7. Wybierz Actions/set variable. W polu<br />
Variable wpisz nazwe kolejnej zmiennej.<br />
W polu Value wpisz nazwe zmiennej tekstu<br />
pobieranego, a nastepnie wybierz<br />
Objects/String/substring.<br />
Metoda substring pojawi sie za zmienna<br />
tekstu pobieranego, z podswietlonymi<br />
parametrami indexA i indexB. Parametr<br />
indeXa definiuje poczatek sekwencji<br />
znaków, który chcesz wyciac, a parametr<br />
indexB oznacza koniec sekwencji<br />
(rys. 10.69).<br />
8. W mie jsce parametru indexA wpisz<br />
zmienna poczatku selekcji. W miejsce<br />
parametru indexB wpisz zmienna konca<br />
selekcji. Zaznacz pole wyboru Expression<br />
obok pola Value (rys. 10.70).<br />
9. Utwórz nowy manipulator zdarzenia,<br />
wybierajac Actions/on. Zaznacz zdarzenie<br />
Release.<br />
Przegrupowywanie lancuchów<br />
333
Rozdzial 10.<br />
Przegrupowywanie lancuchów<br />
10. Wybierz Actions/set variable i przypisz<br />
zmienna przechowujaca wyselekcjonowany<br />
fragment lancucha znakowego do bloku<br />
dynamicznego tekstu (rys. 10.71).<br />
Odbiorca moze teraz wpisac tekst do bloku<br />
tekstu pobieranego i zaznaczyc jego<br />
fragment. W momencie najechania mysza<br />
utworzonego przycisku – Flash zapamieta<br />
pozycje zaznaczenia i podstawi ten<br />
podlancuch do innej zmiennej. Po kliknieciu<br />
przycisku wybrany podlancuch znakowy<br />
pojawi sie w bloku dynamicznego tekstu<br />
(rys. 10.72).<br />
Wskazówka<br />
• Byc moze zastanawiasz sie, dlaczego<br />
metody selekcji sa przypisywane do<br />
zdarzenia Roll Over, zamiast zdarzenia<br />
Release. Dzieje sie tak, poniewaz Flash<br />
moze przechwycic informacje o pozycji<br />
kursora lub selekcji tylko z aktywnego bloku<br />
tekstowego. Jesli odbiorca kliknie przycisk,<br />
blok tekstowy przestanie byc aktywny<br />
(zogniskowany) i selekcja zniknie.<br />
Przypisanie informacji o zaznaczeniu do<br />
zdarzenia Roll Over daje pewnosc, ze<br />
selekcja zostanie wykonana przed jej<br />
usunieciem.<br />
Rys. 10.71. Zmienna outputBox wyswietla<br />
zawartosc zmiennej selectedString<br />
(zaznaczony fragment lancucha)<br />
Blok tekstu<br />
pobieranego<br />
inputBox<br />
Blok tekstu<br />
dynamicznego<br />
outputBox<br />
Blok tekstu<br />
pobieranego<br />
inputBox<br />
Blok tekstu<br />
dynamicznego<br />
outputBox<br />
Rys. 10.72. Zaznaczony fragment „sentence<br />
here” (u góry) jest przenoszony do podlancucha<br />
i wyswietlany w bloku dynamicznego tekstu<br />
ponizej przycisku (u dolu)<br />
Usprawnienie weryfikacji adresu e-mail za pomoca metody substring<br />
Mozesz wykorzystac metode substring<br />
w poprzednim cwiczeniu w celu usprawnienia<br />
wyswietlania informacji zwrotnej.<br />
Przykladowo, zamiast ogólnego podziekowania<br />
po wprowadzeniu poprawnego adresu, mozesz<br />
wyswietlic informacje spersonalizowana na<br />
podstawie znaków nastepujacych po symbolu<br />
@. Twoje podziekowanie bedzie wtedy<br />
skierowane do nazwy uzytkownika, która<br />
najczesciej jest jego imieniem lub<br />
pseudonimem. Ustaw zmienna bloku<br />
dynamicznego tekstu w nastepujacy sposób:<br />
"Thank you, " +<br />
yourEmail.substring (0,<br />
(yourEmail.indexOf("@"))) + ",<br />
we’ll contact you soon."<br />
Podlancuch zwróci selekcje fragmentu<br />
pomiedzy pierwszym znakiem (indeks 0)<br />
i symbolem @.<br />
334
Kontrolowanie tekstu<br />
Rys. 10.73. Stwórz trzy bloki tekstu pobieranego<br />
Rys. 10.74. Nazwij blok dynamicznego tekstu<br />
display (wyswietlacz)<br />
Za pomoca metody concat mozesz polaczyc<br />
wyciete lancuchy znakowe w bardziej<br />
uzyteczny sposób. Parametry metody concat<br />
sa indywidualnymi wyrazeniami (oddzielonymi<br />
przecinkami), które mozesz laczyc. Metoda<br />
concat ma takie samo dzialanie jak operator<br />
dodawania (+), który omawialismy wczesniej<br />
w tym rozdziale. Na przyklad, ponizsze dwa<br />
wyrazenia sa wzgledem siebie równorzedne:<br />
"Hello, ".concat (firstName, " ",<br />
lastName);<br />
"Hello, " + firstName + " " +<br />
lastName;<br />
W celu polaczenia dwóch<br />
oddzielnych lancuchów znakowych:<br />
1. Wybierz narzedzie tekstowe (Text Tool )<br />
i przeciagnij nim po scenie w celu<br />
utworzenia bloku tekstowego. Na palecie<br />
Text Options, wybierz Input Text oraz<br />
Multiline z kolejnych menu rozwijanych.<br />
Przydziel dla bloku tekstu pobieranego<br />
nazwe zmiennej (Variable). Zaznacz pole<br />
Word wrap.<br />
2. Ponownie wybierz narzedzie tekstowe<br />
(Text Tool) i przeciagnij nim po scenie<br />
w celu utworzenia jeszcze dwóch bloków<br />
tekstowych, z ustawieniami jak wyzej.<br />
Nadaj poszczególnym bloko m rózne nazwy<br />
(rys. 10.73).<br />
3. Wybierz narzedzie tekstowe (Text Tool )<br />
i przeciagnij nim po scenie w celu<br />
utworzenia czwartego bloku tekstowego.<br />
Na palecie Text Options, wybierz Dynamic<br />
Text oraz Multiline z kolejnych menu<br />
rozwijanych. Zaznacz pole Word wrap.<br />
Przydziel dla bloku tekstu dynamicznego<br />
nazwe zmiennej (Variable) (rys. 10.74).<br />
4. Utwórz symbol przycisku i umiesc jego klon<br />
na scenie. Zaznacz go i otwórz palete akcji.<br />
Przegrupowywanie lancuchów<br />
335
Rozdzial 10.<br />
Przegrupowywanie lancuchów<br />
5. Wybierz Actions/set variable. W polu<br />
Variable wpisz nazwe zmiennej bloku<br />
dynamicznego tekstu. W polu Value wpisz<br />
nazwe zmiennej pierwszego bloku tekstu<br />
pobieranego. Na koniec wybierz<br />
Objects/String/concat.<br />
Metoda concat pojawi sie w polu Value,<br />
zaraz za zmienna pierwszego bloku tekstu<br />
pobieranego. Zobaczysz podswietlone<br />
parametry string1 i stringN.<br />
Przedstawiaja one wartosci, które maja<br />
zostac powiazane (rys. 10.75).<br />
6. W miejsce podswietlonych parametrów<br />
wpisz nazwy zmiennych drugiego<br />
i trzeciego bloku tekstu pobieranego,<br />
oddzielonych spacjami i przecinkami.<br />
Zaznacz pole Expression (rys. 10.76).<br />
7. Przetestuj film. Kiedy uzytkownik<br />
wprowadzi informacje do bloków tekstu<br />
pobieranego i kliknie przycisk, Flash<br />
powiaze trzy zmienne bloków tekstu<br />
pobieranego i wyswietli je w bloku<br />
dynamicznego tekstu (rys. 10.77).<br />
Rys. 10.75. Metoda concat wiaze wartosci<br />
okreslone w jej parametrach ze zmienna<br />
o nazwie title (tytul)<br />
Rys. 10.76. Powyzsza metoda concat jest<br />
ekwiwalentem wyrazenia: title + " " +<br />
firstName + " " + lastName<br />
Rys. 10.77. Flash wiaze zawartosc trzech<br />
górnych pól tekstu pobieranego w jeden<br />
lancuch znakowy, wyswietlany w dolnym polu<br />
dynamicznego tekstu<br />
336
Kontrolowanie tekstu<br />
Modyfikowanie<br />
lancuchów znakowych<br />
za pomoca<br />
obiektu lancucha znakowego<br />
Istnieja dwie proste metody, umozliwiajace<br />
modyfikacje liter lancucha znakowego:<br />
toUpperCase oraz toLowerCase. Obydwie<br />
metody zmieniaja caly lancuch znakowy na<br />
pisany, odpowiednio, duzymi lub malymi<br />
literami. Jesli chcesz zmodyfikowac tylko<br />
wybrane litery, musisz najpierw przygotowac<br />
podlancuchy znakowe, zawierajace owe<br />
wybrane przez ciebie litery, jak to omówilis my<br />
w poprzedniej sekcji rozdzialu. Modyfikuj<br />
podlancuchy na pisane wielkimi lub malymi<br />
literami, a nastepnie lacz je z powrotem za<br />
pomoca metody concat.<br />
W celu zmiany wielkosci liter<br />
w lancuchu znakowym:<br />
1. Wybierz narzedzie tekstowe (Text Tool )<br />
i przeciagnij nim po scenie w celu<br />
utworzenia bloku tekstowego. Na palecie<br />
Text Options, wybierz Input Text oraz<br />
Single Line z kolejnych menu rozwijanych.<br />
Przydziel dla bloku tekstu pobieranego<br />
nazwe zmiennej (Variable).<br />
2. Ponownie wybierz narzedzie tekstowe<br />
(Text Tool) i przeciagnij nim po scenie<br />
w celu utworzenia kolejnego bloku<br />
tekstowego. Na palecie Text Options,<br />
wybierz Dynamic Text oraz Single Line<br />
z kolejnych menu rozwijanych. Przydziel dla<br />
bloku tekstu dynamicznego nazwe zmiennej<br />
(Variable).<br />
3. Utwórz symbol przycis ku i umiesc jego klon<br />
na scenie. Zaznacz go i otwórz palete akcji.<br />
Modyfikowanie lancuchów znakowych<br />
337
Rozdzial 10.<br />
Modyfikowanie lancuchów znakowych<br />
4. Wybierz Actions/set variable. W polu<br />
Variable wpisz nazwe zmiennej bloku<br />
dynamicznego tekstu. W polu Value wpisz<br />
nazwe zmiennej bloku tekstu pobieranego.<br />
Potem wybierz Objects/<br />
StringtoUpperCase oraz zaznacz pole<br />
Expression. Metoda toUpperCase pojawi<br />
sie w polu Value, zaraz za zmienna bloku<br />
tekstu pobieranego. Dla metody tej nie sa<br />
wymagane zadne parametry, jako ze jej<br />
dzialanie odnosi sie do calego lancucha<br />
znakowego (rys. 10.78).<br />
5. Przetestuj film. Kiedy uzytkownik<br />
wprowadzi tekst do bloku tekstu<br />
pobieranego i kliknie przycisk, Flash<br />
zamieni wszystkie znaki lancucha<br />
znakowego na pisane wielka litera<br />
i wyswietli rezultat tej operacji w bloku<br />
dynamicznego tekstu (rys. 10.79).<br />
Wskazówka<br />
• W celu przypisania do lancucha znakowego<br />
innego stylu, np. pogrubionego lub<br />
pochylego, musisz zdefiniowac te style<br />
w opcjach Character i Paragraph bloku<br />
dynamicznego tekstu. Wielkie i male litery<br />
to w zasadzie odmienne znaki, a nie style,<br />
co sprawia, ze trzeba modyfikowac lancuch<br />
znakowy.<br />
Rys. 10.78. Metoda toUpperCase<br />
przeksztalca znaki przechowywane<br />
w zmiennej myInput na pisane wielka litera<br />
Blok tekstu pobieranego myInput<br />
Blok dynamicznego tekstu o nazwie display<br />
Rys. 10.79. Rezultat wykonania metody<br />
toUpperCase jest widoczny w bloku<br />
dynamicznego tekstu o nazwie display<br />
338
Manipulowanie danymi 11<br />
Czesci skladowe jezyka HTML<br />
Informacje, które przechowujesz w zmiennych, modyfikujesz w wyrazeniach i sprawdzasz przy<br />
pomocy wyrazen warunkowych, czesto musza byc dalej przetwarzane z uzyciem rachunków<br />
matematycznych, takich jak potegowanie czy obliczanie sinusa i cosinusa. Flash wykonuje<br />
podobne obliczenia, korzystajac z obiektu matematycznego (Math), umozliwiajacego tworzenie<br />
formul dzialania interakcji pomiedzy obiektami w twoim filmie i odbiorca, a takze wzorów<br />
geometrycznych do ksztaltowania grafiki. Dla przykladu: poslugujac sie obiektem<br />
matematycznym, mozesz zaprojektowac prawidlowa trajektorie kolizji obiektów, zasymulowac<br />
efekt oddzialywania sil grawitacji w samouczku do lekcji fizyki, obliczac rachunek<br />
prawdopodobienstwa w grze karcianej czy tez generowac liczby losowe, pozwalajace wprowadzic<br />
do filmu nieprzewidywalne elementy. Wiekszosc takich informacji, którymi manipulujesz, musi<br />
byc przechowywana w tablicach, jesli chcesz uzyskac wieksza kontrole nad danymi i efektywnosc<br />
ich wykorzystania. Tablice moga byc uzywane do porzadkowania danych, np. w listach zakupów,<br />
tabelach koloru lub zapiskach sportowych.<br />
Jesli informacja, której potrzebujesz, jest uzalezniona od czasu lub daty, mozesz skorzystac<br />
z obiektu daty (Date) do uzyskania danych na temat biezacego roku, miesiaca, a nawet<br />
milisekundy. Dzieki temu latwo dolaczysz do swojego filmu zegar i timer, uzyskujac mozliwosc<br />
przesylania do serwera informacji czasowej wraz z profilem odbiorcy.<br />
Wykonywanie wszystkich tych procesów zwiazanych z przetwarzaniem danych znacznie ulatwia<br />
uzycie funkcji. Nauczysz sie, jak budowac funkcje laczace oddzielne wyrazenia i obiekty w taki<br />
sposób, aby zwiekszyc ich pierwotne mozliwosci. Wystarczy wspomniec tu chocby<br />
o zaprojektowaniu funkcji automatycznie dolaczajacej do filmu dzwiek, a nastepnie odtwarzajacej<br />
go i ustawiajacej poziom glosnosci lub panorame w oparciu o podane parametry. Mozliwe jest<br />
takze tworzenie funkcji pozwalajacej ksztaltowac wlasne obiekty. Rozwijaj mozliwosci<br />
predefiniowanych obiektów Flasha, przygotowujac sterujace nimi wlasne metody i wlasciwosci.<br />
Rozdzial 11. pomoze ci zrozumiec, jak poslugiwac sie takimi zlozonymi, ale jednoczesnie<br />
elastycznymi danymi. Dowiesz sie równiez o sposobach integrowania róznych obiektów,<br />
z którymi zapoznales sie dotychczas.<br />
Manipulowanie danymi<br />
339
Rozdzial 11.<br />
Wykonywanie obliczen<br />
za pomoca obiektu<br />
matematycznego<br />
Wykonywanie obliczen<br />
Obiekt matematyczny pozwala na<br />
wykorzystanie funkcji trygonometrycznych,<br />
takich jak sinus, cosinus i tangens, funkcji<br />
logarytmicznych, funkcji zaokraglania wartosci<br />
liczbowych, czy wreszcie stalych<br />
matematycznych, np. Pi (3.141592) lub<br />
e (2.718281). Metody i wlasciwosci obiektu<br />
matematycznego przedstawia tabela 11.1.<br />
Podobnie jak w przypadku obiektu Key, tak i tu<br />
nie jest potrzebne tworzenie klonu obiektu przed<br />
uzyciem jego metod lub wlasciwosci. Podobnie<br />
wszystkie wlasciwosci obiektu matematycznego<br />
sa wartosciami tylko do odczytu i zapisuje sie je<br />
wielkimi literami. Kazda metoda jest<br />
poprzedzona wprowadzeniem obiektu Math.<br />
Na przyklad, w celu obliczenia kwadratu<br />
liczby 10, napiszesz:<br />
mojaOdpowiedz = Math.sqrt (10);<br />
a wynik obliczenia zostanie podstawiony do<br />
zmiennej mojaOdpowiedz. Jesli zamierzasz<br />
wykorzystac stala, posluz sie skladnia:<br />
mojObwod = Math.PI * 2 * mojPromien;<br />
Stala matematyczna Pi jest mnozona przez 2<br />
i przez wartosc zmiennej mojPromien, a wynik<br />
obliczenia jest podstawiany do zmiennej<br />
mojObwod.<br />
340
Manipulowanie danymi<br />
Tabela 11.1. Metody i wlasciwosci obiektu matematycznego<br />
Metoda lub wlasciwosc Opis<br />
abs(number)<br />
Oblicza wartosc bezwzgledna (z pominieciem znaku).Wyrazenie<br />
Math.abs(-4) zwraca wartosc 4.<br />
acos(number)<br />
Oblicza wartosc cosinusa luku<br />
asin(number)<br />
Oblicza wartosc sinusa luku.<br />
atan(number)<br />
Oblicza wartosc tangensa luku.<br />
atan2(y, x) Oblicza wartosc kata (w radianach) miedzy osia x i punktem na osi y.<br />
ceil(number)<br />
Zaokragla liczbe w góre do najblizszej liczby calkowitej. Wyrazenie<br />
Math.ceil (2.34) zwraca wartosc 3.<br />
cos(number)<br />
Oblicza wartosc cosinusa kata podanego w radianach.<br />
exp(number)<br />
Oblicza wartosc wykladnika potegi stalej Eulera (e).<br />
floor(number)<br />
Zaokragla liczbe w dól do najblizszej liczby calkowitej. Wyrazenie<br />
Math.floor (2.34) zwraca wartosc 2.<br />
log(number)<br />
Oblicza wartosc logarytmu naturalnego.<br />
max(x, y)<br />
Zwraca wieksza z dwóch porównywanych wartosci. Wyrazenie<br />
Math.max (2, 7) zwraca wartosc 7.<br />
min(x, y)<br />
Zwraca mniejsza z dwóch porównywanych wartosci. Wyrazenie<br />
Math.max (2, 7) zwraca wartosc 2.<br />
pow(base, exponent) Oblicza wartosc wykladnika potegi danej liczby.<br />
random() Zwraca liczbe losowa z zakresu 0,0 do 1,0.<br />
round(number)<br />
Zaokragla liczbe do najblizszej wartosci. Gdy czesc ulamkowa wartosci jest<br />
mniejsza od 0,5, to funkcja zaokragla w gól, gdy natomiast czesc ulamkowa<br />
wynosi 0,5 i wiecej, to funkcja zaokragla w góre. Wyrazenie<br />
Math.round (2.34) zwraca wartosc 2.<br />
sin(number)<br />
Oblicza wartosc sinusa kata podanego w radianach.<br />
sqrt(number)<br />
Oblicza wartosc kwadratu potegi.<br />
tan(number)<br />
Oblicza wartosc tangensa kata podanego w radianach.<br />
E<br />
Stala Eulera; podstawa logarytmów naturalnych.<br />
LN2 Logarytm naturalny liczby 2.<br />
LOG2E Logarytm Eulera podstawy równej 2.<br />
LN10 Logarytm naturalny liczby 10.<br />
LOG10E Logarytm Eulera podstawy równej 10.<br />
PI<br />
Obwód kola podzielony przez jego srednice.<br />
SQRT1_2 Kwadrat potegi liczby ½.<br />
SQRT2 Kwadrat potegi liczby 2.<br />
Wykonywanie obliczen<br />
341
Rozdzial 11.<br />
Obliczanie wartosci katowych<br />
Obliczanie wartosci katowych za<br />
pomoca<br />
obiektu matematycznego<br />
Kat zachowywany pomiedzy obiektem i scena<br />
lub pomiedzy dwoma obiektami jest uzyteczna<br />
informacja w tworzeniu interakcji w grach, jak<br />
tez w przypadku dynamicznych animacji<br />
i interfejsów budowanych od poczatku do konca<br />
za pomoca jezyka ActionScript. Przykladowo,<br />
tworzac pokretlo regulujace poziom glosnosci<br />
dzwieku, musisz obliczyc kat pomiedzy<br />
kierunkiem, w którym uzytkownik przeciaga<br />
pokretlo i osia pionowa lub pozioma, a nastepnie<br />
odpowiednio zmienic obrót pokretla i sama<br />
glosnosc dzwieku. Zanim jednak przejdziesz<br />
do obliczania wartosci katowych, dobrze byloby<br />
przypomniec sobie poznane w szkole sredniej<br />
podstawowe zasady trygonometryczne, rzadzace<br />
obliczaniem sinusa, cosinusa i tangensa.<br />
Mnemoniczna nazwa SOH CAH TOA pomaga<br />
zachowac poprawnosc obliczania funkcji<br />
trygonometrycznych. Symbole te sa akronimami<br />
wyrazen: Sine = Opposite over Hypotenuse<br />
(sinus = przyprostokatna naprzeciwlegla do<br />
przeciwprostokatnej), Cosine = Adjacent over<br />
Hypotenuse (cosinus = przyprostokatna<br />
przylegla do przeciwprostokatnej) i Tangent =<br />
Opposite over Adjacent (tangens =<br />
przyprostokatna naprzeciwlegla do<br />
przyprostokatnej przyleglej) (rys. 11.1).<br />
Znajomosc dlugosci dwóch dowolnych boków<br />
trójkata prostokatnego wystarcza do obliczenia<br />
pozostalych dwóch katów. Zwykle bedziesz mial<br />
do czynienia z dlugosciami przyprostokatnych,<br />
jako ze to one wlasnie reprezentuja wspólrzedne<br />
x i y punktu (rys. 11.2). Znajac wspólrzedne x, y,<br />
mozesz obliczyc kat (theta) za pomoca ponizszych<br />
wzorów matematycznych:<br />
Tangens kata = przyprostokatna naprzeciwlegla/<br />
przyprostokatna przylegla<br />
lub<br />
Tangens kata = y/x<br />
lub<br />
Kat = tangens luku (y/x)<br />
Adjacent (przyprostokatna przylegla)<br />
Hypotenuse<br />
(przeciwprostokatna)<br />
Rys. 11.1. Kat (theta) trójkata prostokatnego<br />
jest definiowany przez sinus, cosinus, tangens<br />
i dlugosc trzech boków<br />
Os y<br />
Rys. 11.2. Punkt na scenie tworzy trójkat<br />
prostokatny z bokami x (przyprostokatna<br />
przylegla) oraz y (przyprostokatna<br />
naprzeciwlegla)<br />
Opposite<br />
(przyprostokatna<br />
naprzeciwlegla)<br />
Sinus kata = przyprostokatna<br />
naprzeciwlegla/przeciwprostokatna<br />
Cosinus kata = przyprostokatna<br />
przylegla/przeciwprostokatna<br />
Tangens kata = przyprostokatna<br />
naprzeciwlegla/przyprostokatna przylegla<br />
x<br />
y<br />
Os x<br />
342
Manipulowanie danymi<br />
We Flashu mozna powyzsze wyrazenia zapisac<br />
przy pomocy obiektu matematycznego<br />
w nastepujacy sposób:<br />
mojKat = Math.atan(this._y/this._x);<br />
Warto dodac, ze jest dostepna jeszcze latwiejsza<br />
metoda zdefiniowania wspólrzednych x, y, bez<br />
potrzeby wykonywania dzielenia. Metoda<br />
atan2 przyjmuje wspólrzedne x, y jako dwa<br />
argumenty, wiec wyrazenie moze wygladac<br />
nastepujaco:<br />
mojKat = Math.atan2(this._y,<br />
this._x)<br />
Niestety, metody trygonometryczne obiektu<br />
matematycznego wymagaja – i zwracaja –<br />
wartosci w radianach, które opisuja kat<br />
w rozumieniu liczby stalej Pi, co jest<br />
wygodniejsze matematycznie, ale juz nie tak<br />
praktyczne w momencie, gdy chcesz uzyc<br />
wartosci do zmodyfikowania wlasciwosci<br />
_rotation klipu filmowego. Mozna jednak<br />
przeksztalcic wartosc katowa w radianach na<br />
stopnie – i odwrotnie – za pomoca ponizszych<br />
wzorów:<br />
Radiany = Math.PI/180 * liczba_<br />
stopni;<br />
Stopnie = liczba_radianów * 180/<br />
Math.PI;<br />
Ponizsze cwiczenia demonstruja sposób<br />
obliczenia katów przeciaganego klipu<br />
filmowego i wyswietlenia wartosci w stopniach<br />
w bloku dynamicznego tekstu.<br />
Obliczanie wartosci katowych<br />
W celu obliczenia kata<br />
tworzonego wzgledem sceny:<br />
1. Utwórz symbol klipu filmowego i umiesc<br />
jego klon na scenie. Nazwij go, korzystajac<br />
z pola Name palety Instance.<br />
2. Utwórz blok dynamicznego tekstu, w sposób<br />
opisany w rozdziale 10. Na palecie Text<br />
Options wybierz opcje Single Line<br />
i przypisz do bloku tekstowego nazwe<br />
zmiennej (Variable).<br />
3. Zaznacz klon klipu filmowego i otwórz<br />
palete akcji.<br />
343
Rozdzial 11.<br />
Obliczanie wartosci katowych<br />
4. Wybierz Actions/onClipEvent. Zaznacz<br />
zdarzenie Load.<br />
5. Wybierz Actions/startDrag. W polu Target<br />
wpisz this. Zaznacz pole Expression.<br />
Zaznacz tez pola Constrain to rectangle<br />
i Lock mouse to center. Wpisz 0 w polu L,<br />
0 w polu T, szerokosc sceny w polu R<br />
i wysokosc sceny w polu B (rys. 11.3).<br />
W rezultacie punkt srodkowy klipu<br />
filmowego bedzie podazal za wskaznikiem<br />
myszy, a sam klip zostanie osadzony<br />
w obramowaniu wyznaczonym przez<br />
rozmiary sceny.<br />
6. Wybierz Actions/onClipEvent. Zaznacz<br />
zdarzenie enterFrame.<br />
7. Wybierz Actions/set variable. W polu<br />
Variable wpisz nazwe zmiennej, która<br />
bedzie przechowywac wartosc kata<br />
w radianach. Umiesc kursor w polu Value<br />
i wybierz Object/Math/atan2. Zaznacz pole<br />
Expression (rys. 11.4).<br />
8. W polu Value, w miejsce argumentu y<br />
wpisz this._y, a w miejsce argumentu x<br />
wpisz this._x (rys. 11.5).<br />
Flash obliczy tangens luku wspólrzednej y<br />
polozenia wskaznika, podzielonej przez<br />
wspólrzedna x i zwróci wynik, bedacy<br />
wartoscia w radianach.<br />
9. Wybierz Actions/set variable. W polu<br />
Variable wprowadz pelna sciezke dostepu<br />
do bloku dynamicznego tekstu na glównej<br />
listwie czasowej.<br />
10. W polu Value wprowadz wyrazenie, które<br />
mnozy wartosc zmiennej przechowujacej kat<br />
w radianach przez 180 i dzieli wynik przez<br />
stala Pi:<br />
myRadians * 180/Math.PI;<br />
Zaznacz pole Expression i dowiaz lancuch<br />
znakowy "degrees" na koncu wyrazenia.<br />
Wartosc kata zostanie przeksztalcona<br />
z radianów na stopnie i przypisana do<br />
zmiennej dynamicznego tekstu (rys. 11.6).<br />
Rys. 11.3. Ta akcja startDrag sprawia, ze<br />
klip filmowy podaza za wskaznikiem myszy,<br />
bedac obramowanym prostokatem<br />
o wymiarach 300 x 300 pikseli<br />
Rys. 11.4. Metoda Math.atan2 w polu Value<br />
wymaga podania argumentów y oraz x<br />
Rys. 11.5. Metoda Math.atan2 oblicza kat,<br />
jaki klip filmowy tworzy z punktem<br />
wyjsciowym (lewy górny róg sceny)<br />
Rys. 11.6. Blok dynamicznego tekstu<br />
o nazwie myDegrees wyswietla wartosc kata<br />
w stopniach<br />
344
Manipulowanie danymi<br />
Rys. 11.7. Klip filmowy tworzy kat o wartosci ok.<br />
65 stopni ponizej osi x<br />
Klip filmowy<br />
myreferencePoint<br />
Zmienna<br />
myRadians<br />
Przeciagany klip<br />
filmowy<br />
Blok dynamicznego<br />
tekstu myDegrees<br />
Przeciagany<br />
klip filmowy<br />
(this)<br />
Rys. 11.8. Róznica pomiedzy wspólrzedna y<br />
pozycji przeciaganego klipu filmowego i klipem<br />
filmowym myReferencePoint jest parametrem y<br />
dla metody Math.atan2. Róznica pomiedzy<br />
wspólrzedna x pozycji przeciaganego klipu<br />
filmowego i klipem filmowym myReferencePoint<br />
jest parametrem x dla metody Math.atan2<br />
11. Przetestuj film.<br />
Klip filmowy podaza za wskaznikiem myszy<br />
przesuwanym po scenie. Flash oblicza kat,<br />
jaki klip filmowy tworzy z osia glównej<br />
listwy czasowej i wyswietla wartosc tego<br />
kata (w stopniach) w bloku dynamicznego<br />
tekstu (rys. 11.7).<br />
W celu obliczenia kata<br />
tworzonego wzgledem innego punktu:<br />
1. Kontynuujac poprzednie cwiczenie, utwórz<br />
kolejny symbol klipu filmowego i umiesc<br />
jego klon na scenie. Nazwij go, korzystajac<br />
z pola Name palety Instance.<br />
2. Zaznacz klon pierwszego klipu filmowego<br />
(ten przeciagany) i otwórz palete akcji.<br />
3. Zaznacz wyrazenie obliczajace kat za<br />
pomoca metody atan2. Zmien wyrazenie<br />
w nastepujacy sposób:<br />
Math.atan2((this._y-<br />
_root.myReferencePoint._y),<br />
(this._x-_root.myReferencePoint.<br />
_x));<br />
gdzie myReferencePoint (punkt<br />
odniesienia) jest nazwa drugiego klipu<br />
filmowego, który nie bedzie przeciagany.<br />
Odejmujac wspólrzedne y oraz x punktu<br />
odniesienia od pozycji przeciaganego klipu<br />
filmowego, Flash oblicza odleglosci y i x<br />
pomiedzy dwoma punktami (rys. 11.8).<br />
4. Przetestuj film.<br />
Za przesuwanym przez uzytkownika<br />
wskaznikiem bedzie podazal klip filmowy.<br />
Flash oblicza kat pomiedzy przeciaganym<br />
klipem filmowym i klipem stacjonarnym,<br />
a nastepnie wyswietla wartosc tego kata<br />
(w stopniach) w bloku dynamicznego tekstu.<br />
Obliczanie wartosci katowych<br />
345
Rozdzial 11.<br />
Jak dotad, wartosci obliczanych katów<br />
posiadaly wiele miejsc po przecinku. Czesto<br />
jednak zachodzi potrzeba zaokraglenia tych<br />
wartosci do najblizszej liczby calkowitej, zeby<br />
mozna bylo uzyc ich jako parametrów metod<br />
i wlasciwosci. Uzywaj metod Math.round do<br />
zaokraglania wartosci do najblizszej liczby<br />
calkowitej, Math.ceil do zaokraglania<br />
wartosci do najblizszej liczby calkowitej<br />
wiekszej lub równej wskazanej wartosci oraz<br />
metody Math.floor do zaokraglania wartosci<br />
do najblizszej liczby calkowitej mniejszej lub<br />
równej wskazanej wartosci.<br />
Rys. 11.9. Wartosc wyrazenia w nawiasach<br />
jest zaokraglana do najblizszej liczby<br />
calkowitej i wyswietlana w bloku<br />
dynamicznego tekstu o nazwie myDegrees<br />
Obliczanie wartosci katowych<br />
W celu zaokraglenia<br />
do liczby calkowitej:<br />
1. Kontynuujac poprzednie cwiczenie, zaznacz<br />
przeciagany klip filmowy i otwórz palete<br />
akcji.<br />
2. Zaznacz wyrazenie przeksztalcajace wartosc<br />
w radianach na wartosc w katach.<br />
3. Umiesc kursor w polu Value na poczatku<br />
wyrazenia i wpisz metode Math.round.<br />
Uzyj nawiasów do zgrupowania wyrazenia<br />
dokonujacego przeksztalcenia z radianów na<br />
stopnie (rys. 11.9).<br />
Flash przeksztalci wartosc kata podana<br />
w radianach na stopnie, a potem przypisze<br />
tej wartosci metode Math.round,<br />
ostatecznie zwracajac najblizsza wartosci<br />
liczbe calkowita.<br />
Mozesz wykorzystac metody obliczajace<br />
wartosci katów i zaokraglajace te wartosci do<br />
utworzenia przeciaganego, obrotowego<br />
pokretla. Celem jest tu obliczenie kata<br />
pomiedzy pozycja wskaznika myszy i punktem<br />
srodkowym pokretla. Potem wystarczy<br />
przypisac do tego kata wlasciwosc _rotation.<br />
W celu utworzenia<br />
obrotowego pokretla:<br />
1. Utwórz symbol klipu filmowego o ksztalcie<br />
pokretla. Utwórz symbol przycisku i umiesc<br />
jego klon wewnatrz symbolu klipu<br />
filmowego.<br />
346
Manipulowanie danymi<br />
Rys. 11.10. Przypisz zmiennej pressing wartosc<br />
true dla wcisnietego przycisku<br />
Rys. 11.11. Przypisz zmiennej pressing wartosc<br />
false dla przycisku zwolnionego, takze poza jego<br />
obszarem aktywnym<br />
Rys. 11.12. Zmienna myRadians przechowuje<br />
obliczony kat pomiedzy wskaznikiem myszy<br />
i klipem filmowym<br />
2. Zaznacz klon przycisku umieszczonego<br />
w klipie filmowym i otwórz palete akcji.<br />
3. Wybierz Actions/on. Zaznacz zdarzenie<br />
Press i usun zaznaczenie zdarzenia Release.<br />
4. Wybierz Actions/set variable. W polu<br />
Variable wpisz nazwe zmiennej pressing.<br />
W polu Value wpisz true. Zaznacz pole<br />
wyboru Expression obok pola Value<br />
(rys. 11.10).<br />
5. Wybierz Actions/on. Zaznacz zdarzenia<br />
Release i Release Outside.<br />
6. Wybierz Actions/set variable. W polu<br />
Variable wpisz nazwe zmiennej pressing.<br />
W polu Value wpisz false. Zaznacz pole<br />
wyboru Expression obok pola Value<br />
(rys. 11.11).<br />
Klon przycisku odnotowuje zdarzenia<br />
zarówno jego wcisniecia, jak i zwolnienia.<br />
7. Wróc do glównej listwy czasowej i umiesc<br />
klon twojego klipu filmowego (tego, który<br />
zawiera przycisk) na scenie.<br />
8. Zaznacz klon klipu filmowego i otwórz<br />
palete akcji.<br />
9. Wybierz Actions/onClipEvent. Zaznacz<br />
zdarzenie enterFrame.<br />
10. Wybierz Actions/if. W polu Condition<br />
wpisz pressing == true.<br />
11. Wybierz Actions/set variable. W polu<br />
Variable podaj nazwe zmiennej. W polu<br />
Value wpisz:<br />
Math.atan2((_root._ymousethis._y),<br />
(_root._xmousethis._x));<br />
Zaznacz pole wyboru Expression obok pola<br />
Value.<br />
Flash obliczy kat pomiedzy pozycja<br />
wskaznika myszy i punktem srodkowym<br />
klipu filmowego (rys. 11.12).<br />
Obliczanie wartosci katowych<br />
347
Rozdzial 11.<br />
Obliczanie wartosci katowych<br />
12. Wybierz Actions/set variable. W polu<br />
Variable wpisz nazwe zmiennej. W polu<br />
Value wprowadz wyrazenie umozliwiajace<br />
konwersje radianów na stopnie<br />
i zaokraglajace wynik do najblizszej liczby<br />
calkowitej. Zaznacz pole wyboru<br />
Expression obok pola Value (rys. 11.13).<br />
13. Wybierz Actions/setProperty. Z menu<br />
rozwijanego Property wybierz Rotation.<br />
W polu Target wpisz this. Zaznacz pole<br />
Expression. W polu Value wpisz nazwe<br />
zmiennej przechowujacej wartosc kata<br />
w stopniach i dodaj 90. Zaznacz pole<br />
Expression.<br />
Stopien obrotu klipu filmowego jest<br />
przypisywany do obliczonego kata. Wartosc<br />
90 dodaje sie w celu skompensowania<br />
róznicy pomiedzy obliczonym katem<br />
i wlasciwoscia obrotu klipu filmowego.<br />
Wartosc 0 dla wlasciwosci _rotation<br />
odpowiada pozycji „na godzinie dwunastej”<br />
klipu filmowego, ale jednoczesnie pozycji<br />
„na godzinie trzeciej” obliczonego kata, tak<br />
wiec dodanie 90 wyrównuje te wartosci<br />
(rys. 11.14).<br />
14. Przetestuj film.<br />
Kiedy uzytkownik kliknie przycisk na<br />
pokretle, bedzie mógl obracac pokretlem<br />
wokól jego punktu srodkowego. Pokretlo<br />
przestanie sie obracac po zwolnieniu<br />
przycisku.<br />
Rys. 11.13. Wartosc kata jest przeksztalcana<br />
z radianów na stopnie, zaokraglana do<br />
najblizszej liczby calkowitej i przypisywana<br />
do zmiennej myDegrees<br />
this_rotation = 0<br />
myDegrees = 0<br />
Rys. 11.14. Obrót klipu filmowego jest<br />
ustawiony na podstawie wartosci zmiennej<br />
myDegrees + 90 stopni, w celu zniwelowania<br />
róznicy pomiedzy obliczonym katem<br />
(myDegrees) i wlasciwoscia obrotu<br />
348
Manipulowanie danymi<br />
1<br />
x<br />
Rys. 11.15. Wartosci x oraz y dla tego<br />
samochodu, przebywajacego okreslona odleglosc,<br />
sa definiowane przez sinus i cosinus jego kata<br />
Rys. 11.16. Obrót klipu filmowego zaczyna sie na<br />
osi pionowej i zmierza w kierunku ruchu<br />
wskazówek zegara (z lewej). Wartosci sinusa<br />
i cosinusa kata zaczynaja sie na osi poziomej<br />
i rosna w kierunku przeciwnym do ruchu<br />
wskazówek zegara (z prawej)<br />
y<br />
Odleglosc<br />
Kat<br />
Uzywanie funkcji sinus<br />
i cosinus<br />
do wyznaczania ruchu<br />
ukierunkowanego<br />
Jesli chcesz kontrolowac dystans przebyty na<br />
scenie przez obiekt w oparciu o kat, mozesz<br />
uzyc funkcji trygonometrycznych sinusa<br />
i cosinusa, które pomoga ci wykonac obliczenia.<br />
Zalózmy, ze masz zamiar stworzyc gre<br />
wyscigowa z samochodem poruszanym przez<br />
uzytkownika wokól sciezki. Samochód<br />
podrózowalby z okreslona predkoscia<br />
i w kierunku, w którym skierowany jest jego<br />
przód. Jesli jest skierowany do góry, samochód<br />
pojedzie do przodu. Jesli jest skierowany<br />
w prawo, samochód pojedzie w prawo. Jesli jest<br />
skierowany pod katem 75 stopni, samochód<br />
równiez pojedzie w odpowiednim dla tego<br />
polozenia kierunku. Obliczenie odleglosci, jaka<br />
ma przebyc samochód w kierunku poziomym<br />
i pionowym, wymaga uzycia metod Math.sin<br />
i Math.cos obiektu matematycznego. Nowa<br />
pozycja samochodu jest okreslana przez boki x<br />
oraz y trójkata tworzonego przez kat ustawienia<br />
samochodu. Kiedy samochód jest skierowany<br />
do góry, wartosc y wynosi 1 i wartosc x równa<br />
sie 0. Jesli skierowac samochód na prawo, to<br />
wartosc y wynosi 0 i wartosc x równa jest 1.<br />
W przypadku, gdy samochód jest ustawiony<br />
w jakims kierunku posrednim, sinus i cosinus<br />
kata pozwola ci obliczyc stosunek x do y<br />
(rys. 11.15). Sinus kata okresla wartosc<br />
bezwzgledna y, a cosinus – wartosc<br />
bezwzgledna x. Warto zauwazyc, ze, sinus<br />
i cosinus bazuja na katach rozpoczynajacych sie<br />
od wartosci 0 stopni na osi poziomej. Natomiast<br />
wlasciwosc obrotu (_rotation) jest oparta na<br />
katach rozpoczynajacych sie od wartosci 0<br />
stopni na osi pionowej. Stad konieczne jest<br />
uzycie cosinusa w przypadku wartosci y i sinusa<br />
dla wartosci x (rys. 11.16).<br />
mojSamochod._y = mojSamochod_y –<br />
Math.cos(kat);<br />
mojSamochod._x = mojSamochod_x +<br />
Math.sin(kat);<br />
Uzywanie funkcji sinus i cosinus<br />
349
Rozdzial 11.<br />
Uzywanie funkcji sinus i cosinus<br />
W ponizszym cwiczeniu utworzysz klip<br />
filmowy, którego stopien obrotu bedzie<br />
kontrolowany przez uzytkownika. Klip filmowy<br />
ma tutaj stala predkosc, bedzie wiec zmierzal<br />
w kierunku, w jakim go ustawiono – podobnie<br />
jak samochód, który jedzie tak, jak sterujesz<br />
kierownica.<br />
W celu<br />
utworzenia sterowanego obiektu<br />
przemieszczajacego sie<br />
ruchem kierunkowym:<br />
1. Utwórz symbol klipu filmowego, umiesc<br />
jego klon na scenie i nadaj mu nazwe.<br />
2. Zaznacz klon klipu filmowego i otwórz<br />
palete akcji.<br />
3. Wybierz Actions/onClipEvent. Zaznacz<br />
zdarzenie Key Down.<br />
4. Wybierz Actions/if. W polu Condition<br />
wpisz:<br />
Key.isDown (Key.LEFT);<br />
Flash sprawdzi, czy wcisnieto klawisz<br />
strzalki w lewo.<br />
5. Wybierz Actions/evaluate . W polu<br />
Expression wpisz myRotation jako nazwe<br />
zmiennej obrotu klipu filmowego, nastepnie<br />
operator -= i na koncu liczbe 10. Flash<br />
odejmie 10 od biezacej wartosci zmiennej<br />
myRotation, jesli wcisniety zostanie<br />
klawisz strzalki w lewo (rys. 11.17).<br />
6. Wybierz Actions/else. W polu Condition<br />
wpisz:<br />
Key.isDown (Key.RIGHT);<br />
Flash sprawdzi, czy wcisnieto klawisz<br />
strzalki w prawo.<br />
7. Wybierz Actions/evaluate . W polu<br />
Expression wpisz myRotation, nastepnie<br />
operator += i na koncu liczbe 10.<br />
Flash doda 10 do biezacej wartosci zmiennej<br />
myRotation, jesli wcisniety zostanie<br />
klawisz strzalki w prawo (rys. 11.18).<br />
Rys. 11.17. Zmienna myRotation zwieksza<br />
swoja wartosc po nacisnieciu klawisza<br />
strzalki w lewo<br />
Rys. 11.18. Zmienna myRotation zwieksza<br />
swoja wartosc po nacisnieciu klawisza<br />
strzalki w prawo<br />
350
Manipulowanie danymi<br />
Rys. 11.19. Cosinus kata obrotu klipu filmowego<br />
jest po obliczeniu przypisywany do zmiennej<br />
ychange<br />
Rys. 11.20. Sinus kata obrotu klipu filmowego<br />
jest po obliczeniu przypisywany do zmiennej<br />
xchange<br />
8. Wybierz Actions/onClipEvent. Zaznacz<br />
zdarzenie enterFrame.<br />
9. Wybierz Actions/set variable. W polu<br />
Variable wpisz nazwe zmiennej ychange.<br />
Umiesc wskaznik myszy w polu Value<br />
i wybierz Objects/Math/cos. W polu Value<br />
pojawi sie metoda Math.cos<br />
z podswietlonym argumentem.<br />
10. W miejsce podswietlonego argumentu<br />
wstaw wyrazenie przeksztalcajace wartosc<br />
zmiennej myRotation z radianów na<br />
stopnie. Pomnóz cale wyrazenie przez 3<br />
i zaznacz pole wyboru Expression obok<br />
pola Value (rys. 11.19).<br />
Zmienna ychange repre zentuje wartosc<br />
bezwzgledna boku trójkata y. Pomnozenie<br />
przez 3 zwieksza te wartosc, dzieki czemu<br />
klip filmowy porusza sie nieco szybciej<br />
w kierunku y.<br />
11. Wybierz Actions/set variable. W polu<br />
Variable wpisz nazwe zmiennej xchange.<br />
Umiesc wskaznik w polu Value i wybierz<br />
Objects/Math/cos. W polu Value pojawi<br />
sie metoda Math.sin z podswietlonym<br />
argumentem.<br />
12. W miejsce podswietlonego argumentu<br />
wstaw wyrazenie przeksztalcajace wartosc<br />
zmiennej myRotation z radianów na<br />
stopnie. Pomnóz cale wyrazenie przez 3<br />
i zaznacz pole wyboru Expression obok<br />
pola Value (rys. 11.20).<br />
Zmienna xchange reprezentuje wartosc<br />
bezwzgledna boku trójkata x. Pomnozenie<br />
przez 3 zwieksza te wartosc, dzieki czemu<br />
klip filmowy porusza sie nieco szybciej<br />
w kierunku x.<br />
Uzywanie funkcji sinus i cosinus<br />
351
Rozdzial 11.<br />
Uzywanie funkcji sinus i cosinus<br />
13. Wybierz Actions/setProperty. Z menu<br />
rozwijanego Property wybierz Y Position.<br />
W polu Target wpisz this. W polu Value<br />
wpisz:<br />
this._y – ychange;<br />
Zaznacz obydwa pola wyboru Expression.<br />
14. Wybierz Actions/setProperty. Z menu<br />
rozwijanego Property wybierz X Position.<br />
W polu Target wpisz this. W polu Value<br />
wpisz:<br />
this._x + xchange;<br />
Zaznacz obydwa pola wyboru Expression.<br />
15. Wybierz Actions/setProperty. Z menu<br />
rozwijanego Property wybierz Rotation.<br />
W polu Target wpisz this. W polu Value<br />
wpisz nazwe zmiennej myRotation.<br />
Zaznacz obydwa pola wyboru Expression<br />
(rys. 11.21).<br />
16. Przetestuj film.<br />
Kiedy uzytkownik nacisnie klawisz strzalki<br />
w lewo lub strzalki, zmieni sie stopien<br />
obrotu klipu filmowego. Zmienia sie tez<br />
wartosci x oraz y, obliczone na podstawie<br />
kata klipu filmowego. Klip filmowy bedzie<br />
sie poruszal w kierunku, w jakim<br />
skierowany jest jego „nos” (tutaj – przód<br />
samochodu) (rys. 11.22).<br />
Rys. 11.21. Ostatnie trzy wyrazenia<br />
setProperty widoczne w oknie skryptu<br />
modyfikuja pozycje x i y w zmiennych<br />
xchange oraz ychange; zmieniaja tez stopien<br />
obrotu klipu filmowego na podstawie<br />
zmiennej myRotation<br />
Rys. 11.22. Kiedy klip filmowy samochodu<br />
obraca sie, wartosci x i y sa obliczane na<br />
podstawie sinusa oraz cosinusa kata,<br />
a w rezultacie definiowana jest nowa<br />
pozycja samochodu<br />
352
Manipulowanie danymi<br />
c<br />
b<br />
Obliczanie odleglosci<br />
za pomoca<br />
obiektu matematycznego<br />
a<br />
Rys. 11.23. Ten trójkat prostokatny ma boki<br />
oznaczone jako a, b i c<br />
Dzieki wykorzystaniu wlasciwosci twierdzenia<br />
Pitagorasa, Flash umozliwia obliczenie<br />
odleglosci pomiedzy dwoma obiektami.<br />
Technika ta moze byc uzyteczna w tworzeniu<br />
niespotykanych interakcji, zachodzacych<br />
miedzy elementami interfejsu – np. grafika,<br />
przyciskami lub dzwiekami, reagujacymi<br />
w zaleznosci od ich odleglosci w stosunku<br />
do wskaznika myszy. Mozliwe jest nawet<br />
projektowanie gier z interakcja bazujaca na<br />
odleglosci miedzy obiektami i graczem.<br />
Przykladowo, gra, w której gracz uzywa siatki<br />
do zlapania zlotej rybki plywajacej po<br />
akwarium, moze wykorzystywac odleglosc<br />
pomiedzy zlota rybka i siatka w celu<br />
zasymulowania zachowania rybki. Byc moze<br />
im blizej znajduje sie siatka, tym szybciej rybka<br />
bedzie uciekac.<br />
Odleglosc pomiedzy dwoma dowolnymi<br />
punktami jest opisywana równaniem:<br />
a 2 + b 2 = c 2<br />
lub<br />
c = pierwiastek kwadratowy (a 2 + b 2 )<br />
Zmienne a i b o znaczaja dlugosci boków<br />
trójkata prostokatnego, natomiast c jest<br />
dlugoscia przeciwprostokatnej (rys. 11.23).<br />
Uzywajac metod Flasha, Math.sqrt oraz<br />
Math.pow, odleglosc miedzy punktami na<br />
przeciwprostokatnej mozna obliczyc za pomoca<br />
wyrazenia:<br />
c = Math.sqrt ((Math.pow (a, 2)) +<br />
(Math.pow (b, 2)));<br />
Obliczanie odleglosci<br />
353
Rozdzial 11.<br />
Obliczanie odleglosci<br />
W celu obliczenia odleglosci<br />
pomiedzy wskaznikiem myszy<br />
i dowolnym punktem:<br />
1. Utwórz klip filmowy i umiesc jego klon na<br />
scenie. Za pomoca pola Name palety<br />
Instance nadaj mu nazwe.<br />
2. Zaznacz klon klipu filmowego i otwórz<br />
palete akcji.<br />
3. Wybierz Actions/onClipEvent. Zaznacz<br />
zdarzenie Mouse move.<br />
4. Wybierz Actions/set variable. W polu<br />
Variable wpisz xDistance. W polu Value<br />
wpisz:<br />
_root._xmouse – this._x<br />
Zaznacz pole wyboru Expression obok pola<br />
Value.<br />
Odleglosc pomiedzy wspólrzedna x<br />
polozenia wskaznika myszy i wspólrzedna x<br />
polozenia klipu filmowego zostanie<br />
przypisana do zmiennej xDistance<br />
(rys. 11.24).<br />
5. Wybierz Actions/set variable. W polu<br />
Variable wpisz yDistance. W polu Value<br />
wpisz:<br />
_root._ymouse – this._y<br />
Zaznacz pole wyboru Expression obok pola<br />
Value.<br />
Odleglosc pomiedzy wspólrzedna y<br />
polozenia wskaznika myszy i wspólrzedna y<br />
polozenia klipu filmowego zostanie<br />
przypisana do zmiennej yDistance<br />
(rys. 11.25).<br />
6. Wybierz Actions/set variable. W polu<br />
Variable wpisz nazwe zmiennej<br />
myDistance. Umiesc wskaznik w polu<br />
Value i wybierz Objects/Math/sqrt.<br />
W polu Value pojawi sie metoda<br />
Math.sqrt z podswietlonym argumentem.<br />
Rys. 11.24. Róznica pomiedzy wspólrzedna x<br />
polozenia wskaznika myszy i wspólrzedna x<br />
polozenia klipu filmowego stanowi odleglosc<br />
miedzy nimi na osi x<br />
Rys. 11.25. Róznica pomiedzy wspólrzedna y<br />
polozenia wskaznika myszy i wspólrzedna y<br />
polozenia klipu filmowego stanowi odleglosc<br />
miedzy nimi na osi y<br />
354
Manipulowanie danymi<br />
Rys. 11.26. Odleglosc miedzy dwoma punktami<br />
jest obliczana na podstawie wartosci zmiennych<br />
xDistance i yDistance<br />
Zmienna<br />
myDistance<br />
Blok dynamicznego<br />
tekstu myDisplay<br />
7. W miejsce podswietlonego argumentu<br />
wstaw nowy, wybierajac<br />
Objects/Math/pow i wpisujac xDistance<br />
oraz 2 dla metody Math.pow. Dodaj kolejna<br />
metode Math.pow, z argumentami<br />
yDistance i 2 (rys. 11.26).<br />
Flash obliczy kwadrat wartosci zmiennej<br />
xDistance i doda ja do kwadratu wartosci<br />
zmiennej yDistance. Nastepnie obliczy<br />
kwadrat wartosci tej sumy.<br />
8. Wybierz Actions/set variable. Przypisz<br />
wartosc zmiennej myDistance do bloku<br />
dynamicznego tekstu na scenie (rys. 11.27).<br />
9. Przetestuj film.<br />
Kiedy wskaznik przemieszcza sie po<br />
obszarze klipu filmowego, Flash oblicza<br />
odleglosc miedzy nimi w pikselach.<br />
Rys. 11.27. Blok dynamicznego tekstu myDisplay<br />
pokazuje wartosc calkowita zmiennej myDistance<br />
Obliczanie odleglosci<br />
355
Rozdzial 11.<br />
Generowanie liczb losowych<br />
Generowanie liczb losowych<br />
Gdybys potrzebowal wlaczyc do swojego filmu<br />
Flasha jakies elementy przypadkowosci, czy to<br />
dla uatrakcyjnienia projektu, czy tez na potrzeby<br />
mechaniki gry, mozesz w tym celu skorzystac<br />
z metody obiektu matematycznego o nazwie<br />
Math.random. Metoda ta pozwala generowac<br />
liczby z zakresu 0 do 1, z uwzglednieniem<br />
maksymalnie 15 miejsc po przecinku.<br />
Przykladowe wartosci zwracane przez te metode<br />
moga wygladac nastepujaco:<br />
0.242343544598273<br />
0.043628738493829<br />
0.7567833408654<br />
Liczbe losowa mozna modyfikowac, mnozac jej<br />
wartosc lub dodajac do niej inna wartosc<br />
i w efekcie otrzymujac okreslony zakres liczb.<br />
Przykladowo, jesli potrzebujesz liczb losowych<br />
z zakresu 1 do 10, pomnóz wartosc zwracana<br />
przez metode Math.random przez 9,<br />
a nastepnie dodaj 1, jak w wyrazeniu:<br />
Math.random () * 9 + 1;<br />
Jesli chodzi ci o liczbe calkowita, uzyj metody<br />
Math.round, która zaokragli wartosc do<br />
najblizszej liczby calkowitej.<br />
W celu wygenerowania liczby losowej:<br />
1. Utwórz symbol przycisku i umiesc jego klon<br />
na scenie. Zaznacz klon i otwórz palete akcji.<br />
2. Wybierz Actions/set variable.<br />
3. W polu Variable wpisz nazwe zmiennej.<br />
Umiesc wskaznik myszy w polu Value<br />
i wybierz Objects/Math/random. Zaznacz<br />
pole wyboru Expression.<br />
W polu Variable pojawi sie metoda<br />
Math.random (rys. 11.28).<br />
4. Utwórz na scenie blok dynamicznego tekstu,<br />
o tej samej nazwie zmiennej, jakiej uzyles<br />
w przypadku akcji przypisanych do klonu<br />
przycisku. Po kliknieciu przycisku,<br />
wygenerowana zostanie nowa liczba losowa<br />
z zakresu 0 do 1. Zobaczysz ja w bloku<br />
dynamicznego tekstu.<br />
Rys. 11.28. Liczba losowa z zakresu 0 do 1<br />
jest przypisywana do zmiennej<br />
myRandomNumber (moja liczba losowa)<br />
356
Manipulowanie danymi<br />
Rys. 11.29. Zmienna myRandomX jest<br />
przypisywana do liczby z zakresu 1 do 300<br />
Rys. 11.30. Wspólrzedna x polozenia klipu<br />
filmowego otrzymuje zaokraglona wartosc<br />
zmiennej myRandomX<br />
Wykorzystaj losowo generowane liczby do<br />
nadania twojemu filmowi nieprzewidywalnych,<br />
animowanych elementów. Wrogie statki<br />
kosmiczne w grze zrecznosciowej moga<br />
atakowac z któregokolwiek miejsca na ekranie.<br />
Mozesz zmusic Flasha do losowego rozdawania<br />
kart z talii – tak, ze kazda sterta bedzie inna niz<br />
pozostale. Tymczasem na potrzeby testu dobrze<br />
byloby wymieszac czasem kolejnosc pojawiania<br />
sie pytan. Ponizsze cwiczenie demonstruje<br />
sposób, w jaki liczby losowe moga<br />
modyfikowac wartosci wlasciwosci, zmieniajac<br />
wlasciwosci x oraz y klipu filmowego:<br />
W celu uzycia liczb losowych<br />
jako wartosci wlasciwosci:<br />
1. Stwórz symbol klipu filmowego i umiesc<br />
jego klon na scenie. Nadaj mu nazwe przy<br />
pomocy pola Name palety Instance.<br />
2. Zaznacz klon klipu filmowego i otwórz<br />
palete akcji.<br />
3. Wybierz Actions/onClipEvent. Zaznacz<br />
zdarzenie enterFrame.<br />
4. Wybierz Actions/set variable. W polu<br />
Variable wpisz nazwe zmiennej. W polu<br />
Value wpisz:<br />
Math.random () * 299 + 1;<br />
Zaznacz pole Expression.<br />
Flash wygeneruje liczbe losowa z zakresu 1<br />
do 300 (rys. 11.29).<br />
5. Ponownie wybierz Actions/set variable.<br />
Przypisz druga zmienna do liczby losowej<br />
z zakresu 1 do 300.<br />
6. Wybierz Actions/setProperty. W menu<br />
rozwijanym Property zaznacz X Position.<br />
W polu Target wpisz this. W polu Value,<br />
nadaj metode Math.round pierwszej<br />
z wygenerowanych liczb losowych. Zaznacz<br />
obydwa pola wyboru Expression<br />
(rys. 11.30).<br />
Wspólrzedna polozenia x klipu filmowego<br />
zostanie przypisana do pierwszej<br />
wygenerowanej losowo liczby.<br />
Generowanie liczb losowych<br />
357
Rozdzial 11.<br />
Generowanie liczb losowych<br />
7. Wybierz Actions/setProperty. W menu<br />
rozwijanym Property zaznacz Y Position.<br />
W polu Target wpisz this. W polu Value,<br />
nadaj metode Math.round drugiej<br />
z wygenerowanych liczb losowych. Zaznacz<br />
obydwa pola wyboru Expression.<br />
Wspólrzedna polozenia y klipu filmowego<br />
zostanie przypisana do pierwszej<br />
wygenerowanej losowo liczby (rys. 11.31).<br />
8. Ustaw rozmiar sceny na 300×300. Przetestuj<br />
film. Wspólrzedne polozenia klipu<br />
filmowego zmieniaja sie losowo i w efekcie<br />
klip pojawia sie w róznych punktach sceny.<br />
Wskazówka<br />
• Metoda Math.random zastepuje akcje<br />
random, uzywana we wczesniejszych<br />
wersjach Flasha. Chociaz akcja ta wciaz<br />
dziala, to jednak nalezy do grupy funkcji<br />
odrzuconych, wiec do generowania liczb<br />
losowych postaraj sie raczej uzywac obiektu<br />
matematycznego.<br />
Klip filmowy<br />
Rys. 11.31. Wspólrzedna y polozenia klipu<br />
filmowego otrzymuje zaokraglona wartosc<br />
zmiennej myRandomY. Klip filmowy zmienia<br />
teraz swoja pozycje na scenie w sposób<br />
losowy (u góry)<br />
358
Manipulowanie danymi<br />
Rys. 11.32. Tablica przypomina dwukolumnowa<br />
tabele, przy czym jedna z kolumn zawiera<br />
indeksy, a druga odpowiadajace im wartosci<br />
Porzadkowanie informacji<br />
za pomoca tablic<br />
Kiedy masz do czynienia z wieloma<br />
fragmentami powiazanych informacji<br />
przeznaczonych do przechowywania, moze<br />
zajsc potrzeba skorzystania z obiektu<br />
tablicowego (Array) do odpowiedniego<br />
ulozenia tych informacji. Tablice sa, podobnie<br />
jak zmienne, pojemnikami na dane, tyle ze –<br />
w odróznieniu od zmiennych – przechowuja te<br />
dane w okreslonej sekwencji, nazywanej<br />
indeksem (index). Pierwszy indeks ma zawsze<br />
wartosc 0, a kolejne indeksy oznaczane sa<br />
sekwencyjnie, tak wiec kazdy fragment danych<br />
odpowiada jednemu indeksowi, tak jak to<br />
zilustrowano w dwukolumnowej tabeli na<br />
rys. 11.32. Skoro kazdy fragment danych jest<br />
ulozony numerycznie, informacje moga byc<br />
odczytywane i modyfikowane w latwy, a co<br />
wazniejsze, automatyczny sposób, po prostu<br />
przez odwolanie do indeksu. Zalózmy np., ze<br />
tworzysz obcojezyczny samouczek i pragniesz<br />
miec mozliwosc sprawdzania zawartosci<br />
wprowadzonego przez uzytkownika tekstu<br />
w poszukiwaniu waznych slów. Móglbys<br />
w takiej sytuacji przechowywac te slowa<br />
w tablicach, gdzie indeks 0 wskazywalby<br />
pierwsze slowo, indeks 1 drugie, itd. Uzywajac<br />
wyrazenia do utworzenia petli, mozesz<br />
automatycznie sprawdzac wprowadzany tekst<br />
pod katem kazdej z danych przechowywanych<br />
w tablicy.<br />
Indeksy tablic podaje sie w nawiasach<br />
kwadratowych, jak w wyrazeniu:<br />
mojaTablica[4]<br />
Nawiasy kwadratowe nazywaja sie tutaj<br />
operatorami dostepu do tablic. Powyzsze<br />
wyrazenie daje dostep do danych w indeksie 4<br />
tablicy o nazwie mojaTablica. Liczba danych<br />
okresla dlugosc tablicy, wiec tablica na<br />
rys. 11.32 ma dlugosc 6. Tablica przypomina<br />
taka sekwencje uporzadkowanych zmiennych.<br />
Porzadkowanie informacji<br />
359
Rozdzial 11.<br />
Porzadkowanie informacji<br />
Na przyklad, zmienne mojeWyniki0,<br />
mojeWyniki1, mojeWyniki2 i mojeWyniki3<br />
moga tworzyc razem pojedyncza tablice<br />
o nazwie mojeWyniki i dlugosci 4, z indeksami<br />
pomiedzy 0 i 3. Jako ze ostatecznie masz do<br />
czynienia z jednym obiektem tablicowym<br />
zamiast czterech osobnych zmiennych,<br />
uzywanie tablic znacznie ulatwia zarzadzanie<br />
danymi.<br />
Dane przechowywane w tablicach moga byc<br />
mieszane. Tak wiec mozliwe jest przypisanie<br />
do indeksu 0 liczby, lancucha znakowego do<br />
indeksu 1 i wartosci logicznej do indeksu 2. I<br />
podobnie, jak w przypadku zmiennych, mozesz<br />
w dowolnej chwili zmieniac zawartosc kazdego<br />
z indeksów tablicy. Dlugosc tablicy tez nie jest<br />
scisle okreslona, dzieki czemu tablice moga<br />
odpowiednio zwiekszac lub zmniejszac<br />
pojemnosc stosownie do potrzeb.<br />
Na stworzenie tablicy skladaja sie dwie<br />
czynnosci. Pierwsza to przygotowanie klonu<br />
nowej tablicy z obiektu tablicowego za pomoca<br />
funkcji konstruktora. Oto przyklad:<br />
mojaZmienna = new Array ();<br />
Druga czynnosc to wypelnienie tablicy danymi.<br />
Jednym ze sposobów wypelnienia tablicy jest<br />
przypisanie danej do kazdego indeksu<br />
w osobnym wyrazeniu:<br />
mojaTablica [0] = "Russel";<br />
mojaTablica [1] = "Rebecca";<br />
mojaTablica [2] = "Elissa";<br />
mojaTablica [3] = "Marjorie";<br />
Drugi sposób polega na podstawieniu danych<br />
za pomoca funkcji konstruktora:<br />
MojaTablica = new Array ("Russel",<br />
"Rebecca", "Elissa", "Marjorie");<br />
Powyzsza metoda jest poreczniejsza<br />
w wypelnianiu tablic, ale musisz pamietac<br />
o wprowadzaniu danych w sekwencji.<br />
360
Manipulowanie danymi<br />
Rys. 11.33. Utworzono klon nowego obiektu<br />
o nazwie myArray (moja tablica)<br />
Rys. 11.34. Ta tablica zawiera trzy wpisy<br />
W celu utworzenia tablicy:<br />
1. Zaznacz pierwsze ujecie kluczowe na listwie<br />
czasowej i otwórz palete akcji.<br />
2. Wybierz Actions/set variable.<br />
3. W polu Variable wpisz nazwe twojej<br />
tablicy. Umiesc kursor w polu Value<br />
i wybierz Objects/Array/new Array.<br />
Zaznacz pole wyboru Expression obok pola<br />
Value.<br />
W polu Value pojawi sie funkcja<br />
konstruktora new Array. Flash utworzy<br />
klon nowej tablicy (rys. 11.33).<br />
4. Wybierz Actions/set variable.<br />
5. W polu Variable wpisz nazwe twojej nowej<br />
tablicy, a nastepnie indeks w nawiasach<br />
kwadratowych. W polu Value wprowadz<br />
dane, które maja byc przechowywane<br />
w tablicy pod tym indeksem (rys. 11.34).<br />
6. Kontynuuj korzystanie z polecenia<br />
Actions/set variable w celu przypisania<br />
kolejnych danych do tablicy.<br />
Wskazówka<br />
• Mozesz predefiniowac dlugosc nowej<br />
tablicy, umieszczajac liczbe w nawiasach<br />
funkcji konstruktora. Przykladowo,<br />
wyrazenie:<br />
mojaTablica = new Array (4)<br />
utworzy nowa tablice o dlugosci czterech<br />
wpisów. Nawet jesli nie wypelnisz<br />
wszystkich pozycji tablicy, mojaTablica<br />
i tak bedzie miala dlugosc 4.<br />
Porzadkowanie informacji<br />
361
Rozdzial 11.<br />
Porzadkowanie informacji<br />
Jako ze dane zawarte w tablicach sa<br />
indeksowane numerycznie, swietnie nadaja sie<br />
do wykorzystania w zapetlonych akcjach.<br />
Korzystajac z akcji tego typu, np. while,<br />
do while i for, mozesz sprawic, ze Flash<br />
przesledzi wartosc kazdego indeksu oraz<br />
odczyta lub przypisze nowe dane szybko<br />
i automatycznie. Przykladowo, zeby ustalic<br />
srednia punktów kilku graczy w tablicy bez<br />
zapetlajacej sie akcji, musialbys zsumowac<br />
wszystkie zdobyte przez nich punkty i podzielic<br />
otrzymana wartosc przez liczbe graczy, jak<br />
w wyrazeniu:<br />
mojaSuma = mojePunkty [0] +<br />
mojePunkty [1] + mojePunkty [2] +<br />
... ;<br />
mojaSrednia =<br />
mojaSuma/mojePunkty.length;<br />
Wlasciwosc length definiuje liczbe pozycji<br />
w tablicy.<br />
Jednak uzywajac zapetlonej akcji, móglbys<br />
obliczyc wartosc mojaSuma nastepujaco:<br />
For (i=0; i
Manipulowanie danymi<br />
Rys. 11.36. Ta akcja for bedzie wykonana tyle<br />
razy, ile jest wpisów w tablicy myScore<br />
Rys. 11.37. Zmienna mySum dodaje wartosc<br />
kazdego z wpisów w tablicy<br />
Rys. 11.38. Poza petla for, zmienna myAverage<br />
oblicza srednia wartosc wpisów w tablicy<br />
4. Utwórz symbol przycisku i umiesc jego klon<br />
na scenie. Zaznacz klon przycisku i otwórz<br />
palete akcji.<br />
5. Wybierz Actions/for. W polu Init wpisz<br />
i=0. W polu Condition wprowadz<br />
i
Rozdzial 11.<br />
Metody obiektu tablicowego pozwalaja<br />
sortowac, usuwac, dodawac dane zgromadzone<br />
w tablicy i manipulowac . Liste metod obiektu<br />
tablicowego przedstawia tabela 11.2. Bardzo<br />
pomocne jest rozwazanie metod w parach.<br />
Przykladowo, shift oraz unshift to metody<br />
modyfikujace poczatek tablicy; push i pop<br />
modyfikuja koniec tablicy; wreszcie slice<br />
i spice pozwalaja modyfikowac srodek tablicy.<br />
Porzadkowanie informacji<br />
Tabela 11.2. Metody obiektu tablicowego<br />
Metoda<br />
Opis<br />
concat(array1,...,arrayN) Wiaze wskazane wartosci (tablice) i zwraca nowa tablice.<br />
join(separator)<br />
Wiaze elementy tablicy, wstawia pomiedzy elementy separator<br />
(dowolny znak) i zwraca lancuch znakowy.<br />
pop()<br />
Usuwa ostatni element w tablicy i zwraca wartosc tego elementu.<br />
push(value)<br />
Dodaje elementy do konca tablicy i zwraca nowa dlugosc.<br />
shift()<br />
Usuwa pierwszy element w tablicy i zwraca wartosc tego elementu.<br />
unshift(value)<br />
Dodaje elementy do poczatku tablicy i zwraca nowa dlugosc.<br />
slice(indexA, indexB) Zwraca nowa tablice zaczynajaca sie od indexA i konczaca sie na<br />
(indexB-1).<br />
splice(index, count,<br />
elem1,..., elemN)<br />
reverse()<br />
sort()<br />
toString()<br />
Wstawia lub usuwa elementy. Ustaw count to 0 w celu<br />
wstawienia wskazanych wartosci zaczynajac o indeksu. Ustaw<br />
count>0 w celu usuniecia danej liczby elementów, zaczynajac od<br />
indeksu (i lacznie z tym indeksem).<br />
Odwraca kolejnosc elementów w tablicy.<br />
Sortuje tablice, uzywajac operatora
Manipulowanie danymi<br />
Tabela 11.2. Metody obiektu tablicowego (ciag dalszy)<br />
Ponizej przedstawiono przyklady dzialania niektórych metod:<br />
Wyrazenie<br />
Wartosc tablicy myArray<br />
myArray = new Array (2, 4, 6, 8) 2, 4, 6, 8<br />
myArray.pop() 2, 4, 6<br />
myArray.push(1, 3) 2, 4, 6, 1, 3<br />
myArray.shift() 4, 6, 1, 3<br />
myArray.unshift(5, 7) 5, 7, 4, 6, 1, 3<br />
myArray.splice(2, 0, 8, 9) 5, 7, 8, 9, 4, 6, 1, 3,<br />
myArray.splice(3, 2) 5, 7, 8, 6, 1, 3,<br />
myArray.reverse() 3, 1, 6, 8, 7, 5<br />
myArray.sort() 1, 3, 5, 6, 7, 8<br />
Wskazówki<br />
• Nalezy pamietac, które metody obiektu<br />
tablicowego modyfikuja biezaca tablice,<br />
a które zwracaja nowa tablice. Metody<br />
concat, join, slice i toString zwracaja<br />
nowe tablice lub lancuchy znakowe<br />
i wymagaja przypisania ich wartosci<br />
do zmiennych. Przykladowo,<br />
mojaNowaTablica = mojaTablica.<br />
concat(8) umieszcza 8 na koncu tablicy<br />
mojaTablica i przypisuje koncowa postac<br />
tej tablicy do mojaNowaTablica.<br />
• Zwróc takze uwage na to, ze niektóre<br />
metody modyfikuja tablice, jak równiez<br />
zwracaja specyficzna wartosc. To nie jest to<br />
samo. Przykladowo, wyrazenie<br />
mojaTablica.pop() modyfikuje tablice<br />
mojaTablica, usuwajac ostatni element,<br />
a ponadto zwraca wartosc tego ostatniego<br />
elementu. Rozwaz przyklad:<br />
mojaTablica = new Array (2, 4, 6,<br />
8);<br />
mojeUsuniecie =<br />
mojaTablica.pop();<br />
Wartosc mojeUsuniecie to 8, a wartoscia<br />
tablicy mojaTablica jest teraz 2, 4, 6.<br />
Porzadkowanie informacji<br />
365
Wskazania daty i pomiaru czasu<br />
Rozdzial 11.<br />
Wprowadzanie<br />
wskazan daty i pomiaru czasu<br />
Obiekt daty (Date) umozliwia odczytanie<br />
informacji o dacie i czasie lokalnym oraz<br />
uniwersalnym (GMT) na podstawie zegara<br />
systemowego w komputerze uzytkownika.<br />
Za pomoca obiektu daty uzyskasz takie<br />
informacje, jak rok, miesiac, dzien, dzien<br />
tygodnia, godzina, minuta sekunda<br />
i milisekunda. Uzyj obiektu i jego metod<br />
do wprowadzenia do filmu zegara lub tez do<br />
uzyskiwania informacji o okreslonych datach<br />
z przeszlosci. Mozesz, na przyklad,<br />
przygotowac obiekt daty dla dnia twoich<br />
urodzin, podajac miesiac, dzien i rok. Pózniej,<br />
za pomoca metod obiektu daty, bedziesz mógl<br />
okreslic dzien tygodnia, w którym przyszedles<br />
na swiat.<br />
Zeby móc uzyc obiektu daty, trzeba najpierw<br />
utworzyc jego klon, poslugujac sie przy tym<br />
funkcja konstruktora new Date. Potem mozna<br />
juz wywolywac metody obiektu i uzyskiwac<br />
pozadane informacje. Powszechnie uzywane<br />
metody, sluzace do uzyskiwania informacji<br />
o dacie i czasie, przedstawia tabela 11.3.<br />
W celu utworzenia zegara:<br />
1. Utwórz na scenie blok dynamicznego tekstu<br />
i nadaj mu nazwe zmiennej.<br />
2. Zaznacz blok dynamicznego tekstu<br />
i wybierz Insert/Convert to Symbol.<br />
Przydziel dla symbolu nazwe i wybierz<br />
opcje Movie Clip w typie Behavior.<br />
Kliknij OK.<br />
Twój blok dynamicznego tekstu zostanie<br />
umieszczony w symbolu klipu filmowego,<br />
którego klon pozostanie na scenie.<br />
3. Zaznacz klon klipu filmowego i otwórz<br />
palete akcji.<br />
4. Wybierz Actions/onClipEvent. Zaznacz<br />
zdarzenie enterFrame.<br />
Tabela 11.3. Metody obiektu daty<br />
Metoda<br />
getDate()<br />
getDay()<br />
getFullYear()<br />
getHours()<br />
Opis<br />
Zwraca dzien miesiaca,<br />
w postaci liczby<br />
z zakresu 1 do 31.<br />
Zwraca dzien tygodnia,<br />
w postaci liczby<br />
z zakresu 0 (niedziela)<br />
do 6 (sobota).<br />
Zwraca rok, w postaci<br />
czterocyfrowej liczby.<br />
Zwraca godzine<br />
w ciagu dnia,<br />
w postaci liczby<br />
z zakresu 0 do 23.<br />
getMiliseconds() Zawraca milisekundy.<br />
getMinutes() Zwraca minuty,<br />
w postaci liczby<br />
z zakresu 0 do 59.<br />
getMonth() Zwraca miesiac,<br />
w postaci liczby<br />
z zakresu 0 (styczen)<br />
do 11 (grudzien).<br />
getSeconds() Zwraca sekundy,<br />
w postaci liczby<br />
z zakresu 0 do 59.<br />
366
Manipulowanie danymi<br />
Rys. 11.39. Argumenty funkcji konstruktora<br />
new Date podaje sie opcjonalnie<br />
Rys. 11.40. Biezace wskazania godzinowe sa<br />
przypisywane do zmiennej currentHour<br />
Rys. 11.41. Wskazania godzinowe, minutowe<br />
i sekundowe sa przypisane do róznych zmiennych<br />
• Wybierz Actions/set variable. W polu<br />
Variable wpisz nazwe nowego obiektu daty.<br />
Umiesc kursor w polu Value i wybierz<br />
Objects/Date/new Date. Zaznacz pole<br />
wyboru Expression obok pola Value.<br />
W polu Value pojawi sie funkcja<br />
konstruktora new Date z podswietlonymi<br />
argumentami (rys. 11.39).<br />
5. Usun wszystkie podswietlone argumenty<br />
funkcji konstruktora new Date. Nie podajac<br />
argumentów dla obiektu daty, utworzysz<br />
w efekcie obiekt podstawowy, odczytujacy<br />
biezaca date i czas. Jesli okreslisz<br />
argumenty, bedziesz mógl przygotowac<br />
obiekt odnoszacy sie do specyficznej daty<br />
lub czasu.<br />
6. Wybierz Actions/set variable. W polu<br />
Variable wpisz currentHour. W polu<br />
Value podaj nazwe twojego obiektu daty.<br />
Majac kursor w polu Value, wybierz<br />
Objects/Date/getHours. Zaznacz pole<br />
Expression.<br />
Metoda getHours pojawi sie za nazwa<br />
obiektu daty. Flash odczyta biezace<br />
wskazania godziny i podstawi zwrócona<br />
wartosc do zmiennej o nazwie currentHour<br />
(aktualna godzina) (rys. 11.40).<br />
7. Powtórz czynnosci poprzedniego kroku<br />
w celu uzyskania biezacych wskazan<br />
minutowych (metoda getMinutes)<br />
i sekundowych (metoda getSeconds)<br />
oraz przypisania zwróconych wartosci<br />
do zmiennych (rys. 11.41).<br />
8. Wybierz Actions/if. W polu Condition<br />
wpisz:<br />
currentHour > 12<br />
Wskazania daty i pomiaru czasu<br />
367
Rozdzial 11.<br />
Wskazania daty i pomiaru czasu<br />
9. Wybierz Actions/set variable. W polu<br />
Variable wpisz currentHour. W polu<br />
Value wpisz:<br />
CurrentHour-12; (rys. 11.42).<br />
10. Wybierz Actions/else if. W polu Condition<br />
wpisz:<br />
CurrentHour == 0<br />
11. Wybierz Actions/set variable. W polu<br />
Variable wpisz currentHour. W polu<br />
Value wpisz 12. Zaznacz pole wyboru<br />
Expression obok pola Value (rys. 11.43).<br />
12. Zaznacz nawias zamykajacy wyrazenia<br />
else i wybierz Actions/set variable.<br />
W polu Variable wpisz nazwe bloku<br />
dynamicznego tekstu. W polu Value powiaz<br />
nazwy zmiennych odpowiadajacych<br />
wskazaniom godzin, minut i sekund, nie<br />
zapominajac o odstepach pomiedzy<br />
kole jnymi argumentami. Zaznacz pole<br />
wyboru Expression obok pola Value<br />
(rys. 11.44).<br />
13. Przetestuj film.<br />
Blok dynamicznego tekstu bedzie<br />
wyswietlal biezacy czas (godzine, minute<br />
i sekunde) w formacie 12-godzinnym.<br />
Wskazówka<br />
• Zauwaz, ze minuty i sekundy o wartosciach<br />
mniejszych niz 10 sa wyswietlane jako<br />
pojedyncze cyfry – 1,2, itd. w miejsce 01,<br />
02, itd. Mozesz to zmienic, dodajac<br />
wyrazenie warunkowe sprawdzajace biezace<br />
wskazania minutowe i sekundowe,<br />
a nastepnie dodajace na poczatek – jesli<br />
trzeba – cyfre 0.<br />
Rys. 11.42. Wartoscia zwracana przez<br />
metode getHours jest liczba z zakresu 0 do<br />
23. W celu dokonania konwersji na<br />
wskazania w formacie 12-godzinnym, odejmij<br />
12 od wartosci wiekszej niz 12<br />
Rys. 11.43. Poniewaz na naszych zegarach<br />
nie ma godziny „0”, Flash moze przypisac 12<br />
do kazdego wskazania godzinowego<br />
o wartosci 0<br />
Blok<br />
dynamicznego<br />
tekstu<br />
myDisplay<br />
Rys. 11.44. Blok dynamicznego tekstu<br />
(u góry) wyswietla powiazane wartosci<br />
368
Manipulowanie danymi<br />
Rys. 11.45. Tablica daysofWeek (dni tygodnia)<br />
zawiera lancuchy znakowe przedstawiajace<br />
nazwy dni tygodnia<br />
Wartosci zwracane przez metody getMonth<br />
i getDays obiektu daty sa liczbami, nie<br />
lancuchami znakowymi. Metoda getMonth<br />
zwraca wartosci od 0 do 11 (0 = styczen),<br />
a metoda getDays zwraca wartosci od 0 do 6<br />
(0 = niedziela). W celu przypisania do tych<br />
wartosci nazw miesiecy i dni tygodnia, mozna<br />
utworzyc tablice przechowujace tego typu<br />
informacje. Przykladowo, tablica<br />
przechowujaca nazwy dni tygodnia moze byc<br />
przygotowana za pomoca nastepujacych<br />
wyrazen:<br />
daysofWeek = new Array ();<br />
daysofWeek[0] = "Niedziela";<br />
daysofWeek[1] = "Poniedzialek";<br />
daysofWeek[2] = "Wtorek";<br />
daysofWeek[3] = "Sroda";<br />
daysofWeek[4] = "Czwartek";<br />
daysofWeek[5] = "Piatek";<br />
daysofWeek[6] = "Sobota";<br />
W celu utworzenia kalendarza:<br />
1. Zaznacz pierwsze ujecie kluczowe na listwie<br />
czasowej i otwórz palete akcji.<br />
2. Wybierz Actions/set variable. W polu<br />
Variable wpisz nazwe nowej tablicy, która<br />
bedzie przechowywac nazwy dni tygodnia.<br />
W polu Value wprowadz funkcje<br />
konstruktora new Array. Zaznacz pole<br />
wyboru Expression obok pola Value.<br />
3. W sekwencji wyrazen, przypisz do kazdego<br />
indeksu nowej tablicy lancuch znakowy,<br />
reprezentujacy nazwe kolejnego dnia<br />
tygodnia (rys. 11.45).<br />
4. Wybierz Actions/set variable. W polu<br />
Variable wpisz nazwe drugiej tablicy, która<br />
bedzie przechowywac nazwy miesiecy.<br />
W polu Value wprowadz funkcje<br />
konstruktora new Array. Zaznacz pole<br />
wyboru Expression obok pola Value.<br />
Wskazania daty i pomiaru czasu<br />
369
Rozdzial 11.<br />
Wskazania daty i pomiaru czasu<br />
5. W sekwencji wyrazen, przypisz do kazdego<br />
indeksu nowej tablicy lancuch znakowy,<br />
reprezentujacy nazwe kolejnego miesiaca<br />
(rys. 11.46).<br />
6. Utwórz na scenie blok dynamicznego tekstu<br />
i nadaj mu nazwe zmiennej.<br />
7. Zaznacz blok dynamicznego tekstu<br />
i wybierz Insert/Convert to Symbol.<br />
Wybierz nazwe dla symbolu i zaznacz opcje<br />
Movie Clip w typie Behavior. Kliknij OK.<br />
Twój blok dynamicznego tekstu zostanie<br />
umieszczony w symbolu klipu filmo wego,<br />
którego klon pozostanie na scenie.<br />
8. Zaznacz klon klipu filmowego i otwórz<br />
palete akcji.<br />
9. Wybierz Actions/onClipEvent. Zaznacz<br />
zdarzenie Load.<br />
10. Wybierz Actions/set variable. W polu<br />
Variable wpisz nazwe twojego nowego<br />
obiektu daty. W polu Value wprowadz<br />
funkcje konstruktora new Date bez<br />
zadnych argumentów. Zaznacz pole<br />
Expression.<br />
11. W sekwencji wyrazen wywolaj metody<br />
getFullYear, getMonth, getDate<br />
i getDay oraz przypisz ich wartosci do<br />
nowych zmiennych (rys. 11.47).<br />
12. Wybierz Actions/set variable. W polu<br />
Variable wpisz nazwe bloku dynamicznego<br />
tekstu. W polu Value wprowadz sciezke<br />
dostepu do tablicy przechowujacej nazwy<br />
dni tygodnia. Dolacz jako jej indeks<br />
zmienna zawierajaca wartosc zwrócona<br />
przez metode getDay (rys. 11.48).<br />
Rys. 11.46. Tablica daysofMonth (dni<br />
miesiaca) zawiera lancuchy znakowe<br />
przedstawiajace nazwy miesiecy<br />
Rys. 11.47. Biezace wskazania roku,<br />
miesiaca, daty i dnia tygodnia sa<br />
przypisywane do nowych zmiennych<br />
Rys. 11.48. Wartosc zmiennej currentDay<br />
(aktualny dzien) to liczba z zakresu 0 do 6.<br />
Wyrazenie w polu Value odczytuje wlasciwy<br />
lancuch znakowy z tablicy, odpowiadajacy<br />
nazwie aktualnego dnia<br />
370
Manipulowanie danymi<br />
Blok dynamicznego tekstu myDisplay<br />
Rys. 11.49. Informacje o dniu tygodnia, miesiacu,<br />
dacie i roku sa powiazane i wyswietlane w bloku<br />
tekstowym myDisplay (u góry)<br />
13. Dowiaz tablice zawierajaca nazwy dni<br />
miesiaca. Jako jej indeks, umiesc zmienna<br />
zawierajaca wartosc zwrócona przez metode<br />
getMonth. Dowiaz tez pozostale zmienne,<br />
przechowujace aktualna date i rok<br />
(rys. 11.49).<br />
14. Przetestuj film.<br />
Flash poda dzien, miesiac, date i rok,<br />
odczytane na podstawie zegara<br />
systemowego. Nazwy dni tygodnia<br />
i miesiecy sa odczytywane z tablic, które<br />
zainicjowales w pierwszym ujeciu<br />
kluczowym, a koncowa informacja pojawia<br />
sie w bloku dynamicznego tekstu.<br />
Jeszcze innym sposobem na wprowadzenie<br />
do filmu elementu pomiaru czasu jest uzycie<br />
funkcji Flasha o nazwie getTimer. Funkcja ta<br />
zwraca liczbe milisekund, które uplynely od<br />
momentu rozpoczecia odtwarzania filmu Flasha.<br />
Mozesz porównac wartosc zwrócona przez<br />
metode getTimer jednego punktu w czasie do<br />
wartosci zwróconej innego punktu, a otrzymana<br />
róznica bedzie czasem, który uplynal pomiedzy<br />
tymi dwoma punktami. Wykorzystaj te funkcje<br />
do tworzenia timerów w grach i innych<br />
zdarzeniach wystepujacych w filmie Flasha.<br />
Przykladowo, mozna mierzyc czas potrzebny<br />
uzytkownikowi na udzielenie poprawnych<br />
odpowiedzi w tescie czy tez wyznaczyc pewien<br />
limit czasowy na ukonczenie testu. Mozna tez<br />
nagradzac gracza wieksza iloscia punktów, jesli<br />
ukonczy misje w wyznaczonym czasie.<br />
Jako ze getTimer jest funkcja, a nie obiektem,<br />
nie potrzebujesz uzywac funkcji konstruktora<br />
w celu utworzenia jego klonu i dzieki temu<br />
latwo sie ta funkcja poslugiwac.<br />
W celu utworzenia timera:<br />
1. Utwórz na scenie blok dynamicznego tekstu<br />
i nadaj mu nazwe zmiennej.<br />
2. Zaznacz blok dynamicznego tekstu<br />
i wybierz Insert/Convert to Symbol. Podaj<br />
nazwe dla symbolu i zaznacz opcje Movie<br />
Clip w typie Behavior. Kliknij OK.<br />
Wskazania daty i pomiaru czasu<br />
371
Rozdzial 11.<br />
Wskazania daty i pomiaru czasu<br />
Twój blok dynamicznego tekstu zostanie<br />
umieszczony w symbolu klipu filmowego,<br />
którego klon pozostanie na scenie.<br />
3. Zaznacz klon klipu filmowego i nadaj mu<br />
nazwe za pomoca pola Name palety<br />
Instance. Otwórz palete akcji.<br />
4. Wybierz Actions/onClipEvent. Zaznacz<br />
zdarzenie Key down.<br />
5. Wybierz Actions/set variable. W polu<br />
Variable wpisz startTime. Umiesc kursor<br />
w polu Value i wybierz Functions/<br />
getTimer.<br />
W polu Value pojawi sie funkcja<br />
getTimer. Zaznacz pole Expression<br />
(rys. 11.50).<br />
6. Wybierz Actions/onClipEvent. Zaznacz<br />
zdarzenie enterFrame.<br />
7. Wybierz Actions/set variable. W polu<br />
Variable wpisz currentTime. Umiesc<br />
kursor w polu Value i wybierz Functions/<br />
getTimer.<br />
W polu Value pojawi sie funkcja<br />
getTimer. Zaznacz pole Expression<br />
(rys. 11.51).<br />
8. Wybierz Actions/set variable. W polu<br />
Variable wpisz elapsedTime. W polu<br />
Value wpisz:<br />
Math.round ((currentTimestartTime)/1000);<br />
Zaznacz pole wyboru Expression obok pola<br />
Value.<br />
Flash obliczy róznice pomiedzy aktualnym<br />
czasem (zmienna currentTime )<br />
a momentem, w którym nacisnieto klawisz<br />
na klawiaturze. Wynik dzielony jest przez<br />
1000 w celu uzyskania wartosci<br />
w sekundach, a nastepnie zaokraglany do<br />
najblizszej wartosci calkowitej (rys. 11.52).<br />
Rys. 11.50. Po wczytaniu tego filmu, funkcja<br />
getTimer odczytuje czas, który minal od jego<br />
rozpoczecia odtwarzania. Czas ten jest<br />
podstawiany do zmiennej startTime<br />
(czas rozpoczecia)<br />
Rys. 11.51. Funkcja getTimer nieustannie<br />
odczytuje czas mijajacy od uruchomienia<br />
filmu Flasha i podstawia go do zmiennej<br />
currentTime (aktualny czas)<br />
Rys. 11.52. Zmienna elapsedTime<br />
reprezentuje ilosc czasu, który uplynal<br />
pomiedzy dwoma punktami w czasie,<br />
zapisanymi w zmiennych startTime<br />
i currentTime<br />
372
Manipulowanie danymi<br />
Blok dynamicznego<br />
tekstu myDisplay<br />
Rys. 11.53. Wartosc przechowywana w zmiennej<br />
elapsedTime jest wyswietlana w bloku tekstowym<br />
myDisplay (u góry)<br />
9. Wybierz Actions/set variable. Przypisz<br />
wartosc zmiennej elapsedTime (czas, który<br />
uplynal) do wyswietlenia w bloku<br />
dynamicznego tekstu (rys. 11.53).<br />
10. Przetestuj film.<br />
Flash bedzie wyswietlal czas, który uplynal<br />
od ostatniego momentu wcisniecia klawisza.<br />
Poeksperymentuj z róznymi manipulatorami<br />
zdarzen w celu stworzenia stopera<br />
z przyciskami start, stop i zapetlania.<br />
Inna, czesto uzywana metoda tworzenia timera<br />
jest liczenie odtworzonych juz ujec na listwie<br />
czasowej. Jesli predkosc odtwarzania filmu<br />
wynosi 12 fps (klatek na sekunde), to znaczy,<br />
ze kazde 12 odtworzonych klatek jest równe<br />
jednej sekundzie czasu. Mozesz w tym miejscu<br />
posluzyc sie wlasciwoscia _currentframe do<br />
odczytania numeru biezacego ujecia,<br />
ewentualnie przypisac akcje do ujecia<br />
kluczowego odpowiadajacego okreslonej ilosci<br />
czasu, która chcesz mierzyc. Dla przykladu:<br />
umiesc wyrazenie i = i + 1 w ujeciu<br />
kluczowym 60 na listwie czasowej klipu<br />
filmowego o predkosci odtwarzania 12 fps. Co<br />
kazde 5 sekund (60 klatek / 12 fps = 5 sekund)<br />
wartosc zmiennej i bedzie wzrastac o 1.<br />
Uzywanie listwy czasowej jako timera<br />
Mimo iz proste w wykonaniu, tworzenie<br />
timera w powyzszy sposób nie jest tak<br />
uzyteczne, jak uzywanie w tym celu funkcji<br />
getTimer lub obiektu daty. Predkosci<br />
odtwarzania nie sa stale i czesto mamy<br />
do czynienia z „gubieniem” klatek, jesli<br />
wzrasta w filmie ilosc grafik lub animacji.<br />
Pamietajac, ze plynnosc odtwarzania filmu<br />
jest uzalezniona od wydajnosci procesora<br />
w komputerze uzytkownika, staraj sie<br />
uzywac raczej funkcji getTimer lub<br />
obiektu daty, jesli pomiar czasu jest<br />
krytycznym elementem filmu.<br />
Wskazania daty i pomiaru czasu<br />
373
Rozdzial 11.<br />
Tworzenie skryptów<br />
Tworzenie skryptów<br />
do wielokrotnego uzywania<br />
Jesli musisz wykonywac te sama operacje na<br />
danych wiele razy, mozesz zaoszczedzic czas,<br />
tworzac wlasne funkcje. Funkcje, które poznales<br />
do tej pory, jak getTimer,<br />
updateAfterEvent i getProperty, sa<br />
wbudowane we Flasha. Teraz jednak, za<br />
pomoca funkcji function, bedziesz mógl<br />
przygotowywac swoje wlasne funkcje,<br />
wykonujace specyficzne dzialania. Funkcje sa<br />
fragmentami wielokrotnie uzywanych wyrazen<br />
ActionScript, które umieszcza sie razem, miesza<br />
i laczy w razie potrzeby. Na przyklad w jednym<br />
z wczesniejszych cwiczen w tym rozdziale,<br />
obliczales kat tworzony przez przeciagany klip<br />
filmowy i punkt odniesienia innego klipu<br />
filmowego. Fragment skryptu, odpowiadajacy<br />
za obliczenie kata, rezyduje w obrebie<br />
przeciaganego klipu filmowego. Gdybys mial<br />
zamiar udostepnic uzytkownikowi kilka klipów<br />
filmowych do wyboru, musialbys w kazdym<br />
z nich dolaczyc ten sam kod ActionScript.<br />
Jednak dzieki funkcjom wystarczy napisac<br />
odpowiedni skrypt tylko raz i umiescic go<br />
w glównej listwie czasowej. Wówczas kazdy<br />
z przeciaganych klipów filmowych móglby<br />
wywolywac przygotowana funkcje zawsze,<br />
kiedy zajdzie taka potrzeba.<br />
Ponizsze cwiczenie ilustruje sposób budowania<br />
funkcji tworzacej obiekt dzwiekowy,<br />
dolaczajacej dzwiek, odtwarzajacej go<br />
i ustawiajacej poziom glosnosci. Dzieki<br />
konsolidacji wszystkich tych metod, bedziesz<br />
mógl odtworzyc dzwiek za jednym wywolaniem<br />
pojedynczej funkcji i powtarzac te czynnosc<br />
dowolna ilosc razy, z praktycznie dowolnego<br />
miejsca w twoim filmie.<br />
W celu utworzenia i wywolania funkcji<br />
dzwiekowej:<br />
1. Zaznacz pierwsze ujecie kluczowe na<br />
glównej listwie czasowej i otwórz palete<br />
akcji.<br />
2. Wybierz Actions/function (Esc + fn).<br />
374
Manipulowanie danymi<br />
Rys. 11.54. Ta funkcja nosi nazwe playSound<br />
(odtwórz dzwiek) i nie posiada zadnych<br />
parametrów<br />
Rys. 11.55. Utworzono klon nowego obiektu,<br />
mySound (mój dzwiek)<br />
Rys. 11.56. Trzy metody obiektu dzwiekowego<br />
zostana wywolane wraz z wywolaniem funkcji<br />
playSound<br />
3. W polu Name wpisz nazwe swojej funkcji.<br />
Nie podawaj zadnych parametrów.<br />
Wyrazenie funkcji pojawi sie w oknie<br />
skryptu wraz z zestawem klamer. Wszystkie<br />
wyrazenia umieszczone pomiedzy tymi<br />
klamrami stana sie czescia funkcji i beda<br />
wykonywane po wywolaniu funkcji<br />
(rys. 11.54).<br />
4. Wybierz Actions/set variable. W polu<br />
Variable wpisz nazwe nowego obiektu<br />
dzwiekowego. W polu Value wprowadz<br />
funkcje konstruktora new Sound. Zaznacz<br />
pole wyboru Expression obok pola Value<br />
(rys. 11.55).<br />
5. Wybierz Actions/with. W polu Object<br />
wpisz nazwe twojego nowego obiektu<br />
dzwiekowego.<br />
6. Korzystajac z akcji evaluate, wprowadz<br />
metody attachSound, start i setVolume<br />
wraz z odpowiednimi parametrami<br />
(rys. 11.56).<br />
Akcja with pozwala polaczyc wszystkie<br />
trzy metody z nowym obiektem<br />
dzwiekowym. Przykladowe wyrazenia moga<br />
wygladac tak:<br />
mySound.attachSound ("musicID");<br />
mySound.start (0,2);<br />
mySound.setVolume (50);<br />
7. Utwórz symbol przycisku i umiesc jego klon<br />
na scenie. Zaznacz przycisk i otwórz palete<br />
akcji.<br />
8. Wybierz Actions/evaluate . W polu<br />
Expression wpisz nazwe swojej funkcji<br />
wraz z nawiasami.<br />
Funkcja zostanie wywolana po zwolnieniu<br />
utworzonego przycisku (rys. 11.57).<br />
Tworzenie skryptów<br />
Rys. 11.57. Wywolana zostaje funkcja playSound<br />
375
Rozdzial 11.<br />
Tworzenie skryptów<br />
9. Zaimportuj klip dzwiekowy i wprowadz<br />
jego identyfikator w polu Identifier okna<br />
dialogowego Symbol Linkage Properties<br />
(rys. 11.58).<br />
10. Przetestuj film.<br />
Twoja funkcja zostala zdefiniowana<br />
w pierwszym ujeciu kluczowym na glównej<br />
listwie czasowej. Kiedy uzytkownik kliknie<br />
przycisk znajdujacy sie na scenie, Flash<br />
wywola funkcje tworzaca nowy obiekt<br />
dzwiekowy, przylaczy ten dzwiek<br />
i rozpocznie jego odtwarzanie z ustalonym<br />
poziomem glosnosci.<br />
Wskazówki<br />
• Funkcje, tak jak zmienne i obiekty, rezyduja<br />
w okreslonej listwie czasowej. Kiedy<br />
wywolujesz funkcje, musisz uwazac na jej<br />
sciezke dostepu. Przykladowo, wywolujac<br />
funkcje o nazwie mojaFunkcja,<br />
zdefiniowana na glównej listwie czasowej,<br />
uzyj takiej sciezki dostepu:<br />
_root.mojaFunkcja. lub<br />
_level0.mojaFunkcja.<br />
• Mozesz deklarowac zmienne nazywane<br />
zmiennymi lokalnymi, które sa osadzone<br />
w konkretnej funkcji. Zmienne lokalne<br />
przestaja funkcjonowac wraz z koncem<br />
funkcji, do której naleza, i nie beda<br />
wchodzic w konflikty ze zmiennymi<br />
zadeklarowanymi w innych warstwach<br />
filmu. Zmienne lokalne deklaruje sie na<br />
palecie akcji, wybierajac Actions/var.<br />
Zmienne lokalne pomoga zachowac twoim<br />
funkcjom niezaleznosc w dzialaniu<br />
i przechowywaniu informacji. W ten sposób<br />
mozesz latwo kopiowac i wklejac funkcje<br />
z jednego projektu do drugiego, nie<br />
martwiac sie przy tym o jakiekolwiek<br />
konflikty zmiennych o powtarzajacych sie<br />
nazwach.<br />
Rys. 11.58. Wprowadz nazwe importowanego<br />
dzwieku w polu Identifier<br />
376
Manipulowanie danymi<br />
Rys. 11.59. Funkcja playSound posiada<br />
parametry sndLoop i sndVolume<br />
Rys. 11.60. Parametry funkcji playSound<br />
modyfikuja metody start oraz setVolume<br />
Rys. 11.61. Wywolana zostaje funkcja playSound,<br />
otrzymujaca parametry 2 i 50. Dzwiek o nazwie<br />
musicID zostanie wiec odtworzony dwukrotnie<br />
i przy glosnosci 50<br />
Parametry i wartosci zwracane<br />
Kiedy definiujesz funkcje, mozesz nakazac jej<br />
wykonanie okreslonej czynnosci w oparciu<br />
o podane przez ciebie parametry lub tez przejsc<br />
do innej funkcji w momencie wywolania.<br />
Dzieki temu funkcje sa bardziej elastyczne – ich<br />
dzialanie zalezy wlasciwie od kontekstu. Na<br />
przyklad, w uzupelnieniu do poprzedniego<br />
cwiczenia, móglbys zdefiniowac funkcje<br />
akceptujaca jakis parametr odnosnie poziomu<br />
glosnosci. Po wywolaniu funkcji wprowadzasz<br />
ponadto wartosc dla tego parametru, a funkcja<br />
dolaczy te wartosc do metody setVolume.<br />
W celu przygotowania funkcji akceptujacej<br />
podawanie parametrów:<br />
1. Kontynuujac poprzednie cwiczenie, zaznacz<br />
pierwsze ujecie kluczowe i otwórz palete<br />
akcji.<br />
2. Zaznacz wyrazenie z funkcja. W polu<br />
Parameters wpisz sndLoop i sndVolume,<br />
oddzielajac te parametry przecinkami. Beda<br />
to nazwy parametrów twojej funkcji<br />
(rys. 11.59).<br />
3. Zaznacz metode start twojej funkcji.<br />
W miejscu parametru loop wpisz sndLoop.<br />
Zaznacz metode setVolume i w miejsce<br />
parametru volume wpisz sndVolume<br />
(rys. 11.60).<br />
4. Zaznacz klon przycisku znajdujacego sie na<br />
scenie.<br />
5. Na palecie akcji zaznacz wywolanie twojej<br />
funkcji. W nawiasach wprowadz wartosci<br />
dla parametrów sndLoop i sndVolume.<br />
Oddziel te wartosci przecinkami<br />
(rys. 11.61).<br />
6. Przetestuj film.<br />
Wlasciwe wartosci parametrów<br />
przekazanych do funkcji sa definiowane<br />
w momencie jej wywolania. Kolejny<br />
utworzony przycisk móglby wywolywac<br />
funkcje z odmiennymi wartosciami<br />
parametrów.<br />
Tworzenie skryptów<br />
377
Rozdzial 11.<br />
Tworzenie skryptów<br />
Gdy bedziesz przekazywal parametry do<br />
funkcji, z pewnoscia bedziesz tez chcial<br />
zobaczyc wyniki okreslonych obliczen. Jesli<br />
wiec funkcja ma pokazywac wynik swoich<br />
dziala, uzyj akcji return. Akcje te definiuje sie<br />
w wyrazeniu funkcji, a jej dzialanie polega na<br />
zwracaniu wartosci dowolnego wyrazenia.<br />
W celu przygotowania funkcji zwracajacej<br />
wartosci:<br />
1. Zaznacz pierwsze ujecie kluczowe na<br />
glównej listwie czasowej i otwórz palete<br />
akcji.<br />
2. Wybierz Actions/function.<br />
3. W polu Name podaj nazwe swojej funkcji.<br />
W polu Parameters wpisz a, b, c, d<br />
(rys. 11.62).<br />
4. Wybierz Actions/return . W polu Value<br />
wprowadz wyrazenie obliczajace srednia<br />
wartosci czterech parametrów.<br />
Funkcja ta zwraca wartosc wyrazenia<br />
(rys. 11.63).<br />
5. Wybierz narzedzie tekstowe (Text Tool )<br />
i utwórz blok dynamicznego tekstu.<br />
Nazwij go.<br />
6. Utwórz symbol przycisku i umiesc jego klon<br />
na scenie. Zaznacz klon i na palecie akcji<br />
wybierz Actions/set variable.<br />
7. W polu Variable podaj nazwe twojego<br />
bloku dynamicznego tekstu. W polu Value<br />
wpisz nazwe funkcji i cztery wartosci<br />
odpowiadajace jej parametrom. Oddziel<br />
wartosci za pomoca przecinków. Zaznacz<br />
pole wyboru Expression obok pola Value<br />
(rys. 11.64).<br />
Te cztery wartosci sa przekazywane do<br />
funkcji i przetwarzane. Zwracana wartosc<br />
jest podstawiana i wyswietlana w bloku<br />
dynamicznego tekstu.<br />
8. Przetestuj film.<br />
Rys. 11.62. Funkcja myAverage (moja<br />
srednia) posiada parametry a, b, c i d<br />
Rys. 11.63. Akcja return szacuje wyrazenie<br />
i udostepnia rezultat dla wyrazenia, które<br />
te funkcje wywolalo<br />
Rys. 11.64. Wywolana zostala funkcja<br />
myAverage; zwracana wartosc pojawia<br />
sie w bloku dynamicznego tekstu<br />
Wskazówka<br />
• Akcja function zastepuje akcje call<br />
uzywana w poprzednich wersjach Flasha.<br />
Chociaz akcja call wciaz dziala, to<br />
jednak w jej przypadku przekazywanie<br />
parametrów i zwracanie wartosci nie<br />
odbywa sie tak wygodnie, jak za pomoca<br />
akcji function.<br />
378
Manipulowanie danymi<br />
Tworzenie wlasnych klas<br />
za pomoca funkcji<br />
Funkcji mozna uzywac nie tylko do<br />
wykonywania pewnych dzialan, jak to pokazano<br />
w poprzednich cwiczeniach, ale takze do<br />
definiowania wlasciwosci i metod nowych klas.<br />
Dzieki temu mozliwe staje sie organizowanie<br />
i przeksztalcanie informacji zawartych<br />
w skrypcie w sposób pozwalajacy na latwiejszy<br />
dostep i przechowywanie danych oraz<br />
zaoszczedzenie na pamieci przez<br />
konsolidowanie skryptów. Za pomoca funkcji<br />
konstruktora (operator new oraz nazwa twojej<br />
funkcji) mozesz utworzyc klon obiektu wlasnej<br />
klasy. Rozwaz na przyklad ponizsza funkcje:<br />
function Scores (player1, player2) {<br />
this.player1Score = player1;<br />
this.player2Score = player2;<br />
}<br />
Powyzsza funkcja definiuje klase o nazwie<br />
Scores (punkty), posiadajaca wlasciwosci<br />
player1Score (punkty gracza 1.)<br />
i player2Score (punkty gracza 2.). Klon obiektu<br />
z tej klasy tworzy sie za pomoca funkcji<br />
konstruktora, jak ponizej:<br />
MyScores = new Scores (4, 6);<br />
To wyrazenie tworzy nowy obiekt o nazwie<br />
myScores (moje punkty) na podstawie klasy<br />
Scores. Wspomniany nowy obiekt posiada<br />
wlasciwosci player1Score o wartosci 4 oraz<br />
player2Score o wartosci 6.<br />
Gdybys teraz chcial utworzyc metode dla klasy<br />
Scores, pozwalajaca zmieniac wlasciwosci<br />
player1Score lub player2Score, musisz<br />
zdefiniowac kolejna funkcje w nastepujacy<br />
sposób:<br />
function setScores (player,<br />
newScore) {<br />
set ("this.player" + player +<br />
"Score", newScore);<br />
}<br />
Tworzenie klas za pomoca funkcji<br />
379
Rozdzial 11.<br />
Tworzenie klas za pomoca funkcji<br />
Ta funkcja zmienia wartosci player1Score<br />
lub player2Score w zaleznosci od<br />
parametrów, jakie zostana jej przekazane.<br />
Tymczasem, funkcja ta nie jest jeszcze<br />
skojarzona z klasa Scores, zdefiniowana<br />
w pierwszej funkcji. Ty jednak chcialbys, zeby<br />
funkcja nalezala do klasy Scores, dzieki czemu<br />
dowolny nowy obiekt z tej klasy bedzie mial<br />
dostep do tej funkcji, nazwanej setScores.<br />
Mozesz skojarzyc funkcje setScores z klasa<br />
Scores, uzywajac w tym celu jej wlasciwosci<br />
prototype (prototyp). Wlasciwosc ta oddzialuje<br />
na wszystkie nowe obiekty utworzone na<br />
podstawie klasy Scores, co oznacza, ze obiekty<br />
te dziedzicza funkcje setScores. Wlasciwosc<br />
protoype klasy Scores przypisuje sie do funkcji<br />
setScores nastepujacym wyrazeniem:<br />
Scores.prototype.setScoresMethod =<br />
setScores;<br />
W celu wywolania tej metody z poziomu<br />
twojego obiektu, musialbys posluzyc sie<br />
nastepujacym wyrazeniem:<br />
mScores.setScoresMethod (2,3);<br />
Funkcje umozliwiajace tworzenie wlasnych<br />
klas, wlasciwosci i metod to potezne<br />
i elastyczne narzedzie, pozwalajace wykroczyc<br />
daleko poza standardowe klasy udostepniane<br />
przez Flasha.<br />
W celu utworzenia wlasnej klasy:<br />
1. Zaznacz pierwsze ujecie kluczowe na<br />
glównej listwie czasowej i otwórz palete<br />
akcji.<br />
2. Wybierz Actions/function. W polu Name<br />
wpisz nazwe Scores. W polu Parameters<br />
podaj nazwy parametrów player1<br />
i player2, oddzielone przecinkami<br />
(rys. 11.65).<br />
3. Wybierz Actions/set variable. Przypisz<br />
nazwy wlasciwosci do parametrów.<br />
Funkcja ta definiuje klase o nazwie Scores,<br />
posiadajaca dwie wlasciwosci (rys. 11.66).<br />
Rys. 11.65. Funkcja o nazwie Scores posiada<br />
parametry this.player1 i this.player2<br />
Rys. 11.66. Klasa Scores zawiera dwie<br />
wlasciwosci, nazwane player1Score<br />
i player2Score<br />
380
Manipulowanie danymi<br />
Rys. 11.67. Funkcja o nazwie setScores posiada<br />
parametry player i newScore<br />
Rys. 11.68. Funkcja o nazwie setScores<br />
przypisuje wartosc newScore do wlasciwosci<br />
this.player1Score, jesli parametr player = 1,<br />
lub do this.player2Score, jesli player = 2<br />
Rys. 11.69. Wlasciwosc prototype klasy Scores<br />
jest przypisana do funkcji o nazwie setScores.<br />
Wszystkie klony klasy Scores dziedzicza metode<br />
setScores, która mozna wywolac za pomoca<br />
wyrazenia: instanceName.setScoresMethod<br />
(player, newScore)<br />
W celu zdefiniowania metody<br />
nowo utworzonej klasy:<br />
1. Kontynuujac poprzednie cwiczenie, zaznacz<br />
pierwsze ujecie kluczowe na glównej listwie<br />
czasowej i otwórz palete akcji.<br />
2. Zaznacz klamre zamykajaca funkcji.<br />
Nastepna akcja, która dodasz, pojawi sie<br />
poza ta funkcja.<br />
3. Wybierz Actions/function. W polu Name<br />
wpisz setScores. W polu Parameters<br />
wprowadz nazwy parametrów player<br />
i newScore, oddzielone przecinkami<br />
(rys. 11.67).<br />
4. Wybierz Actions/set variable. Uzywajac<br />
akcji set variable, przypisz odpowiednia<br />
nazwe wlasciwosci (czyli dowiaz parametr<br />
player) do parametru newScore.<br />
Ta funkcja przypisuje nowa wartosc do<br />
wlasciwosci this.player1Score lub<br />
this.player2Score (rys. 11.68).<br />
5. Zaznacz klamre zamykajaca drugiej funkcji.<br />
Nastepna akcja, która dodasz, pojawi sie<br />
poza ta funkcja.<br />
6. Wybierz Actions/set variable. W polu<br />
Variable wpisz:<br />
Scores.prototype.setScoresMethod<br />
W polu Value wpisz setScores.<br />
Zaznacz pole Expression.<br />
Druga funkcja, setScores, zostala<br />
przylaczona do funkcji pierwszej, o nazwie<br />
Scores. Wszystkie nowe klony klasy Scores<br />
dziedzicza funkcje setScores, która<br />
wywoluje sie za pomoca metody<br />
setScoresMethod (rys. 11.69).<br />
Tworzenie klas za pomoca funkcji<br />
381
Rozdzial 11.<br />
Tworzenie klas za pomoca funkcji<br />
W celu przygotowania klonu obiektu<br />
nowo utworzonej klasy:<br />
1. Kontynuujac poprzednie cwiczenie, zaznacz<br />
pierwsze ujecie kluczowe na glównej listwie<br />
czasowej i otwórz palete akcji.<br />
2. Zaznacz ostatnie wyrazenie widoczne<br />
w oknie skryptu.<br />
3. Wybierz Actions/set variable. W polu<br />
Variable wpisz nazwe twojego nowego<br />
obiektu. W polu Value wpisz new<br />
Scores(), a nastepnie dwie numeryczne<br />
wartosci (w nawiasach), oddzielone<br />
przecinkami. Zaznacz pole wyboru<br />
Expression obok pola Value (rys. 11.70).<br />
Na podstawie klasy Scores zostanie<br />
utworzony klon nowego obiektu,<br />
z wlasciwosciami zdefiniowanymi za<br />
pomoca wartosci przekazanych do funkcji.<br />
Ten nowy obiekt dziedziczy metode<br />
setScoresMethod.<br />
W celu wywolania metody<br />
nowo utworzonej klasy:<br />
1. Kontynuujac poprzednie cwiczenie,<br />
przeciagnij na scene kolejny klon symbolu<br />
przycisku. Zaznacz przycisk i otwórz palete<br />
akcji.<br />
2. Wybierz Actions/evaluate . W polu<br />
Expression wpisz nazwe twojego obiektu,<br />
kropke i wyrazenie setScoreMethod().<br />
W nawiasach umiesc wartosci parametrów<br />
metody, oddzielajac je przecinkami<br />
(rys. 11.71).<br />
Klikniecie utworzonego przycisku wywoluje<br />
metode setScoreMethod i zmieniaja sie<br />
wlasciwosci twojego obiektu.<br />
Kompletny skrypt tworzacy nowa klase<br />
i metode pokazano na rys. 11.72.<br />
Rys. 11.70. Klon obiektu firstGame (pierwsza<br />
gra) zostal utworzony na podstawie klasy<br />
Scores. Posiada on wlasciwosci<br />
player1Score=4 oraz player2Score=6<br />
Rys. 11.71. Po wcisnieciu tego przycisku<br />
obiekt firstGame wywoluje metode<br />
setScoresMethod. Jego wlasciwosc<br />
player2Score ma wartosc 8<br />
Rys. 11.72. Oto kompletny skrypt przypisany<br />
do pierwszego ujecia listwy czasowej (u góry)<br />
w celu utworzenia nowej klasy, przylaczenia<br />
metody i przygotowania klonu nowego<br />
obiektu. Skrypt przypisany do przycisku<br />
(u dolu) wywoluje dla nowego obiektu metode<br />
setScoresMethod<br />
382
Zarzadzanie zawartoscia<br />
12<br />
i rozwiazywanie problemów<br />
Czesci skladowe jezyka HTML<br />
W miare jak rosnie zlozonosc twojego filmu Flasha, zawierajacego coraz wiecej bitmap,<br />
dzwieków, animacji i wyrazen ActionScript, laczacych to wszystko w jedna calosc, zachodzi<br />
potrzeba scislego sledzenia funkcjonowania tych elementów w celu dokonywania przegladów<br />
i poprawek. W koncu nawet najbardziej wyszukany film okaze sie bezuzyteczny, jesli nie<br />
bedziesz w stanie wskazac tej jednej zmiennej, uniemozliwiajacej zadzialanie calosci. Na<br />
szczescie Flash udostepnia wiele narzedzi do rozwiazywania problemów i zarzadzania<br />
biblioteka symboli.<br />
Ten rozdzial nauczy cie tworzenia wspóldzielonych bibliotek i zewnetrznych skryptów,<br />
udostepniajacych czesto uzywane elementy – symbole i kod – grupie projektantów pracujacych<br />
nad filmem Flasha. W niniejszym rozdziale zapoznasz sie tez z paletami Movie Explorer,<br />
Debugger i oknem Output, które daja dostep do informacji na temat organizacji i statusu<br />
twojego filmu. Te trzy okna pozwalaja ogarnac skrypt z perspektywy róznych elementów<br />
filmu , wyswietlaja tez ostrzezenia o bledach i monitoruja zmiany w wartosciach zmiennych<br />
oraz wlasciwosci w czasie odtwarzania filmu.<br />
Na zakonczenie zapoznasz sie z kilkoma technikami pomagajacymi uczynic film bardziej<br />
zwartym i szybkim – dzieki optymalizacji g rafiki, wlasciwej organizacji srodowiska pracy<br />
i sposobom unikania powszechnych bledów. Wspomniane techniki, uczynia z ciebie lepszego<br />
animatora i bardziej doswiadczonego twórce filmów Flasha.<br />
Zarzadzanie zawartoscia<br />
383
Rozdzial 12.<br />
Tworzenie wspóldzielonych bibliotek<br />
Tworzenie<br />
wspóldzielonych bibliotek<br />
Flash umozliwia zespolom animatorów<br />
i programistów korzystanie ze<br />
wspóldzielonych bibliotek w czasie pracy<br />
nad zlozonymi projektami. Kazdy<br />
z animatorów moze pracowac nad<br />
oddzielnym filmem, uzywajacym jednak<br />
tego samego symbolu – np. glównego<br />
bohatera animowanego komiksu. Identyczny<br />
symbol tego bohatera powinien rezydowac<br />
w bibliotece kazdego z filmów, a jesli<br />
dyrektor artystyczny zdecyduje sie zmienic<br />
twarz postaci, to nowy symbol musi zostac<br />
skopiowany do wszystkich bibliotek – tzn.,<br />
dzieje sie tak, dopóki nie przygotuje sie<br />
wspóldzielonej biblioteki. Biblioteki tego<br />
typu sluza do przechowywania symboli<br />
najczesciej uzywanych w wielu filmach.<br />
Mozesz wiec przechowac symbol swojego<br />
bohatera w takiej bibliotece, udostepniajac<br />
go zarazem dla wszystkich filmów, które<br />
musza z niego skorzystac. To bardzo<br />
upraszcza proces edycyjny i zapewnia<br />
spójnosc calemu projektowi (rys. 12.1).<br />
Odbiorcy takze odnosza korzysci<br />
z uzywania wspóldzielonej biblioteki, jako<br />
ze musza wczytac ja tylko raz. Przykladowo,<br />
wspominany juz bohater móglby byc<br />
wczytany tylko jednokrotnie – dla<br />
pierwszego filmu, a zarazem wszystkich<br />
innych dodatkowych filmów, takze<br />
korzystajacych z tego symbolu.<br />
W celu utworzenia wspóldzielonej<br />
biblioteki, oznaczasz symbol, który chcesz<br />
udostepnic za pomoca takiego samego<br />
identyfikatora laczenia, jakiego uzywales<br />
w przypadku dzwieków i filmów na<br />
potrzeby metod attachSound<br />
i attachMovie. Po wyeksportowaniu pliku<br />
SWF, zidentyfikowane w ten sposób<br />
symbole beda dostepne jako symbole<br />
wspóldzielone.<br />
Oddzielne filmy SWF<br />
Wspólny<br />
symbol we<br />
wspóldzielonej<br />
bibliotece<br />
Rys. 12.1. Wspóldzielona biblioteka (u góry)<br />
umozliwia wielu plikom SWF korzystanie<br />
z tego samego symbolu<br />
384
Zarzadzanie zawartoscia i rozwiazywanie problemów<br />
Rys. 12.2. Wybierz Options/Linkage<br />
z menu biblioteki<br />
Rys. 12.3. W celu oznaczenia symbolu jako<br />
wspóldzielonego, nadaje mu sie identyfikator<br />
w oknie dialogowym Symbol Linkage Properties<br />
i zaznacza jako element do wyeksportowania<br />
Rys. 12.4. W celu uzyskania dostepu do<br />
wspóldzielonych symboli z biblioteki innego<br />
filmu, wybierz File/Open as Shared Library<br />
W celu utworzenia<br />
wspóldzielonej biblioteki:<br />
1. W dokumencie Flasha utwórz symbol, który<br />
chcesz udostepnic. Moze to byc grafika,<br />
przycisk, klip filmowy, dzwiek lub bitmapa.<br />
2. W bibliotece zaznacz swój symbol. Z menu<br />
rozwijanego Options wybierz Linkage<br />
(rys. 12.2).<br />
Pojawi sie okno dialogowe Symbol Linkage<br />
Properties.<br />
3. Dla polecenia Linkage wybierz opcje<br />
Export this symbol . W polu Identifier<br />
wpisz unikalna nazwe dla twojego symbolu.<br />
Kliknij OK (rys. 12.3).<br />
Wybrany w ten sposób symbol jest<br />
zaznaczony do wyeksportowania i gotowy<br />
do wspóldzielenia przez inne filmy.<br />
4. Wyeksportuj swój film Flasha jako plik<br />
SWF. Wybrany przez ciebie symbol<br />
rezyduje teraz w pliku SWF,<br />
udostepniajacym wspóldzielone elementy<br />
innym filmom.<br />
Po utworzeniu wspóldzielonej biblioteki<br />
mozesz wykorzystywac jej zawartosc<br />
w róznych filmach. W tym celu trzeba tylko<br />
otworzyc wspóldzielona biblioteke<br />
w nowym dokumencie Flasha, a nastepnie<br />
przeciagnac wybrany symbol do okna<br />
dokumentu. Pomiedzy plikiem SWF<br />
uzywajacym takiego symbolu oraz plikiem<br />
SWF, który symbol wspóldzielony zawiera<br />
(czyli wspóldzielona biblioteka), tworzone<br />
jest polaczenie. Oryginalny plik zródlowy<br />
(FLA), zawierajacy biblioteke<br />
wspóldzielona, jest plikiem glównym,<br />
jedynym miejscem, w którym mozesz<br />
dokonywac edycji wspóldzielonych symboli.<br />
W celu uzycia<br />
wspóldzielonego symbolu:<br />
1. Otwórz nowy dokument Flasha. Wybierz<br />
File/Open as Shared Library (rys. 12.4).<br />
Tworzenie wspóldzielonych bibliotek<br />
385
Rozdzial 12.<br />
Tworzenie wspóldzielonych bibliotek<br />
2. W oknie dialogowym, które sie pojawi,<br />
zaznacz plik FLA zawierajacy symbole,<br />
oznaczone jako wspóldzielone<br />
i przeznaczone do eksportu. Kliknij OK.<br />
Pojawi sie nowe okno biblioteki, ukazujace<br />
wszystkie symbole z wybranego pliku FLA.<br />
Tlo biblioteki ma kolor szary, wskazujac<br />
w ten sposób, ze ta biblioteka nie nalezy do<br />
aktualnie otwartego pliku Flasha. Z poziomu<br />
tego pliku nie mozesz modyfikowac, dodawac<br />
czy usuwac symboli z tej biblioteki (rys. 12.5).<br />
3. Zaznacz symbol (we wspóldzielonej<br />
bibliotece), który w poprzednim cwiczeniu<br />
oznaczyles jako element do<br />
wyeksportowania i przeciagnij go do<br />
biezacej biblioteki lub wprost na scene.<br />
Wspóldzielony symbol zostanie dodany<br />
do biezacej biblioteki i bedzie dostepny<br />
do wykorzystania w filmie. Wybierz<br />
Options/Linkage w celu sprawdzenia, czy<br />
symbol jest polaczony ze wspóldzielona<br />
biblioteka (rys. 12.6).<br />
4. Uzyj wspóldzielonego symbolu w swoim<br />
filmie. Wyeksportuj plik SWF, a nastepnie<br />
umiesc go, wraz z plikiem SWF<br />
wspóldzie lonej biblioteki, w tej samej<br />
lokalizacji (rys. 12.7).<br />
Kiedy odtworzysz film uzywajacy<br />
wspólnego symbolu, symbol ten zostanie<br />
wczytany ze wspóldzielonej biblioteki<br />
zapisanej w pliku SWF.<br />
Wskazówka<br />
• Jesli dokonasz jakichs zmian wsród symboli<br />
ze wspóldzielonej biblioteki, wszystkie<br />
filmy SWF, uzywajace tych symboli,<br />
zostana automatycznie uaktualnione w celu<br />
odzwierciedlenia wprowadzonych przez<br />
ciebie zmian. Jednak otwierajac plik FLA<br />
uzywajacy wspóldzielonego symbolu,<br />
zauwazysz, ze ten symbol, znajdujacy sie<br />
w bibliotece, nie zostal uaktualniony.<br />
Musisz wiec zaimportowac symbol ze<br />
wspóldzielonej biblioteki ponownie, jesli<br />
jego obraz w biezacej bibliotece ma równiez<br />
zostac uaktualniony.<br />
Rys. 12.5. Biblioteka po lewej zawiera<br />
symbol przeznaczony do wspóldzielenia.<br />
Biblioteka po prawej to twoja biezaca<br />
biblioteka<br />
Rys. 12.6. Okno dialogowe Symbol Linkage<br />
Properties wskazuje, ze ten symbol jest<br />
importowany z pliku o nazwie<br />
sharedLibrary.swf<br />
Plik sharedLibrary.swf<br />
zawierajacy symbole<br />
przeznaczone do wspóldzielenia<br />
Plik SWF uzywajacy<br />
wspóldzielonych symboli z pliku<br />
sharedLibrary.swf<br />
Rys. 12.7. Dwa pliki SWF umieszczono<br />
w tej samej lokalizacji<br />
386
Zarzadzanie zawartoscia i rozwiazywanie problemów<br />
Rys. 12.8. Okno dialogowe Symbol Linkage<br />
Properties wskazuje, ze ten symbol jest<br />
importowany z pliku o nazwie sharedLibrary.swf,<br />
znajdujacego sie w folderze sharedFolder<br />
Plik SWF uzywajacy<br />
wspóldzielonych symboli<br />
z lokalizacji sharedFolder/<br />
sharedLibrary.swf<br />
Plik sharedLibrary.swf zawierajacy<br />
wspóldzielone symbole<br />
Folder sharedFolder<br />
Rys. 12.9. Dwa pliki SWF umieszczone<br />
w róznych lokalizacjach<br />
Rys. 12.10. Z menu<br />
Options wspóldzielonej<br />
biblioteki wybierz Shared<br />
Library Properties<br />
Rys. 12.11. Sciezka dostepu podana w polu URL<br />
okresla lokalizacje wspóldzielonych symboli.<br />
Umiesc zatem swoja wspóldzielona biblioteke<br />
w miejscu, na które wskazuje pole URL<br />
Domyslna lokalizacja dla wspóldzielonej<br />
biblioteki jest katalog zawierajacy plik SWF,<br />
korzystajacy z tej biblioteki. Jesli chcialbys<br />
umiescic biblioteke w innej lokalizacji, musisz<br />
podac do jej pliku bezwzgledna lub wzgledna<br />
sciezke dostepu. Mozna to zrobic zarówno<br />
w pliku samej biblioteki, jak i w pliku, który<br />
tej wspóldzielonej biblioteki uzywa.<br />
W celu wprowadzenia innej lokalizacji dla<br />
wspóldzielonej biblioteki:<br />
1. W pliku, korzystajacym ze wspóldzielonej<br />
biblioteki, zaznacz wspólny symbol z tej<br />
biblioteki i wybierz polecenie Linkage<br />
z menu rozwijanego biblioteki Options.<br />
Pojawi sie okno dialogowe Symbol<br />
Linkage Properties. Zaznaczona bedzie<br />
pozycja Import this symbol w opcji URL,<br />
a w dolnym polu ukaze sie biezaca sciezka<br />
dostepu do wspóldzielonej biblioteki.<br />
2. Wprowadz nowa sciezke dostepu do<br />
wspóldzielonej biblioteki. Kliknij OK<br />
(rys. 12.8).<br />
3. Powtórz powyzszy proces dla wszystkich<br />
wspóldzielonych symboli.<br />
4. Wyeksportuj plik SWF. Umiesc ten plik,<br />
jak i biblioteke w odpowiednich katalogach,<br />
zeby Flash mógl odnalezc wspóldzielone<br />
symbole (rys. 12.9).<br />
lub<br />
1. W pliku, zawierajacym wspóldzielona<br />
biblioteke, wybierz Shared Library<br />
Properties z menu rozwijanego Options<br />
biblioteki (rys. 12.10). Pojawi sie okno<br />
dialogowe Shared Library Properties.<br />
2. W polu URL wpisz sciezke dostepu do<br />
wspóldzielonej biblioteki. Kliknij OK<br />
(rys. 12.11).<br />
3. W nowym dokumencie Flasha otwórz<br />
wspóldzielona biblioteke i przeciagnij<br />
wspólne symbole na scene lub do biezacej<br />
biblioteki dokumentu. Wspóldzielone<br />
symbole beda polaczone ze wspóldzielona<br />
biblioteka, okreslona w polu URL okna<br />
dialogowego Shared Library Properties.<br />
Tworzenie wspóldzielonych bibliotek<br />
387
Rozdzial 12.<br />
Wspóldzielenie fontów<br />
Wspóldzielenie fontów<br />
Tak jak mozesz identyfikowac<br />
wspóldzielone symbole, tak tez istnieje<br />
mozliwosc tworzenia symboli<br />
pozwalajacych na wspóldzielenie fontów. Po<br />
utworzeniu symbolu czcionki, identyfikujesz<br />
go jako przeznaczony do wyeksportowania<br />
(Linkage) w procesie identycznym, jak<br />
w przypadku tworzenia wspóldzielonych<br />
symboli. Jesli wiele filmów uzywa tego<br />
samego fontu ze wspóldzielonej biblioteki,<br />
jest on wczytywany tylko raz dla pierwszego<br />
filmu, redukujac w ten sposób rozmiar pliku<br />
i czas wczytywania kolejnych filmów.<br />
W celu utworzenia<br />
wspóldzielonego symbolu fontu:<br />
1. Otwórz okno biblioteki. Z menu<br />
rozwijanego Options wybierz New Font<br />
(rys. 12.12).<br />
Pojawi sie okno dialogowe Font Symbol<br />
Properties.<br />
2. W polu Name wpisz nazwe twojego nowego<br />
symbolu fontu. W polu Font wybierz<br />
czcionke, która zamienisz na symbol fontu.<br />
Opcjonalnie zaznacz pola wyboru grupy<br />
Style. Kliknij OK (rys. 12.13).<br />
W bibliotece pojawi sie symbol fontu.<br />
3. Zaznacz symbol fontu. Z menu rozwijanego<br />
biblioteki Options wybierz Linkage.<br />
Pojawi sie okno dialogowe Symbol Linkage<br />
Properties.<br />
4. Z grupy opcji Linkage wybierz Export this<br />
symbol. W polu Identifier wpisz unikalna<br />
nazwe dla twojego symbolu. Kliknij OK<br />
(rys. 12.14).<br />
Wybrany symbol fontu jest juz oznaczony<br />
jako element do wyeksportowania<br />
i wspóldzielenia przez inne filmy.<br />
5. Wyeksportuj film Flasha do pliku SWF.<br />
Wybrany symbol fontu bedzie rezydowal<br />
w pliku SWF, udostepniajacym ów<br />
wspóldzielony font innym filmom.<br />
Rys. 12.12. W oknie biblioteki wybierz<br />
Options/New Font<br />
Rys. 12.13. Utwórz symbol fontu, wybierajac<br />
czcionke i nadajac mu nazwe w oknie<br />
dialogowym Font Symbol Properties<br />
Rys. 12.14. Oznacz swój symbol fontu jako<br />
przeznaczony do wspóldzielenia za pomoca<br />
okna dialogowego Symbol Linkage Properties<br />
388
Zarzadzanie zawartoscia i rozwiazywanie problemów<br />
Rys. 12.15. Wspóldzielone fonty sa dostepne na<br />
palecie Character jako oznaczone gwiazdka,<br />
widoczna obok ich nazwy<br />
W celu uzycia<br />
wspóldzielonego symbolu fontu:<br />
1. W celu otwarcia biblioteki zawierajacej<br />
wspóldzielony symbol fontu – powtórz<br />
czynnosci opisane w cwiczeniu „W celu<br />
utworzenia wspóldzielonej biblioteki”.<br />
2. Przeciagnij wspólny symbol fontu<br />
z wspóldzielonej biblioteki do biblioteki<br />
nowego pliku Flasha.<br />
Wspóldzielony symbol fontu pojawi sie na<br />
liscie dostepnych fontów palety Character.<br />
3. Wybierz narzedzie tekstowe (Text Tool ),<br />
a nastepnie wspóldzielony symbol fontu<br />
z palety Character (rys. 12.15).<br />
Wspóldzielenie fontów<br />
389
Rozdzial 12.<br />
Edytowanie skryptu<br />
Edytowanie skryptu<br />
Kiedy skrypt widoczny w oknie skryptu<br />
palety akcji staje sie dlugi i rozbudowany,<br />
mozesz zaczac go sprawdzac, edytowac<br />
i zarzadzac jego zawartoscia za pomoca<br />
polecen dostepnych w menu rozwijanym<br />
palety akcji. Oprócz mozliwosci wyboru<br />
pomiedzy trybami Normal i Expert, menu<br />
to udostepnia opcje szukania i zastepowania<br />
wyrazów, importowania i eksportowania<br />
skryptów, jak równiez drukowania skryptu<br />
oraz rózne sposoby jego wyswietlania<br />
(rys. 12.16). Wszystkie te funkcje sa<br />
dostepne w obydwu trybach pracy palety –<br />
Normal i Expert.<br />
W celu sprawdzenia skladni skryptu:<br />
1. Na palecie akcji wybierz Check Syntax<br />
z menu rozwijanego opcji (Ctrl+T).<br />
Flash sprawdzi zawartosc okna skryptu<br />
w poszukiwaniu bledów w skladni.<br />
W przypadku odnalezienia bledu, zobaczysz<br />
ostrzegawcze okno dialogowe i liste<br />
ewentualnych bledów wyswietlona w oknie<br />
Output (rys. 12.17). Wykorzystaj<br />
informacje zawarte w tym oknie do<br />
zlokalizowania i naprawienia zgloszonych<br />
bledów.<br />
Wskazówka<br />
• Polecenie Check Syntax informuje<br />
o bledach tylko odnosnie biezacej<br />
zawartosci okna skryptu. Jesli zadne<br />
bledy nie zostana znalezione, zobaczysz<br />
okno dialogowe informujace o braku<br />
bledów w skrypcie (rys. 12.18).<br />
Drukuje zawartosc<br />
okna skryptu<br />
Wyróznia<br />
kolorami rózne<br />
elementy skryptu<br />
Zaznacza wybrana linie wyrazenia<br />
W oknie skryptu wyszukuje<br />
okreslonego slowa lub frazy<br />
Zastepuje dane slowo<br />
lub fraze innymi<br />
Wyswietla akcje<br />
niepolecane do<br />
wykorzysta nia<br />
Zmienia<br />
rozmiary<br />
wyswietlania<br />
okna skryptu<br />
Rys. 12.16. Menu rozwijane opcji palety akcji zawiera funkcje<br />
edycyjne dla okna skryptu<br />
Sprawdza okno skryptu<br />
w poszukiwaniu bledów<br />
Importuje kod ActionScript<br />
z zewnetrznego pliku tekstowego<br />
Zapisuje zawartosc okna skryptu<br />
w formie pliku tekstowego<br />
390
Zarzadzanie zawartoscia i rozwiazywanie problemów<br />
Rys. 12.17. Napisany skrypt (u góry) zawiera<br />
niepotrzebnie wstawiona klamre zamykajaca.<br />
Flash informuje cie o rodzaju i lokalizacji bledu<br />
w oknie Output (u dolu)<br />
Rys. 12.18. Flash informuje takze o tym, ze twój<br />
skrypt jest wolny od bledów skladni<br />
Rys. 12.19. Kazde wystapienie wyrazenia<br />
_root.myPaddle._x zostanie zamienione<br />
na _root.myPaddle._y<br />
Uzywaj funkcji Find oraz Replace,<br />
dostepnych na palecie akcji, do szybkiej<br />
zmiany nazw zmiennych, wlasciwosci,<br />
a nawet akcji. Przykladowo, jesli utworzyles<br />
dlugi skrypt, w którym pojawia sie zmienna<br />
redTeamStatus, mozesz skopiowac i wkleic<br />
skrypt, a nastepnie zmienic wszystkie<br />
elementy redTeamStatus na<br />
blueTeamStatus. Mozliwe jest wyszukanie<br />
wszystkich wystepujacych w skrypcie<br />
wlasciwosci _x i zamienienie ich na<br />
wlasciwosci _y, albo odnalezienie<br />
wszystkich wystapien akcji gotoAndStop<br />
i wstawienie na ich miejsce akcji<br />
gotoAndPlay.<br />
W celu odnalezienia elementu<br />
skryptu i zastapienia go innym:<br />
1. Wybierz Replace z menu rozwijanego opcji<br />
palety akcji (Ctrl+H).<br />
Pojawi sie okno dialogowe Replace.<br />
2. W polu Find what podaj slowo lub slowa,<br />
które Flash ma odnalezc. W polu Replace<br />
wpisz slowo lub slowa, które maja zastapic<br />
wyszukane elementy. Zaznacz pole wyboru<br />
Match case, jesli Flash powinien<br />
rozpoznawac wielkie i male litery<br />
(rys. 12.19).<br />
3. Kliknij Replace w celu zamiany pierwszego<br />
odnalezionego slowa, ewentualnie kliknij<br />
Replace all, jesli chcesz od razu zamienic<br />
wszystkie wystapienia odnalezionego slowa.<br />
Wskazówki<br />
• Okno dialogowe Replace zastepuje<br />
wszystkie wystapienia danego slowa lub<br />
frazy innymi, tylko odnosnie biezacej<br />
zawartosci okna skryptu. W celu zamiany<br />
wszystkich wystapien wybranego slowa<br />
w calym filmie, musisz otwierac palete akcji<br />
dla kazdego oddzielnego skryptu<br />
i powtarzac caly proces.<br />
• W celu odnajdywania i zastepowania slów<br />
musisz uruchomic palete akcji w trybie<br />
Expert.<br />
Edytowanie skryptu<br />
391
Rozdzial 12.<br />
Funkcje importowania, eksportowania<br />
i drukowania, dostepne na palecie akcji,<br />
pozwalaja ci korzystac z zewnetrznych<br />
edytorów tekstu i drukowac zawartosc okna<br />
skryptu.<br />
Edytowanie skryptu<br />
W celu zaimportowania skryptu:<br />
1. Wybierz Import From File z menu<br />
rozwijanego opcji (Ctrl+I). W oknie<br />
dialogowym, które sie pojawi, wybierz plik<br />
tekstowy zawierajacy skrypt wybrany do<br />
zaimportowania. Kliknij Open.<br />
Flash zastapi biezaca zawartosc okna<br />
skryptu zawartoscia importowanego pliku<br />
tekstowego.<br />
W celu wyeksportowania skryptu:<br />
1. Wybierz Export As File z menu<br />
rozwijanego opcji (Ctrl+O). Wpisz nazwe<br />
pliku tekstowego, w którym przechowywany<br />
bedzie eksportowany skrypt. Kliknij Save .<br />
Flash dokona zapisu pliku tekstowego,<br />
w którym znajdzie sie cala biezaca<br />
zawartosc okna skryptu. Polecane dla<br />
eksportowanych w ten sposób plików<br />
rozszerzenie to .as, jak w mójKod.as.<br />
392
Zarzadzanie zawartoscia i rozwiazywanie problemów<br />
Plik FLA Plik FLA Plik sharedLibrary.fla<br />
Plik SWF<br />
Plik tekstowy<br />
ActionScript<br />
Plik SWF<br />
Plik sharedLibrary.swf<br />
Rys. 12.20. Flash dolacza zewnetrzny skrypt za<br />
pomoca akcji #include po wyeksportowaniu pliku<br />
SWF (z lewej). Natomiast wspóldzielona<br />
biblioteka jest dolaczana do pliku SWF<br />
w czasie odtwarzania (z prawej)<br />
Dolaczanie<br />
zewnetrznych skryptów<br />
Mozliwe jest tworzenie zewnetrznych<br />
plików ActionScript w celu wspóldzielenia<br />
pewnych fragmentów kodu przez wiele<br />
filmów. Utwórz taki kod, pojawiajacy sie<br />
wielokrotnie w róznych filmach, i trzymaj<br />
go w pliku tekstowym poza srodowiskiem<br />
Flasha. Gdybys chcial cos w nim zmienic,<br />
bedziesz musial to zrobic tylko raz,<br />
w jednym miejscu.<br />
Zewnetrzne fragmenty kodu mozna dolaczac<br />
do filmu Flasha za pomoca akcji #include,<br />
która wprowadza do Flasha taki zewnetrzny<br />
plik tekstowy ze skryptem i dolacza jego<br />
zawartosc do istniejacego juz w oknie<br />
skryptu kodu.<br />
Jednakze istnieje zasadnicza róznica<br />
pomiedzy uzywaniem akcji #include do<br />
wspóldzielenia kodu ActionScript<br />
i uzywaniem wspóldzielonych bibliotek do<br />
dzielenia symboli. Dolaczany z zewnatrz<br />
kod ActionScript nie jest kompilowany<br />
dynamicznie w czasie odtwarzania, tak wiec<br />
zachodzi potrzeba powtórnego<br />
wyeksportowania filmu Flasha, jesli taki<br />
kod ma zostac wprowadzony do biezacego<br />
skryptu. Oznacza to, ze akcja #include,<br />
chociaz uzyteczna, ma ograniczone dzialanie<br />
w srodowisku autorskim Flasha (rys. 12.20).<br />
Dolaczanie zewnetrznych skryptów<br />
393
Rozdzial 12.<br />
Dolaczanie zewnetrznych skryptów<br />
W ponizszym cwiczeniu przypiszemy akcje<br />
#include do klipu filmowego. Dokument<br />
tekstowy zawiera akcje ActionsScript typu<br />
startDrag. Po wyeksportowaniu pliku<br />
SWF, kod z zewnetrznego dokumentu<br />
tekstowego zostanie dolaczony do akcji<br />
przypisanych do klipu filmowego.<br />
W celu dolaczenia<br />
zewnetrznego fragmentu skryptu<br />
za pomoca akcji #include:<br />
1. Uruchom edytor tekstu, np. systemowy<br />
Notatnik.<br />
2. Napisz swój kod ActionScript i zapisz go<br />
w postaci dokumentu tekstowego. Nie<br />
uzywaj znaków cudzyslowu. Nadaj plikowi<br />
rozsze rzenie .as, dzieki czemu zostanie<br />
zidentyfikowany jako plik ActionScript<br />
(rys. 12.21).<br />
3. Otwórz nowy dokument Flasha. Utwórz<br />
symbol klipu filmowego i umiesc jego klon<br />
na scenie. Zaznacz klon i otwórz palete<br />
akcji.<br />
4. Wybierz Actions/onClipEvent. W bloku<br />
edycji parametrów zaznacz zdarzenie Load.<br />
5. Wybierz Actions/include (Esc + in).<br />
6. W polu Path wpisz nazwe pliku tekstowego<br />
zawierajacego kod ActionScript. Nie wpisuj<br />
znaków cudzyslowu, jako ze zostana one<br />
dodane automatycznie w oknie skryptu<br />
(rys. 12.22).<br />
7. Zapisz plik FLA w tej samej lokalizacji,<br />
co plik tekstowy z kodem ActionScript.<br />
8. Wyeksportuj plik SWF z pliku FLA. Flash<br />
dolaczy do klipu filmowego kod zawarty<br />
w dokumencie tekstowym. Jesli zmienisz<br />
zawartosc pliku tekstowego, bedziesz musial<br />
ponownie wyeksportowac plik SWF w celu<br />
uwzglednienia przez Flasha tych zmian.<br />
Rys. 12.21. Fragment skryptu zapisany<br />
w pliku tekstowym myCode.as<br />
Rys. 12.22. Podczas wprowadzania tego<br />
klipu filmowego do pamieci, zewnetrzny plik<br />
tekstowy o nazwie myCode.as jest dolaczany<br />
do tego fragmentu skryptu<br />
Wskazówka<br />
• Jesli korzystasz z palety akcji w trybie<br />
Expert przy recznym wpisywaniu<br />
skryptu, nie dolaczaj srednika na koncu<br />
wyrazenia #include. Chociaz sredniki<br />
zazwyczaj sluza do oddzielania<br />
poszczególnych wyrazen, #include jest<br />
tutaj wyjatkiem.<br />
394
Zarzadzanie zawartoscia i rozwiazywanie problemów<br />
Kliknij, zeby<br />
zwinac lub<br />
rozwinac<br />
Pole Find<br />
(znajdz)<br />
Przyciski sposobu<br />
Obszar wyswietlania<br />
wyswietlania zawartosci<br />
Rys. 12.23. Paleta Movie Explorer wyswietla<br />
w hierarchicznej postaci rózne elementy filmu<br />
Poslugiwanie sie<br />
paleta Movie Explorer<br />
Jesli chcesz obejrzec caly swój film „z lotu<br />
ptaka”, wykorzystaj palete Movie Explorer<br />
(Ctrl+Alt+M). Jest to potezne narzedzie –<br />
do sledzenia wszystkich elementów filmu –<br />
które pomoze ci dotrzec bezposrednio do<br />
wybranego fragmentu skryptu, grafiki czy<br />
tez ujecia przeznaczonego do modyfikacji.<br />
Paleta Movie Explorer pozwoli<br />
przedstawiac wybiórczo graficzna<br />
reprezentacje komponentów filmu i uzyska<br />
informacje o poszczególnych ujeciach,<br />
warstwach, jak równiez fragmentach skryptu<br />
przypisanych do przycisków, klipów<br />
filmowych i ujec kluczowych. Wyswietlana<br />
zawartosc jest ulozona hierarchicznie, dzieki<br />
czemu latwo dostrzec powiazania pomiedzy<br />
róznymi elementami filmu (rys. 12.23).<br />
Paleta Movie Explorer jest uaktualniana<br />
w czasie rzeczywistym, tak wiec kiedy<br />
pracujesz w srodowisku autorskim Flasha,<br />
paleta zawsze wyswietla wyniki ostatnich<br />
modyfikacji. Korzystaj z niej w celu<br />
odnajdywania okreslonych elementów filmu.<br />
Na przyklad, jesli chcesz znalezc wszystkie<br />
klony klipu filmowego, mozesz nakazac<br />
Flashowi wyszukanie ich, a nastepnie<br />
wyswietlenie dokladnej sceny, warstwy<br />
i klatki, w której rezyduje kazdy z klonów.<br />
Pózniej mozesz szybko udac sie do<br />
wskazanego punktu na listwie czasowej<br />
i dokonac edycji takiego klonu. Ponadto<br />
w samej palecie Movie Explorer mozesz<br />
edytowac rózne elementy, np. nazwy<br />
symboli lub zawartosc selekcji tekstu. Paleta<br />
Movie Explorer znacznie ulatwia orientacje<br />
w rozbudowanym filmie z racji<br />
wyswietlania zawartosci na rózne sposoby<br />
i szybkiego nawigowania do wskazanego<br />
elementu.<br />
Paleta Movie Explorer<br />
395
Rozdzial 12.<br />
Paleta Movie Explorer<br />
W celu wyswietlania<br />
róznych kategorii elementów:<br />
Z rozwijanego menu opcji w prawym<br />
górnym rogu palety Movie Explorer<br />
wybierz jedna (lub wiecej) z opcji<br />
(rys. 12.24):<br />
1. Show Movie Elements wyswietla wszystkie<br />
elementy filmu, organizujac je wedlug scen.<br />
Pokazywana jest tylko biezaca scena.<br />
lub<br />
Show Symbol Definitions wyswietla<br />
wszystkie elementy powiazane z klonami<br />
symboli obecnymi na scenie.<br />
lub<br />
Show All Scenes wyswietla wszystkie<br />
elementy filmu we wszystkich scenach.<br />
W celu wyswietlenia<br />
wybranych kategorii elementów:<br />
Z rzedu przycisków okreslajacych sposób<br />
wyswietlania zawartosci, umieszczonych<br />
w górnej czesci palety, kliknij jeden lub<br />
wiecej, zeby dodac kolejne kategorie<br />
elementów do wyswietlenia (rys. 12.25).<br />
1. Show Text wyswietla biezacy lancuch<br />
znakowy w selekcji tekstu, nazwe i rozmiar<br />
czcionki, a takze nazwy zmiennych tekstu<br />
pobieranego i dynamicznego.<br />
lub<br />
Show Buttons, Movie Clips , and Graphics<br />
wyswietla nazwy symboli przycisków,<br />
klipów filmowych i grafik na scenie, jak<br />
równiez nazwy klonów klipów filmowych.<br />
lub<br />
Show ActionScripts wyswietla akcje<br />
przypisane przyciskom, klipom filmowym<br />
i ujeciom.<br />
lub<br />
Show Vide o, Sound, and Bitmaps<br />
wyswietla nazwy symboli zaimportowanych<br />
klipów wideo, dzwieków i bitmap obecnych<br />
na scenie.<br />
Rys. 12.24. Menu rozwijane opcji palety<br />
Movie Explorer<br />
Rys. 12.25. Przyciski sposobu wyswietlania<br />
zawartosci pozwalaja selektywnie wybierac<br />
wyswietlane elementy<br />
396
Zarzadzanie zawartoscia i rozwiazywanie problemów<br />
Rys. 12.26. Wpisanie dowolnej frazy w polu Find<br />
spowoduje wyswietlenie wszystkich miejsc jej<br />
wystapienia. Tutaj zostala znaleziona nazwa<br />
klonu myReferecnePoint odnoszaca sie do<br />
symbolu klipu filmowego ball<br />
lub<br />
Show Frames and Layers wyswietla nazwy<br />
warstw, ujec kluczowych i etykiet<br />
poszczególnych klatek filmu.<br />
lub<br />
Customize which Items to Show wyswietla<br />
okno dialogowe, w którym mozesz dokonac<br />
wyboru elementów przeznaczonych do<br />
wyswietlenia.<br />
W celu odnalezienia i edycji wyswietlanych<br />
elementów:<br />
1. W polu Find u góry palety wpisz nazwe<br />
elementu, który chcesz odnalezc (rys. 12.26).<br />
Wszystkie elementy filmu o podanej nazwie<br />
zostana wyswietlone automatycznie w czasie<br />
wpisywania.<br />
2. Kliknij wybrany element, zeby go zaznaczyc.<br />
Spowoduje to jednoczesnie zaznaczenie<br />
tego elementu na listwie czasowej i na<br />
scenie. Jesli zaznaczono scene lub ujecie<br />
kluczowe, Flash przeniesie cie do tej sceny<br />
lub ujecia kluczowego.<br />
3. Z menu rozwijanego opcji palety Movie<br />
Explorer wybierz Edit in Place lub Edit in<br />
New Window – w celu uruchomienia trybu<br />
edycji wybranego symbolu.<br />
lub<br />
4. Z menu rozwijanego opcji wybierz Rename.<br />
Umozliwi to zaznaczenie i edycje nazwy<br />
elementu.<br />
lub<br />
Kliknij dwukrotnie wybrany element w celu<br />
zmodyfikowania go. W zaleznosci od typu<br />
elementu, Flash moze otworzyc dodatkowe<br />
okno:<br />
υ Dwukrotne klikniecie symbolu<br />
(z wyjatkiem dzwieku, wideo i bitmap)<br />
uruchamia tryb edycji symbolu.<br />
υ Dwukrotne klikniecie skryptu otwiera<br />
palete akcji.<br />
Paleta Movie Explorer<br />
397
Rozdzial 12.<br />
Paleta Movie Explorer<br />
υ Dwukrotne klikniecie sceny lub warstwy<br />
pozwala ci na zmiane nazwy tych<br />
elementów.<br />
υ Dwukrotne klikniecie ujecia otwiera<br />
palety majace zwiazek z edycja ujec<br />
(paleta akcji, Frame i Sound).<br />
υ Dwukrotne klikniecie selekcji tekstu<br />
pozwala na edycje jej zawartosci.<br />
W celu wymiany wszystkich wystapien<br />
okreslonego fontu:<br />
1. W polu find palety Movie Explorer wpisz<br />
nazwe fontu, który chcesz zastapic innym.<br />
Wyswietlone zostana wszystkie miejsca<br />
wystepowania tego fontu (rys. 12.27).<br />
2. Zaznacz wszystkie elementy tekstowe –<br />
klikniecie z przytrzymaniem Shift pozwala<br />
dokonac kilku selekcji jednoczesnie.<br />
3. Poslugujac sie paleta Character, wybierz<br />
nowa czcionke i styl dla wszystkich<br />
elementów tekstowych.<br />
Wszystkie zaznaczone elementy zmienia sie<br />
stosownie do modyfikacji, jakie<br />
wprowadziles na palecie Character<br />
(rys. 12.28).<br />
W celu wyszukania wszystkich<br />
klonów symbolu klipu filmowego:<br />
1. W polu find palety Movie Explorer wpisz<br />
nazwe symbolu klipu filmowego, którego<br />
klony chcesz odnalezc. Wyswietlone zostana<br />
wszystkie klony wybranego klipu filmowego<br />
(rys. 12.29).<br />
Rys. 12.27. Wyswietlone zostana wszystkie<br />
miejsca wystepowania fontu Times<br />
Rys. 12.29.<br />
Wpisanie w polu<br />
Find nazwy ball<br />
spowoduje<br />
wyswietlenie<br />
wszystkich klonów<br />
symbolu o tej<br />
nazwie<br />
Rys. 12.28. Majac zaznaczone elementy<br />
tekstowe pisane czcionka Times, wybierz inny<br />
font, np. Verdana (u góry) z listy na palecie<br />
Character. Flash wymieni czcionke<br />
zaznaczonych elementów tekstowych<br />
z Times na Verdana (u dolu)<br />
398
Zarzadzanie zawartoscia i rozwiazywanie problemów<br />
Rys. 12.30. Obiekt myArray jest tworzony za<br />
pomoca funkcji konstruktora new Array<br />
Wyswietlanie zmiennych<br />
i obiektów w oknie Output<br />
Chociaz paleta Movie Explorer daje dostep do<br />
wiekszosci elementów graficznych filmu oraz<br />
fragmentów skryptu, to jednak nie umozliwia<br />
wyswietlania zmiennych lub sciezek dostepu<br />
do obiektów. W tym celu uzywa sie okna<br />
Output. Czesto w czasie odtwarzania filmu<br />
bedziesz chcial znac wartosci przyjmowane<br />
przez zmienne i sciezki dostepu do klipów<br />
filmowych, zeby móc o cenic, czy Flash<br />
wlasciwie manipuluje danymi. Jest to<br />
szczególnie wazne w przypadku najbardziej<br />
skomplikowanych filmów, byc moze<br />
zawierajacych wiele parametrów<br />
przekazywanych miedzy funkcjami lub duza<br />
ilosc dynamicznie przydzielanych zmiennych.<br />
Zalózmy na przyklad, ze chcesz zadeklarowac<br />
i wypelnic obiekt tablicowy w pierwszym<br />
ujeciu na listwie czasowej. Po przypisaniu<br />
skryptu do odpowiedniego ujecia, mozesz<br />
przetestowac film, ale tak naprawde nie<br />
bedziesz wiedzial, czy Flash wlasciwie<br />
wypelnil tablice, jako ze na scenie nie bedzie<br />
widac nic konkretnego. W celu sprawdzenia,<br />
czy tablica jest rzeczywiscie wypelniona<br />
poprawnymi wartosciami, mozesz wyswietlic<br />
zmienne w oknie Output w trybie testowym.<br />
Polecenie List Variables wyswietla wszystkie<br />
zmienne istniejace w filmie wraz<br />
z przypisanymi im wartosciami.<br />
W kolejnym cwiczeniu utworzysz najpierw<br />
obiekt tablicowy, a nastepnie przypiszesz mu<br />
wartosci za pomoca wyrazenia wykonywanego<br />
w petli. Bedac w trybie testowym, wyswietlisz<br />
zmienne filmu w oknie Output, zeby<br />
zobaczyc ostateczne wartosci podstawione do<br />
tablicy.<br />
W celu wyswietlenia zmiennych<br />
w oknie Output:<br />
1. Zaznacz pierwsze ujecie na glównej listwie<br />
czasowej i otwórz palete akcji.<br />
2. Przygotuj klon nowego obiektu tablicowego<br />
o nazwie myArray (moja tablica), jak to<br />
opisano w rozdziale 11 (rys. 12.30).<br />
Wyswietlanie zmiennych i obiektów<br />
399
Rozdzial 12.<br />
Wyswietlanie zmiennych i obiektów<br />
3. Wybierz Actions/for. W polu Init wpisz<br />
i=0. W polu Condition wpisz i
Zarzadzanie zawartoscia i rozwiazywanie problemów<br />
Rys. 12.34. Ten sam film wyswietlany na palecie<br />
Movie Explorer (u góry) oraz w oknie Output<br />
(u dolu). Na palecie Movie Explorer widoczny<br />
jest klip filmowy spaceship, jego przycisk i akcje<br />
przypisane do przycisku. Okno Output wyswietla<br />
sciezke dostepu do klipu filmowego spaceship<br />
i wskazuje, ze wewnatrz klipu sa jeszcze ksztalt<br />
oraz przycisk. Ponadto okno Output informuje,<br />
ze w ujeciu 64. umieszczony jest klip filmowy<br />
asteroid (w momencie, kiedy wybrano polecenie<br />
List Objects)<br />
Okno Output mozna tez wykorzystac do<br />
wyswietlania obiektów w filmie. Poniewaz<br />
okno to nie wyswietla informacji<br />
w charakterze graficznym, mozesz uzyskac<br />
w nim informacje niedostepne z poziomu<br />
palety Movie Explorer (poslugujacej sie<br />
wlasnie taka graficzna reprezentacja<br />
elementów). Informacje o obiektach,<br />
wyswietlane w oknie Output, zawieraja<br />
poziom obiektu, numer ujecia, typ symbolu<br />
(klip filmowy, przycisk), typ grafiki (tekst,<br />
ksztalt) i bezwzgledna sciezke dostepu do<br />
klipów filmowych. Sciezka dostepu jest<br />
najwazniejsza informacja, która mozesz<br />
uzyskac w oknie Output wprost (Movie<br />
Explorer wyswietla informacje osciezkach<br />
posrednio). rys. 12.34 przedstawia<br />
porównanie typowych informacji<br />
wyswietlanych dla jednego filmu, zarówno<br />
w oknie Output, jak i za pomoca palety<br />
Movie Explorer.<br />
W celu wyswietlenia obiektów<br />
w oknie Output:<br />
1. W trybie testowym, wybierz z górnego<br />
paska menu Debug/List Objects (Ctrl+L)<br />
(rys. 12.35).<br />
W oknie Output zostana wyswietlone<br />
wszystkie obiekty filmu w aktualnym stanie.<br />
Wskazówka<br />
• Podobnie jak w przypadku polecenia List<br />
Variables, polecenie List Objects<br />
wyswietla jedynie aktualny w momencie<br />
wybrania status filmu. Jesli klip filmowy<br />
znika z listwy czasowej w czasie<br />
odtwarzania filmu, musisz ponownie wybrac<br />
polecenie List Objects w celu odswiezenia<br />
informacji o obiektach, wyswietlanych<br />
w oknie Output.<br />
Wyswietlanie zmiennych i obiektów<br />
Rys. 12.35. W trybie testowym wybierz<br />
Debug/List Objects<br />
401
Rozdzial 12.<br />
Sledzenie zmiennych w oknie Output<br />
Sledzenie zmiennych<br />
w oknie Output<br />
Czasem bedziesz chcial znac status zmiennej<br />
lub wyra zenia w okreslonym momencie<br />
w czasie odtwarzania filmu. Przykladowo,<br />
wyobraz sobie, ze przygotowales gre Pong,<br />
w której klip filmowy w formie pileczki<br />
odbija sie od dwóch innych klipów<br />
filmowych, przedstawiajacych rakietki.<br />
Chcesz poznac, na potrzeby testów, pozycje<br />
rakietki w momencie jej kolizji z pileczka.<br />
Uzycie w tym miejscu polecenia List<br />
Variables niewiele pomoze, jako ze zmienne<br />
obrazujace polozenie rakietki zmieniaja sie<br />
bardzo szybko. Rozwiazaniem jest<br />
skorzystanie z akcji trace. Mozesz umiescic<br />
te akcje w dowolnym punkcie filmu i tym<br />
samym nakazac Flashowi wysylanie<br />
wybranego komunikatu do okna Output w<br />
trybie testowym. Tym komunikatem bedzie<br />
wyrazenie, utworzone w celu przekazywania<br />
ci potrzebnej informacji we wlasciwym<br />
momencie. W przypadku wspomnianej gry<br />
Pong, wyrazenie sledzace mogloby wygladac<br />
tak:<br />
trace ("pozycja X rakietki wynosi " +<br />
mojaRakietka._x);<br />
trace ("pozycja Y rakietki wynosi " +<br />
mojaRakietka._y);<br />
Umiesc powyzsze wyrazenia w wyrazeniu<br />
warunkowym, odpowiadajacym za detekcje<br />
kolizji. W przypadku spelnieniu warunku,<br />
Flash wysle komunikat (w momencie<br />
wystapienia kolizji) do okna Output.<br />
Komunikat moze wygladac nastepujaco:<br />
pozycja X rakietki wynosi 25<br />
pozycja y rakietki wynosi 89<br />
402
Zarzadzanie zawartoscia i rozwiazywanie problemów<br />
Rys. 12.36. Akcja startDrag sprawi, ze ten klip<br />
filmowy bedzie podazal za wskaznikiem myszy<br />
Rys. 12.37. Akcja trace szacuje wyrazenie w polu<br />
Message i wyswietla wartosc w oknie Output<br />
Klip filmowy myMovieClip<br />
(przeciagany)<br />
Klip filmowy rock<br />
Rys. 12.38. Okno Output wyswietla wartosc false<br />
(falsz), jesli nie zachodzi kolizja miedzy klipami<br />
filmowymi myMovieClip i rock (u góry).<br />
W przypadku nastapienia kolizji, w oknie Output<br />
pojawi sie wartosc true (prawda) (u dolu)<br />
Akcji trace mozna tez uzyc do<br />
monitorowania warunku wyrazenia, dzieki<br />
czemu bedziesz mógl zrozumiec<br />
okolicznosci zmieniajace jego wartosc. Na<br />
przyklad w ponizszym cwiczeniu, utworzysz<br />
prosty przeciagany klip filmowy oraz drugi<br />
klip, tym razem stacjonarny. Przypiszesz<br />
akcje trace do metody hitTest<br />
przeciaganego klipu filmowego,<br />
pozwalajacej zobaczyc, kiedy i gdzie<br />
wartosci sa prawdziwe lub falszywe.<br />
W celu<br />
wyswietlenia wyrazenia<br />
w oknie Output:<br />
1. Utwórz symbol klipu filmowego, umiesc<br />
jego klon na scenie i nazwij go<br />
myMovieClip (mój klip filmowy).<br />
2. Utwórz kolejny symbol klipu filmowego,<br />
umiesc jego klon na scenie i nazwij go rock<br />
(skala).<br />
3. Zaznacz klon o nazwie myMovieClip<br />
i otwórz palete akcji.<br />
4. Wybierz Actions/on. W bloku edycji<br />
parametrów wybierz zdarzenie enterFrame.<br />
5. Wybierz Actions/startDrag. Wpisz this<br />
w polu Target i zaznacz pole Expression.<br />
Zaznacz tez pole Lock mouse to center<br />
(rys. 12.36).<br />
6. Wybierz Actions/trace (Esc + tr ).<br />
7. W polu Message wprowadz wyrazenie:<br />
this.hitTest(_root.rock)<br />
Zaznacz pole Expression (rys. 12.37).<br />
Flash oszacuje metode hiTest w celu<br />
ustalenia, czy przeciagany klip filmowy<br />
wchodzi w kolizje z klipem filmowym rock.<br />
Zwracana wartosc jest wyswietlana w oknie<br />
Output w trybie testowym.<br />
8. Przetestuj film.<br />
Otworzy sie okno Output, wyswietlajac<br />
rezultat dzialania akcji trace (rys. 12.38).<br />
Sledzenie zmiennych w oknie Output<br />
403
Rozdzial 12.<br />
Sledzenie zmiennych w oknie Output<br />
W polaczeniu z akcja trace mozna jeszcze<br />
uzyc operatora typeof i w efekcie uzyskac<br />
informacje o typie danych przechowywanych<br />
w zmiennej. Informacja tego rodzaju staje sie<br />
bardzo uzyteczna w momencie, kiedy<br />
zaczynasz doswiadczac problemów<br />
z niespodziewanymi wartosciami zmiennych.<br />
Jesli podejrzewasz, ze problem ten jest<br />
wynikiem uzywania zmiennych, które nie sa<br />
zgodne z typem przechowywanych w nich<br />
danych, skorzystanie z akcji trace pomoze<br />
potwierdzic lub rozwiac twoje przypuszczenia.<br />
W celu okreslenia typu danych<br />
przechowywanych w zmiennej:<br />
1. Kontynuuj prace nad plikiem utworzonym<br />
wczesniej, w cwiczeniu „W celu<br />
wyswietlenia zmiennych w oknie Output”.<br />
Jest to plik, w którym utworzyles tablice<br />
i wypelniles ja wyrazeniem wykonywanym<br />
w petli. Zaznacz wiec pierwsze ujecie<br />
i otwórz palete akcji.<br />
2. Zaznacz klamre zamykajaca ostatniego<br />
wyrazenia w oknie skryptu.<br />
3. Wybierz Actions/trace.<br />
4. W polu Message wybierz Operators/typeof.<br />
W polu Message pojawi sie operator typeof,<br />
z podswietlonym argumentem wyrazenia.<br />
5. W miejsce podswietlonego slowa wpisz<br />
myArray (rys. 12.39).<br />
Flash oszacuje zmienna myArray<br />
i wyswietli jej typ danych w oknie Output<br />
w trybie testowym.<br />
6. Dodaj jeszcze dwie akcje trace<br />
z operatorami typeof (rys. 12.40).<br />
7. Przetestuj film. Flash wyswietli rezultaty<br />
dzialania trzech wyrazen w oknie Output<br />
w trybie testowym. Pierwsze wyrazenie<br />
wyswietli object (obiekt) jako typ danych<br />
zmiennej myArray. Drugie wyswietli<br />
number (liczba) jako typ danych zmiennej<br />
myArray[3], a trzecie wyrazenie wskaze na<br />
string (lancuch znakowy) zmiennej<br />
myArray.toString() (rys. 12.41).<br />
Rys. 12.39. Typ danych zawartych w tablicy<br />
myArray zostanie oszacowany<br />
Rys. 12.40. Dodaj akcje trace w celu<br />
oszacowania i wyswietlenia typów danych 3.<br />
indeksu tablicy myArray oraz metody toString<br />
tej tablicy<br />
Rys. 12.41. Rezultaty wykonania akcji trace<br />
widoczne w oknie Output<br />
404
Zarzadzanie zawartoscia i rozwiazywanie problemów<br />
Hierarchia<br />
klipów<br />
filmowych<br />
Okno<br />
wyswietlania<br />
Zakladki<br />
Properties,<br />
Variables<br />
i Watch<br />
Miejsce<br />
osadzenia<br />
w hierarchii<br />
Rys. 12.42. Paleta Debugger wyswietla<br />
hierarchie klipów filmowych wraz z wszystkimi<br />
ich wlasciwosciami i zmiennymi. Tutaj, zmienne<br />
myDegrees, myRadians i pressing sa osadzone<br />
w klipie filmowym _level0.myReferencePoint<br />
Rys. 12.43. Uzyj menu Control do kontrolowania<br />
sposobu odtwarzania filmu w trybie testowym<br />
Poslugiwanie sie<br />
paleta Debugger<br />
Paleta Debugger daje ci mozliwosc<br />
monitorowania i modyfikowania wartosci<br />
wszystkich zmiennych i wlasciwosci<br />
wystepujacych w filmie, i to w czasie jego<br />
odtwarzania. Mozna nawet sprawdzac<br />
wartosci obiektów przechowujacych dane,<br />
takich jak klony obiektu daty lub dzwieku.<br />
Korzystaj z palety Debugger w celu<br />
sprawdzenia, czy Flash manipuluje<br />
informacjami zawartymi w zmiennych<br />
w okreslony przez ciebie sposób, a takze<br />
w celu szybkiego sprawdzania warunków<br />
i innych efektów przetwarzania zmiennych.<br />
Wyobraz sobie np., ze utworzyles animacje<br />
ze zmienna o nazwie mojaSzybkosc,<br />
kontrolujaca predkosc poruszania sie statku<br />
kosmicznego. Dzieki palecie Debugger<br />
zmienna te mozesz modyfikowac podczas<br />
odtwarzania filmu i na biezaco oceniac jej<br />
wplyw na ruch statku. Zwiekszaj wiec lub<br />
zmniejszaj wartosc zmiennej tak dlugo, az<br />
uzyskasz zadowalajace rezultaty.<br />
Palete Debugger otwiera sie i uzywa<br />
w specjalnej wersji odtwarzacza Flasha,<br />
dostepnej z poziomu srodowiska autorskiego<br />
programu. Po otwarciu i uaktywnieniu,<br />
paleta Debugger wyswietla informacje<br />
w dwóch oknach: w oknie wyswietlania<br />
u góry palety oraz w zakladkach Properties,<br />
Variables i Watch w dolnej czesci palety.<br />
Okno wyswietlania pokazuje g lówna listwe<br />
czasowa wraz z hierarchia klipów<br />
filmowych obecnych na tej listwie. Mozesz<br />
zaznaczyc listwe glówna albo inna, obecna<br />
w filmie, i zobaczyc wlasciwosci przypisane<br />
do tej okreslonej listwy czasowej lub<br />
wszystkie osadzone w niej zmienne<br />
(rys. 12.42).<br />
Uzyj polecen menu Control do przewijania,<br />
odtwarzania i przemieszczania sie w przód<br />
i w tyl w obrebie filmu, takze klatka po klatce,<br />
w celu skrupulatnego sprawdzania wlasciwosci<br />
i zmiennych filmu (rys. 12.43).<br />
Poslugiwanie sie paleta Debugger<br />
405
Rozdzial 12.<br />
Poslugiwanie sie paleta Debugger<br />
W celu uzyskania dostepu<br />
do palety Debugger:<br />
1. Z poziomu srodowiska autorskiego Flasha,<br />
wybierz Control/Debug Movie<br />
(Ctrl+Shift+Enter) (rys. 12.44).<br />
Flash wyeksportuje plik SWF i uruchomi<br />
tryb testowy. Zostanie otwarta<br />
i uruchomiona paleta Debugger.<br />
lub<br />
1. W trybie testowym srodowiska autorskiego,<br />
w odtwarzaczu Flasha lub w przegladarce<br />
internetowej, kliknij prawym klawiszem<br />
myszy film SWF.<br />
Pojawi sie menu podreczne Flasha<br />
(rys. 12.45).<br />
2. Z menu podrecznego wybierz Debugger.<br />
Zostanie otwarta i uruchomiona paleta<br />
Debugger.<br />
W celu zmodyfikowania<br />
wlasciwosci lub zmiennej<br />
z poziomu palety Debugger:<br />
1. W oknie wyswietlania palety Debugger<br />
zaznacz klip filmowy, którego wlasciwosci<br />
lub zmienne chcesz modyfikowac.<br />
2. Wybierz zakladke Properties (wlasciwosci)<br />
lub Variables (zmienne).<br />
3. Kliknij dwukrotnie pole w kolumnie Value,<br />
znajdujace sie na prawo od wlasciwosci lub<br />
zmiennej, która chcesz zmodyfikowac<br />
(rys. 12.46).<br />
4. Wprowadz nowa wartosc.<br />
Nowa wartosc musi byc raczej stala (lancuch<br />
znakowy, liczba, wartosc boole’owska), niz<br />
wyrazeniem odnoszacym sie do innej<br />
zmiennej lub wlasciwosci. Przykladowo,<br />
mozesz wpisac 35, ale nie 35 + myAlpha.<br />
Po poprawnym podstawieniu nowej<br />
wartosci, film natychmiast reaguje na<br />
zmiany.<br />
Rys. 12.44. Wybierz Control/Debug Movie<br />
Rys. 12.45. Dostep do palety Debugger<br />
mozna uzyskac równiez za posrednictwem<br />
menu podrecznego<br />
Rys. 12.46. Wartosci wlasciwosci moga byc<br />
zaznaczane (u góry) i modyfikowane (u dolu),<br />
a wszelkie zmiany zostana wprowadzone do<br />
filmu natychmiast, nawet w czasie jego<br />
odtwarzania<br />
406
Zarzadzanie zawartoscia i rozwiazywanie problemów<br />
Rys. 12.47. Zaznaczona zmienna (myRadians)<br />
jest dodawana do zakladki Watch przy pomocy<br />
menu rozwijanego opcji<br />
Rys. 12.48. Zaznaczona zmienna (myRadians)<br />
jest dodawana do zakladki Watch przy pomocy<br />
menu podrecznego<br />
Wskazówka<br />
• Niektóre wlasciwosci maja charakter tylko<br />
do odczytu i nie mo ga byc modyfikowane.<br />
Przykladowo, wlasciwosc _totalframes<br />
jest taka wartoscia „odgórna”, okreslona<br />
przez liczbe ujec w twoim filmie.<br />
Zakladka Variables palety Debugger<br />
pozwala sledzic tylko zmienne<br />
zogniskowane na tym samym poziomie.<br />
Gdybys chcial obserwowac zmienne<br />
nalezace do róznych poziomów struktury<br />
filmu, mozesz posluzyc sie zakladka Watch<br />
do wybrania odpowiednich zmiennych.<br />
Dzieki temu mozesz utworzyc sobie liste<br />
krytycznych dla twojego filmu zmiennych<br />
i zgrupowac je w jednym miejscu,<br />
pozwalajacym na ich obserwacje<br />
i modyfikacje. Zmienne w zakladce Watch<br />
sa wyswietlane wraz z ich bezwzglednymi<br />
sciezkami dostepu, napisanymi w skladni<br />
z ukosnikiem.<br />
W celu dodania zmiennych<br />
do zakladki Watch:<br />
1. Na palecie Debugger zaznacz w oknie<br />
wyswietlania glówna listwe czasowa lub<br />
klip filmowy.<br />
2. Zaznacz zmienna sposród wymienionych<br />
w zakladce Variables. Z menu rozwijanego<br />
opcji palety w jej prawym górnym rogu<br />
wybierz Add Watch (rys. 12.47).<br />
Obok wybranej zmiennej pojawi sie<br />
niebieska kropka, wskazujac, ze zostala ona<br />
wybrana do wyswietlania jej w zakladce<br />
Watch.<br />
lub<br />
1. Zaznacz zmienna w zakladce Variables.<br />
Kliknij ja prawym klawiszem myszy.<br />
Z menu podrecznego wybierz Watch<br />
(rys. 12.48).<br />
Obok wybranej zmiennej pojawi sie<br />
niebieska kropka, wskazujac, ze zostala ona<br />
wybrana do wyswietlania jej w zakladce<br />
Watch.<br />
Poslugiwanie sie paleta Debugger<br />
407
Rozdzial 12.<br />
Poslugiwanie sie paleta Debugger<br />
lub<br />
1. Kliknij prawym klawiszem myszy puste<br />
miejsce w zakladce Watch. Z menu<br />
podrecznego wybierz Add (rys. 12.49).<br />
Wprowadz bezwzgledna sciezke dostepu<br />
do zmiennej, poslugujac sie skladnia<br />
z ukosnikiem.<br />
W celu usuniecia zmiennych<br />
z zakladki Watch:<br />
1. W zakladce Watch – kliknij prawym<br />
klawiszem myszy zmienna i wybierz<br />
Remove z pojawiajacego sie menu<br />
podrecznego.<br />
lub<br />
W zakladce Variables – kliknij prawym<br />
klawiszem myszy zmienna i wybierz<br />
polecenie Watch (oznaczone „ptaszkie m”).<br />
lub<br />
W zakladce Variables lub Watch – zaznacz<br />
zmienna, a potem wybierz Remove Watch z<br />
menu rozwijanego opcji w prawym górnym<br />
rogu palety Debugger.<br />
Rys. 12.49. Wybierz Add z menu podrecznego<br />
zakladki Watch w celu wprowadzenia<br />
zmiennej recznie<br />
408
Zarzadzanie zawartoscia i rozwiazywanie problemów<br />
Rys. 12.50. Dobrze zorganizowane warstwy –<br />
jak te powyzej – sa latwe do ogarniecia<br />
i wprowadzania zmian<br />
Optymalizowanie filmu<br />
Zrozumienie dzialania narzedzi, których<br />
uzywasz do tworzenia, grafiki, animacji,<br />
dzwieku i skryptu jest wazne, jednak nie<br />
mniej istotne jest uswiadomienie sobie, jak<br />
zrobic z nich najlepszy uzytek do<br />
przygotowywania efektywnie dzialajacych<br />
filmów Flasha. Takie filmy wymagaja<br />
optymalizacji, która pozwala na zachowanie<br />
minimalnych rozmiarów pliku, plynnej<br />
animacji i prostych przegladów. Wplyw<br />
na koncowy rozmiar i prace pliku SWF ma<br />
wiele czynników. Bitmapy, dzwieki,<br />
skomplikowane ksztalty, przejscia tonalne,<br />
przezroczystosci i osadzone fonty –<br />
wszystkie te elementy zwiekszaja rozmiar<br />
pliku i pogarszaja jego wydajnosc. Tylko ty<br />
mozesz wywazyc jakosc z iloscia i rozmiar<br />
z wydajnoscia. Pamietaj o odbiorcach<br />
twoich filmów – czy maja polaczenie<br />
z Internetem za posrednictwem linii T1,<br />
czy tez moze korzystaja z modemów 28,8 k?<br />
Znajomosc odpowiedzi na to pytanie<br />
pomoze ci wybrac najwlasciwsza zawartosc<br />
dla twojego filmu i efektywnie<br />
skonstruowac calosc.<br />
Nizej przedstawione strategie z pewnoscia<br />
pomoga ci w opracowywaniu mniejszych,<br />
latwiejszych w zarzadzaniu i wydajniejszych<br />
filmów Flasha.<br />
W celu optymalizacji<br />
twojego srodowiska autorskiego:<br />
1. Uzywaj warstw do oddzielania<br />
i organizowania zawartosci filmu. Umiesc,<br />
na przyklad, wszystkie akcje na jednej<br />
warstwie, wszystkie etykiety ujec na drugiej,<br />
dzwieki na trzeciej. Dzieki temu latwiej ci<br />
bedzie szybko oceniac i zmieniac rózne<br />
elementy twojego filmu (rys. 12.50).<br />
lub<br />
Uzywaj jednolitego nazewnictwa<br />
w przypadku zmiennych, klipów filmowych,<br />
obiektów i innych elementów, które musza<br />
byc zidentyfikowane.<br />
Optymalizowanie filmu<br />
409
Rozdzial 12.<br />
Optymalizowanie filmu<br />
Unikaj zbednej interpunkcji w nazwach.<br />
Jednolite i proste nazwy sprawiaja, ze<br />
funkcje poszczególnych zmiennych staja<br />
sie bardziej oczywiste.<br />
lub<br />
Dolaczaj do swoich skryptów komentarze,<br />
wyjasniajace znaczenie poszczególnych<br />
fragmentów kodu, zarówno tobie, jak<br />
i innym programistom, którzy moga<br />
w przyszlosci wprowadzac jakies poprawki.<br />
Komentarz mozesz równiez dolaczac do ujec<br />
kluczowych, w celu objasnienia róznych<br />
partii listwy czasowej.<br />
lub<br />
Korzystaj z bloków dynamicznego tekstu<br />
jako dodatku do okna Output i palety<br />
Debugger w czasie obserwacji zmiennych<br />
obecnych w twoim filmie. Bloki<br />
dynamicznego tekstu umozliwiaja<br />
wyswietlanie zmiennych i wyrazen<br />
w kontekscie twojego filmu.<br />
lub<br />
Unikaj stosowania wielu scen w swoich<br />
filmach. Chociaz stanowia one dobry<br />
element organizacyjny w przypadku<br />
prostych filmów, listwy czasowe<br />
zawierajace sceny sa trudniejsze w nawigacji<br />
od klipów filmowych. Ponadto klony klipów<br />
filmowych nie zachowuja ciaglosci<br />
pomiedzy scenami. Korzystaj raczej<br />
z etykiet do oznaczania róznych obszarów<br />
listwy czasowej.<br />
W celu optymalizacji bitmap<br />
i dzwieków dla poprawienia wydajnosci<br />
odtwarzania :<br />
1. Unikaj animowania duzych bitmap. Uzywaj<br />
takich obrazów raczej jako statycznego tla,<br />
ewentualnie zmniejszaj ich rozmiary, jesli<br />
musza byc animowane.<br />
lub<br />
Dzwieki strumieniowe umieszczaj raczej<br />
na listwie czasowej, niz wewnatrz klipu<br />
filmowego.<br />
410
Zarzadzanie zawartoscia i rozwiazywanie problemów<br />
Rys. 12.51. Jakosc JPEG (JPEG Quality) oraz<br />
opcje kompresji audio (Audio Stream, Audio<br />
Event) dostepne w oknie dialogowym Publish<br />
Settings<br />
Przed odtworzeniem klip filmowy musi<br />
zostac wczytany w calosci. Natomiast<br />
dzwiek strumieniowy na listwie czasowej<br />
bedzie odtwarzany juz w momencie<br />
wczytywania filmu.<br />
lub<br />
Uzywaj maksymalnego dopuszczalnego<br />
stopnia kompresji dla bitmap i dzwieków.<br />
Poziom jakosci zapisu JPEG dla<br />
eksportowanych plików SWF mozesz<br />
ustawic w oknie Publish Settings. Mozliwe<br />
jest takze ustawienie stopnia kompresji<br />
oddzielnie dla dzwieków strumieniowych<br />
i zdarzen dzwiekowych, dzieki czemu<br />
mozesz zachowac wyzsza jakosc dzwieku<br />
dla narracji i muzyki – kosztem nizszej<br />
jakosci w przypadku zdarzen dzwiekowych<br />
towarzyszacych klikaniu przycisków<br />
(rys. 12.51).<br />
lub<br />
Unikaj uzywania polecenia Trace Bitmap<br />
do tworzenia obrazów wektorowych<br />
stanowiacych dokladne odwzorowanie<br />
importowanych bitmap. Zlozonosc<br />
zwektoryzowanej bitmapy moze bardziej<br />
zwiekszyc rozmiar pliku i zmniejszyc<br />
wydajnosc, niz dzieje sie to w przypadku<br />
uzywania samej zaimportowanej bitmapy.<br />
lub<br />
Importuj bitmapy i dzwieki w rozmiarach<br />
dokladnie odpowiadajacych tym, jakich<br />
planujesz uzyc we Flashu. Chociaz edycja<br />
we Flashu jest mozliwa, lepiej jest<br />
importowac tylko te informacje, których<br />
potrzebujesz i dzieki temu zaoszczedzic na<br />
wielkosci pliku. Przykladowo, nie importuj<br />
bitmapy, która we Flashu bedziesz musial<br />
zmniejszyc o 50 procent. Lepiej najpierw ja<br />
zmniejsz, a dopiero potem zaimportuj do<br />
Flasha.<br />
Optymalizowanie filmu<br />
411
Rozdzial 12.<br />
Optymalizowanie filmu<br />
W celu optymalizacji grafiki, tekstu<br />
i sekwencji animowanych<br />
dla poprawienia<br />
wydajnosci odtwarzania:<br />
1. Gdzie tylko mozesz, uzywaj automatycznie<br />
tworzonej animacji w miejsce animacji<br />
klatka po klatce. W przypadku<br />
automatycznych sekwencji animacji Flash<br />
musi pamietac jedynie ujecia kluczowe, co<br />
pozwala rzadziej odwolywac sie do pamieci.<br />
lub<br />
Animuj pojedyncze symbole zamiast grup.<br />
W przypadku animacji grup, musza byc one<br />
wczytywane w calosci, podczas gdy<br />
symbole moga byc ladowane pojedynczo.<br />
Ponadto grupy nie pozwalaja na uzywanie<br />
efektów klonów, np. tinty, jasnosci czy<br />
przezroczystosci. Uzywanie w animacjach<br />
grup utrudnia edycje, jako ze musisz<br />
dokonywac tej samej edycji z osobna na<br />
kazdej grupie, która wchodzi w sklad ujec<br />
kluczowych animacji.<br />
lub<br />
Unikaj tworzenia animacji, w których<br />
pojawia sie wiele obiektów poruszajacych<br />
sie w tym samym czasie, ewentualnie tych,<br />
które maja duze obszary zmian. Obydwie<br />
sytuacje spowalniaja proces odtwarzania<br />
filmu.<br />
lub<br />
Rozdzielaj grupy w obrebie symboli w celu<br />
ich uproszczenia. Kiedy juz bedziesz<br />
usatysfakcjonowany ilustracja w symbolu,<br />
rozdziel grupy na ksztalty w celu jej<br />
„splaszczenia”. Flash bedzie mial do<br />
zapamietania mniej krzywych i tym samym<br />
szybciej dokona animacji klonu symbolu.<br />
Takze efekty przezroczystosci klonu beda<br />
wtedy oddzialywac na caly symbol, a nie<br />
na indywidualne grupy w jego obrebie<br />
(rys. 12.52).<br />
Rys. 12.52. Symbol zdefiniowany z uzyciem<br />
oddzielnych grup (u góry z lewej) zawiera<br />
wiecej informacji (u góry w srodku) i moze<br />
prowadzic do powstawania niepozadanych<br />
efektów przezroczystosci (u góry z prawej).<br />
Symbol zdefiniowany jako ksztalt (u dolu<br />
z lewej) zawiera mniej informacji (u dolu<br />
w srodku) i stanie sie przezroczysty jako<br />
pojedyncza jednostka (u dolu z prawej)<br />
lub<br />
Z przejsc tonalnych kolorów<br />
i przezroczystosci staraj sie korzystac<br />
mozliwie najrzadziej.<br />
lub<br />
Korzystaj z palety Effect do zmiany<br />
koloru tinty i jasnosci klonów – w miejsce<br />
tworzenia oddzielnych symboli róznych<br />
kolorów.<br />
lub<br />
Optymalizuj krzywe, unikajac stosowania<br />
specjalnych stylów linii (np. linii<br />
kropkowanej) i uzywajac raczej narzedzia<br />
Pencil, niz Brush. Staraj sie tez<br />
redukowac zlozonosc krzywych za<br />
pomoca polecenia Modify/Optimize<br />
(Ctrl+Alt+Shift+C).<br />
lub<br />
Korzystaj z niewielu fontów i dolaczaj<br />
do plików tylko niezbedne czcionki.<br />
412
Zarzadzanie zawartoscia i rozwiazywanie problemów<br />
Unikanie<br />
najczestszych bledów<br />
Kiedy bedziesz staral sie rozwiazac problemy<br />
zwiazane z funkcjonowaniem twojego filmu<br />
Flasha, wiedz, ze istnieja pewne oczywiste<br />
miejsca, od których powinienes rozpoczac<br />
poszukiwania zródla zamieszania. Bledy takie<br />
polegaja zazwyczaj na pomijaniu cudzyslowów,<br />
wzglednych sciezek dostepu czy nazw klonów.<br />
Zwróc szczególna uwage na ponizsza liste<br />
bledów, zeby uniknac podobnych sytuacji we<br />
wlasnych projektach Flasha.<br />
W celu<br />
unikniecia najczestszych bledów:<br />
1. Sprawdzaj nawet dwukrotnie typ danych<br />
przedstawianych przez rózne wartosci.<br />
Przegladaj okno skryptu, aby upewnic sie,<br />
ze wpisales znaki cudzyslowu tylko wokól<br />
lancuchów znakowych. Slowo kluczowe<br />
this nie powinno byc otaczane<br />
cudzyslowem. Sciezki dostepu do klipów<br />
filmowych moga byc brane w cudzyslów<br />
jednak lepiej uzywac ich jako wyrazen.<br />
lub<br />
Sprawdzaj dwukrotnie sciezki dostepu do<br />
klipów filmowych, zmiennych i obiektów.<br />
lub<br />
Pamietaj o nadawaniu nazw klonom klipów<br />
filmowych.<br />
lub<br />
Sprawdzaj, czy wyrazenia ActionScript<br />
zawieraja wlasciwie rozmieszczone nawiasy<br />
i klamry. Przykladowo, wyrazenia nalezace<br />
do instrukcji if lub onClipEvent powinny<br />
znajdowac sie miedzy klamrami.<br />
lub<br />
Sprawdzaj, czy dla klonów przycisków lub<br />
klipów filmowych zostaly wybrane<br />
wlasciwe zdarzenia (zdarzenie myszy czy<br />
zdarzenia klipu filmowego).<br />
Unikanie najczestszych bledów<br />
413
Rozdzial 12.<br />
Unikanie najczestszych bledów<br />
lub<br />
Umieszczaj akcje stop w pierwszym<br />
ujeciu kluczowym klipu filmowego, zeby<br />
zabezpieczyc go przed automatycznym<br />
odtwarzaniem i zapetleniem.<br />
lub<br />
Upewniaj sie, ze symbol przycisku zawiera<br />
zdefiniowany obszar aktywny.<br />
lub<br />
W celu sprawdzania prostych akcji<br />
i przyciskó w – pamietaj o wybraniu polecen<br />
Enable Simple Frame Actions oraz Enable<br />
Simple Buttons z menu Control.<br />
lub<br />
Pamietaj, ze domyslnym ustawieniem dla<br />
twojego filmu Flasha w trybie testowym jest<br />
odtwarzanie w petli.<br />
Wskazówka<br />
• Dodatkowa pomoc i rady dotyczace<br />
usuwania bledów z filmu znajdziesz<br />
w rozleglych zasobach Internetu,<br />
poswieconych Flashowi. Poszukiwania<br />
rozpocznij od okna Macromedia<br />
Dashboard, które stanowi polaczenie<br />
z witryna sieciowa firmy Macromedia –<br />
znajdziesz tam archiwum porad<br />
technicznych i ekranowe wersje instrukcji<br />
uzytkowania programu oraz slownik<br />
ActionScript (rys. 12.53). Sa tam równiez<br />
odnosniki do witryn z samouczkami Flasha,<br />
artykulami, plikami zródlowymi FLA,<br />
biuletynami i listami dyskusyjnymi.<br />
Sprawdz równiez dolaczony do ksiazki<br />
CD-ROM, na którym znajdziesz informacje<br />
o kolejnych laczach i zródlach.<br />
Rys. 12.53. Dostep do palety Macromedia<br />
Dashboard uzyskasz w menu Help. Zajrzyj<br />
tam w poszukiwaniu najswiezszych wiesci,<br />
porad i samouczków<br />
414
Dodatki<br />
415
Dodatek A<br />
416
Podsumowanie metod obiektów i<br />
wlasciwosci<br />
A<br />
Czesci skladowe jezyka HTML<br />
Ponizsze tabele zawieraja posumowanie predefiniowanych obiektów Flasha, omówionych<br />
w ksiazce, wraz z ich metodami i wlasciwosciami. Nazwy parametrów zapisano czcionka pochyla.<br />
Obiekt tablicowy (Array)<br />
Metoda Opis Argumenty<br />
new Array(length) Tworzy nowy obiekt tablicowy.<br />
concat(array1,...,<br />
arrayN)<br />
join(separator)<br />
pop()<br />
push(value)<br />
reverse()<br />
shift()<br />
slice(indexA,<br />
indexB)<br />
Wiaze wskazane wartosci i zwraca nowa<br />
tablice.<br />
Wiaze elementy w tablicy, wstawia<br />
pomiedzy elementy separator i zwraca<br />
lancuch znakowy.<br />
Usuwa ostatni element w tablicy i zwraca<br />
wartosc tego elementu.<br />
Dodaje elementy do konca tablicy i zwraca<br />
nowa dlugosc.<br />
Odwraca kolejnosc elementów w tablicy.<br />
Usuwa pierwszy element w tablicy<br />
i zwraca wartosc tego elementu.<br />
Zwraca nowa tablice zaczynajaca sie od<br />
indexA i konczaca sie na (indexB-1).<br />
sort() Sortuje tablice, uzywajac operatora 0 w celu<br />
usuniecia danej liczby elementów,<br />
zaczynajac od indeksu (i lacznie z tym<br />
indeksem).<br />
length, opcjonalny argument<br />
dlugosci tablicy<br />
array1,...,arrayN, elementy<br />
wiazane w nowej tablicy<br />
separator, znak lub lancuch<br />
znakowy<br />
value, elementy dodawane<br />
do tablicy<br />
indexA, element poczatkowy<br />
(dolaczony)<br />
indexB, element koncowy<br />
(niedolaczony)<br />
index, poczatek wstawiania<br />
lub usuwania<br />
count, liczba elementów<br />
do usuniecia<br />
elem1,...,elemN, elementy<br />
do wstawienia<br />
Metody obiektów i wlasciwosci<br />
417
Dodatek A<br />
Obiekt tablicowy (Array)<br />
Metoda Opis Argumenty<br />
toString()<br />
unshift(value)<br />
Wlasciwosc<br />
length<br />
Zwraca lancuch znakowy z kazdym<br />
elementem powiazanym i oddzielonym<br />
przecinkiem.<br />
Dodaje elementy do poczatku tablicy<br />
i zwraca nowa dlugosc.<br />
Opis<br />
Liczba wpisów w tablicy.<br />
value, elementy dodawane<br />
do tablicy<br />
Obiekt koloru (Color)<br />
Metoda Opis Argumenty<br />
Metody obiektów i wlasciwosci<br />
new Color(target) Tworzy nowy obiekt koloru.<br />
getRGB()<br />
getTransform()<br />
Zwraca numeryczna wartosc koloru klipu<br />
filmowego, przypisana przez getRGB.<br />
Zwraca informacje o transformacji<br />
kolorów klipu filmowego, przypisanej<br />
przez setTransform.<br />
setRGB(0xRRGGBB) Ustawia kolor obiektu koloru.<br />
setTransform(cxfor<br />
m)<br />
Obiekt daty<br />
Przeksztalca kolor i przezroczystosc<br />
obiektu koloru.<br />
(Uwaga: czas UTC jest tozsamy z czasem GMT)<br />
target, sciezka dostepu do klipu<br />
filmowego<br />
0xRRGGBB, wartosci skladowych:<br />
czerwonej, zielonej, niebieskiej<br />
cxform, obiekt przechowujacy<br />
parametry transformacji koloru ra,<br />
rb, ga, gb, ba, bb, aa i ab<br />
Metoda Opis Argumenty<br />
new Date(year,<br />
month, date, hour,<br />
min, sec, ms)<br />
getDate()<br />
getDay()<br />
Tworzy nowy obiekt daty.<br />
Zwraca dzien miesiaca, w postaci liczby<br />
z zakresu 1 do 31.<br />
Zwraca dzien tygodnia, w postaci liczby<br />
z zakresu 0 (niedziela) do 6 (sobota).<br />
year, month, date,<br />
hour, min, sec, ms,<br />
opcjonalne argumenty okreslajace<br />
specyficzna date (kolejno: rok,<br />
miesiac, dzien, godzina, minuta,<br />
sekunda, milisekunda)<br />
418
Podsumowanie metod obiektów i wlasciwosci<br />
Obiekt daty<br />
(Uwaga: czas UTC jest tozsamy z czasem GMT)<br />
Metoda Opis Argumenty<br />
getFullYear() Zwraca rok, w postaci czterocyfrowej<br />
liczby.<br />
getHours()<br />
Zwraca godzine w ciagu dnia, w postaci<br />
liczby z zakresu 0 do 23.<br />
getMiliseconds() Zawraca milisekundy, w postaci liczby<br />
z zakresu 0 do 999.<br />
getMinutes()<br />
Zwraca minuty, w postaci liczby<br />
z zakresu 0 do 59.<br />
getMonth()<br />
Zwraca miesiac, w postaci liczby<br />
z zakresu 0 (styczen) do 11 (grudzien).<br />
getSeconds()<br />
Zwraca sekundy, w postaci liczby<br />
z zakresu 0 do 59.<br />
getTime()<br />
Zwraca liczbe milisekund, które uplynely<br />
od pólnocy 1 stycznia 1970, czasu UTC.<br />
getTimezoneOffset() Zwraca róznice pomiedzy czasem<br />
lokalnym i czasem UTC w minutach.<br />
getUTCdate()<br />
Zwraca dzien miesiaca, w postaci liczby<br />
z zakresu 1 do 31, UTC.<br />
getUTCday()<br />
Zwraca dzien tygodnia, w postaci liczby<br />
z zakresu 0 (niedziela) do 6 (sobota),<br />
UTC.<br />
getUTCFullYear() Zwraca rok, w postaci czterocyfrowej<br />
liczby, UTC.<br />
getUTCHours() Zwraca godzine w ciagu dnia, w postaci<br />
liczby z zakresu 0 do 23, UTC.<br />
getUTCMiliseconds() Zawraca milisekundy, w postaci liczby<br />
z zakresu 0 do 999, UTC.<br />
getUTCMinutes() Zwraca minuty, w postaci liczby<br />
z zakresu 0 do 59, UTC.<br />
getUTCMonth() Zwraca miesiac, w postaci liczby<br />
z zakresu 0 (styczen) do 11 (grudzien),<br />
UTC.<br />
getUTCSeconds() Zwraca sekundy, w postaci liczby<br />
z zakresu 0 do 59, UTC.<br />
getYear()<br />
Zwraca rok, obliczony na podstawie<br />
wzoru: biezacy rok minus 1900.<br />
setDate(date) Ustawia dzien miesiaca. date, liczba calkowita z zakresu 1<br />
do 31<br />
Metody obiektów i wlasciwosci<br />
419
Dodatek A<br />
Obiekt daty<br />
(Uwaga: czas UTC jest tozsamy z czasem GMT)<br />
Metoda Opis Argumenty<br />
setFullYear(year,<br />
month, date)<br />
setHours(hours,<br />
minutes, seconds,<br />
ms)<br />
Ustawia rok, miesiac i dzien.<br />
Ustawia godzine, minute, sekunde<br />
i milisekunde.<br />
year, liczba calkowita<br />
czterocyfrowa<br />
month, opcjonalna liczba<br />
calkowita z zakresu 0 do 11<br />
date, opcjonalna liczba calkowita<br />
z zakresu 1 do 31<br />
hours, liczba calkowita z zakresu<br />
0 do 59<br />
minutes, opcjonalna liczba<br />
calkowita z zakresu 0 do 59<br />
seconds, opcjonalna liczba<br />
calkowita z zakresu 0 do 59<br />
Metody obiektów i wlasciwosci<br />
setMiliseconds(ms) Ustawia milisekunde.<br />
setMinutes(minutes,<br />
seconds, ms)<br />
setMonth(month,<br />
date)<br />
setSeconds(seconds,<br />
ms)<br />
Ustawia minute, sekunde i milisekunde.<br />
Ustawia miesiac i dzien.<br />
Ustawia sekundy i milisekundy.<br />
ms, opcjonalna liczba calkowita<br />
z zakresu 0 do 999<br />
ms, liczba calkowita z zakresu<br />
0 do 999<br />
minutes, liczba calkowita<br />
z zakresu 0 do 59<br />
seconds, opcjonalna liczba<br />
calkowita z zakresu 0 do 59<br />
ms, opcjonalna liczba calkowita<br />
z zakresu 0 do 999<br />
month, liczba calkowita z zakresu<br />
0 do 11<br />
date, opcjonalna liczba calkowita<br />
z zakresu 1 do 31<br />
seconds, liczba calkowita<br />
z zakresu 0 do 59<br />
setTime(value)<br />
Ustawia liczbe milisekund, które<br />
uplynely od pólnocy 1 stycznia 1970,<br />
czasu UTC.<br />
ms, opcjonalna liczba calkowita<br />
z zakresu 0 do 999<br />
value, liczba calkowita<br />
reprezentujaca czas, który uplynal<br />
setUTCDate(date) Ustawia dzien miesiaca, UTC. date, liczba calkowita z zakresu<br />
1 do 31<br />
420
Podsumowanie metod obiektów i wlasciwosci<br />
Obiekt daty<br />
(Uwaga: czas UTC jest tozsamy z czasem GMT)<br />
Metoda Opis Argumenty<br />
setUTCFullYear(year<br />
, month, date)<br />
setUTCHours(hours,<br />
minutes, seconds,<br />
ms)<br />
setUTCMiliseconds<br />
(ms)<br />
setUTCMinutes(minut<br />
es, seconds, ms)<br />
setUTCMonth(month,<br />
date)<br />
setUTCSeconds(secon<br />
ds, ms)<br />
setYear(year,<br />
month, date)<br />
toString()<br />
Ustawia rok, miesiac i dzien, UTC.<br />
Ustawia godzine, minute, sekunde<br />
i milisekunde, UTC.<br />
Ustawia milisekunde, UTC.<br />
Ustawia minute, sekunde i milisekunde,<br />
UTC.<br />
Ustawia miesiac i dzien, UTC.<br />
Ustawia sekundy i milisekundy, UTC.<br />
Ustawia rok, liczba czterocyfrowa.<br />
Zwraca lancuch znakowy wartosci<br />
obiektu daty.<br />
year, liczba calkowita<br />
czterocyfrowa<br />
month, opcjonalna liczba<br />
calkowita z zakresu 0 do11<br />
date, opcjonalna liczba calkowita<br />
z zakresu 1 do31<br />
hours, liczba calkowita z zakresu<br />
0 do59<br />
minutes, opcjonalna liczba<br />
calkowita z zakresu 0 do 59<br />
seconds, opcjonalna liczba<br />
calkowita z zakresu 0 do 59<br />
ms, opcjonalna liczba calkowita<br />
z zakresu 0 do 999<br />
ms, liczba calkowita z zakresu<br />
0 do 999<br />
minutes, liczba calkowita<br />
z zakresu 0 do 59<br />
seconds, opcjonalna liczba<br />
calkowita z zakresu 0 do 59<br />
ms, opcjonalna liczba calkowita<br />
z zakresu 0 do 999<br />
month, liczba calkowita z zakresu<br />
0 do 11<br />
date, opcjonalna liczba calkowita<br />
z zakresu 1 do 31<br />
seconds, liczba calkowita<br />
z zakresu 0 do 59<br />
ms, opcjonalna liczba calkowita<br />
z zakresu 0 do 999<br />
year, liczba calkowita<br />
czterocyfrowa<br />
month, opcjonalna liczba<br />
calkowita z zakresu 0 do11<br />
date, opcjonalna liczba calkowita<br />
z zakresu 1 do31<br />
Metody obiektów i wlasciwosci<br />
421
Dodatek A<br />
Obiekt Key<br />
Metoda Opis Argumenty<br />
getAscii()<br />
getCode()<br />
isDown(keycode)<br />
Zwraca wartosc ASCII ostatnio<br />
nacisnietego klawisza.<br />
Zwraca kod ostatnio nacisnietego<br />
klawisza.<br />
Zwraca prawde, jesli nacisnieto<br />
odpowiedni klawisz.<br />
keycode, kod numeryczny<br />
przypisany do kazdego klawisza<br />
isToggled(keycode) Zwraca prawde, jesli wcisnieto klawisze<br />
Caps Lock lub Num Lock.<br />
keycode, kod numeryczny<br />
przypisany do kazdego klawisza<br />
Metody obiektów i wlasciwosci<br />
Wlasciwosc<br />
BACKSPACE<br />
CAPSLOCK<br />
CONTROL<br />
DELETEKEY<br />
DOWN<br />
END<br />
ENTER<br />
ESCAPE<br />
HOME<br />
INSERT<br />
LEFT<br />
PGDN<br />
PGUP<br />
RIGHT<br />
SHIFT<br />
SPACE<br />
TAB<br />
UP<br />
Opis<br />
Kod klawisza Backspace.<br />
Kod klawisza Caps Lock.<br />
Kod klawisza Ctrl.<br />
Kod klawisza Delete.<br />
Kod klawisza „strzalka w dól”.<br />
Kod klawisza End.<br />
Kod klawisza Enter.<br />
Kod klawisza Esc.<br />
Kod klawisza Home.<br />
Kod klawisza Insert.<br />
Kod klawisza „strzalka w lewo”.<br />
Kod klawisza Page Down.<br />
Kod klawisza Page Up.<br />
Kod klawisza „strzalka w prawo”.<br />
Kod klawisza Shift.<br />
Kod klawisza spacji.<br />
Kod klawisza Tab.<br />
Kod klawisza „strzalka w góre”.<br />
Obiekt matematyczny (Math)<br />
Metoda Opis Argumenty<br />
abs(number) Oblicza wartosc bezwzgledna. number, dowolna liczba lub<br />
wyrazenie<br />
acos(number) Oblicza wartosc cosinusa luku. number, liczba od –1 do 1<br />
asin(number) Oblicza wartosc sinusa luku. number, liczba od –1 do 1<br />
422
Podsumowanie metod obiektów i wlasciwosci<br />
Obiekt matematyczny (Math)<br />
Metoda Opis Argumenty<br />
atan(number) Oblicza wartosc tangensa luku. number, liczba<br />
atan2(y, x) Oblicza wartosc tangensa luku. y, wspólrzedna y punktu<br />
ceil(number)<br />
cos(number)<br />
exp(number)<br />
floor(number)<br />
Zaokragla liczbe w góre do najblizszej<br />
liczby calkowitej.<br />
Oblicza wartosc cosinusa kata<br />
w radianach.<br />
Oblicza wartosc wykladnika potegi stalej<br />
Eulera (e).<br />
Zaokragla liczbe w dól do najblizszej<br />
liczby calkowitej.<br />
x, wspólrzedna x punktu<br />
number, dowolna liczba lub<br />
wyrazenie<br />
number, kat w radianach<br />
number, wykladnik potegi<br />
number, dowolna liczba lub<br />
wyrazenie<br />
log(number) Oblicza wartosc logarytmu naturalnego. number, dowolna liczba lub<br />
wyrazenie<br />
max(x, y)<br />
Zwraca wieksza z dwóch<br />
porównywanych wart osci.<br />
x, dowolna liczba lub wyrazenie<br />
y, dowolna liczba lub wyrazenie<br />
min(x, y)<br />
Zwraca mniejsza z dwóch<br />
porównywanych wartosci.<br />
x, dowolna liczba lub wyrazenie<br />
y, dowolna liczba lub wyrazenie<br />
pow(base, exponent) Oblicza wartosc potegi danej liczby.<br />
random() Zwraca liczbe losowa z zakresu 0 do 1,0.<br />
base, dowolna liczba lub<br />
wyrazenie (podstawa potegi)<br />
exponent, dowolna liczba lub<br />
wyrazenie (wykladnik potegi)<br />
round(number) Zaokragla liczbe do najblizszej wartosci. number, dowolna liczba<br />
lub wyrazenie<br />
sin(number) Oblicza wartosc sinusa kata w radianach. number, kat w radianach<br />
Metody obiektów i wlasciwosci<br />
sqrt(number) Oblicza wartosc kwadratu potegi. number, dowolna liczba<br />
lub wyrazenie<br />
tan(number)<br />
Oblicza wartosc tangensa kata<br />
w radianach.<br />
number, kat w radianach<br />
Wlasciwosc<br />
Opis<br />
E<br />
Stala Eulera; podstawa logarytmów<br />
naturalnych.<br />
LN2 Logarytm naturalny liczby 2.<br />
LOG2E Logarytm Eulera podstawy równej 2.<br />
LN10 Logarytm naturalny liczby 10.<br />
LOG10E Logarytm Eulera podstawy równej 10.<br />
423
Dodatek A<br />
Obiekt matematyczny (Math)<br />
Wlasciwosc<br />
PI<br />
Opis<br />
Obwód kola podzielony przez jego<br />
srednice.<br />
SQRT1_2 Kwadrat potegi liczby ½.<br />
SQRT2 Kwadrat potegi liczby 2.<br />
Metody obiektów i wlasciwosci<br />
Obiekt myszy (Mouse)<br />
Metoda<br />
hide()<br />
show()<br />
Wlasciwosc<br />
_xmouse<br />
_ymouse<br />
Obiekt klipu filmowego (Movie Clip)<br />
Opis<br />
Ukrywa wskaznik.<br />
Odslania wskaznik.<br />
Opis<br />
Wspólrzedna x polozenia wskaznika.<br />
Wspólrzedna y polozenia wskaznika.<br />
Metoda Opis Argumenty<br />
attachMovie(idName,<br />
newName, depth)<br />
duplicateMovieClip(<br />
newName, depth)<br />
getBounds(targetCoo<br />
dinateSpace)<br />
getBytesLoaded()<br />
Przylacza klip filmowy z biblioteki<br />
do klonu klipu filmowego na scenie.<br />
Tworzy kolejny klon klipu filmowego<br />
obecnego na scenie.<br />
Zwraca minimalne i maksymalne<br />
wartosci wspólrzednych x, y polozenia<br />
klipu filmowego w obrebie przestrzeni<br />
wskazanego obiektu. Obiekt zwracany<br />
posiada wlasciwosci xMin, xMax, yMin<br />
i yMax.<br />
Zwraca ilosc wczytanych danych klipu<br />
filmowego, w bajtach.<br />
idName, identyfikator symbolu<br />
klipu filmowego w bibliotece<br />
newName, nazwa klonu<br />
przylaczonego klipu filmowego<br />
depth, poziom glebokosci<br />
(kolejnosc ulozenia w stosie)<br />
newName, nazwa klonu<br />
przylaczonego klipu filmowego<br />
depth, poziom glebokosci<br />
(kolejnosc ulozenia w stosie)<br />
targetCoordinateSpace,<br />
listwa czasowa, której<br />
wspólrzedne przestrzeni sluza<br />
jako odnosnik<br />
424
Podsumowanie metod obiektów i wlasciwosci<br />
Obiekt klipu filmowego (Movie Clip)<br />
Metoda Opis Argumenty<br />
getBytesTotal()<br />
globaltoLocal(point<br />
)<br />
Zwraca calkowita wielkosc klipu<br />
filmowego, w bajtach.<br />
Konwertuje wspólrzedne globalne<br />
polozenia punktu na wspólrzedne<br />
wzgledne wobec klipu filmowego.<br />
point, obiekt<br />
o wspólrzednych x, y<br />
gotoAndPlay(frame) Przeskakuje do podanej klatki<br />
i rozpoczyna odtwarzanie.<br />
gotoAndStop(frame) Przeskakuje do podanej klatki<br />
i zatrzymuje odtwarzanie.<br />
hitTest(x, y,<br />
shapeFlag)<br />
Zwraca prawde, jesli wspólrzedne x, y<br />
przecinaja klip filmowy.<br />
frame, numer klatki lub etykieta<br />
frame, numer klatki lub etykieta<br />
x, wspólrzedna x<br />
y, wspólrzedna y<br />
hitTest(target)<br />
loadMovie(URL,<br />
method)<br />
loadVariables(URL,<br />
method)<br />
Zwraca prawde, jesli wskazany klip<br />
filmowy przecina inny klip filmowy.<br />
Wczytuje zewnetrzny plik SWF do klipu<br />
filmowego.<br />
Wczytuje do klipu filmowego<br />
zewnetrzne zmienne, przechowywane<br />
w pliku tekstowym.<br />
shapeflag, parametr o wartosci<br />
prawda lub falsz, okreslajacy, czy<br />
wspólrzedne przecinaja ksztalt<br />
klipu filmowego (prawda), czy<br />
jego obramowanie (falsz)<br />
target, klon przecinanego klipu<br />
filmowego<br />
URL, sciezka dostepu do<br />
zewnetrznego pliku SWF<br />
method, opcjonalny argument,<br />
okreslajacy metode CGI GET<br />
lub POST<br />
URL, sciezka dostepu do<br />
zewnetrznego pliku SWF<br />
method, opcjonalny argument,<br />
okreslajacy metode CGI GET<br />
lub POST<br />
Metody obiektów i wlasciwosci<br />
localtoGlobal<br />
(point)<br />
Konwertuje wspólrzedne polozenia<br />
punktu z wartosci wzglednych wobec<br />
klipu filmowego na wartosci wzgledne<br />
wobec sceny.<br />
point, obiekt<br />
o wspólrzednych x, y<br />
nextFrame()<br />
Przeskakuje do nastepnej klatki<br />
i zatrzymuje odtwarzanie.<br />
play()<br />
Rozpoczyna odtwarzanie ujec z listwy<br />
czasowej klipu filmowego od biezacej<br />
pozycji.<br />
prevFrame()<br />
Przeskakuje do poprzedniej klatki<br />
i zatrzymuje odtwarzanie.<br />
425
Dodatek A<br />
Metody obiektów i wlasciwosci<br />
Obiekt klipu filmowego (Movie Clip)<br />
Metoda Opis Argumenty<br />
removeMovieClip() Usuwa klon klipu filmowego utworzony<br />
z uzyciem metody<br />
duplicateMovieClip<br />
lub attachMovie.<br />
startDrag(lockCente<br />
r, left, top,<br />
right, bottom)<br />
stop()<br />
stopDrag()<br />
Sprawia, ze klip filmowy podaza<br />
za wskaznikiem myszy.<br />
Zatrzymuje odtwarzanie.<br />
Sprawia, ze klip filmowy przestaje<br />
podazac za wskaznikiem myszy.<br />
swapDepths(depth) Zamienia pozycje w stosie klipów<br />
filmowych.<br />
swapDepths(target) Zamienia pozycje w stosie klipów<br />
filmowych.<br />
unloadMovie() Usuwa wczytany do klonu klipu<br />
filmowego plik SWF lub klip filmowy<br />
przylaczony do innego klipu za pomoca<br />
metody attachMovie.<br />
Wlasciwosc<br />
_alpha<br />
_currentframe<br />
_droptarget<br />
_framesloaded<br />
_height<br />
_name<br />
_rotation<br />
Opis<br />
Okresla przezroczystosc, gdzie 0 oznacza<br />
—calkowicie przezroczysty, a 100 –<br />
kryjacy.<br />
Biezaca klatka (tylko do odczytu).<br />
Sciezka dostepu do pliku, na który<br />
upuszczany jest przeciagany klip<br />
filmowy (skladnia z ukosnikiem, tylko<br />
do odczytu).<br />
Liczba klatek wczytanych do komputera<br />
odbiorcy (tylko do odczytu).<br />
Okresla rozmiar w pionie (w pikselach).<br />
Okresla nazwe nowego klonu klipu<br />
filmowego.<br />
Okresla stopien obrotu zgodnie z ruchem<br />
wskazówek zegara.<br />
lockCenter, parametr prawda<br />
lub falsz, okreslajacy, czy punkt<br />
srodkowy klipu filmowego jest<br />
przyciagany do wskaznika myszy<br />
left, top, right, bottom,<br />
wartosci ograniczajace polozenie<br />
klipu filmowego<br />
depth, poziom glebokosci, na<br />
którym znajduje sie klip filmowy<br />
przeznaczony do zmiany<br />
kolejnosci ulozenia<br />
target, klip filmowy, którego<br />
pozycja w stosie jest zmieniana<br />
426
Podsumowanie metod obiektów i wlasciwosci<br />
Obiekt klipu filmowego (Movie Clip)<br />
Wlasciwosc<br />
_target<br />
_totalframes<br />
_url<br />
_visible<br />
_width<br />
_x<br />
_xscale<br />
_y<br />
_yscale<br />
Obiekt selekcji (Selection)<br />
Opis<br />
Sciezka dostepu do klonu klipu<br />
filmowego (tylko do odczytu).<br />
Calkowita liczba klatek symbolu klipu<br />
filmowego (tylko do odczytu).<br />
Sciezka do pliku SWF wczytanego<br />
do symbolu klipu filmowego (tylko<br />
do odczytu).<br />
Okresla widzialnosc klipu filmowego<br />
(prawda lub falsz).<br />
Okresla rozmiar w poziomie<br />
(w pikselach).<br />
Okresla pozycje w poziomie punktu<br />
poczatkowego klipu filmowego.<br />
Okresla procent rozmiaru w poziomie<br />
oryginalnego symbolu klipu filmowego.<br />
Okresla pozycje w pionie punktu<br />
poczatkowego klipu filmowego.<br />
Okresla procent rozmiaru w pionie<br />
oryginalnego symbolu klipu filmowego.<br />
Metoda Opis Argumenty<br />
getBeginIndex() Odczytuje indeks poczatku selekcji.<br />
getCaretIndex() Odczytuje indeks pozycji kursora.<br />
getEndIndex() Odczytuje indeks konca selekcji.<br />
getFocus<br />
Odczytuje nazwe zmiennej aktywnego<br />
w danym momencie bloku tekstowego.<br />
setFocus(variableNa<br />
me)<br />
setSelection(beginI<br />
ndex, endIndex)<br />
Ustawia ogniskowanie bloku tekstowego<br />
o podanej nazwie zmiennej, dzieki czemu<br />
mozna odczytywac informacje o tekscie<br />
zawartym w danym bloku tekstowym,<br />
jesli istnieje kilka bloków tekstowych.<br />
Ustawia selekcje wedlug okreslonych<br />
indeksów poczatku oraz konca.<br />
variableName, nazwa bloku<br />
tekstowego<br />
beginIndex, indeks poczatku<br />
zaznaczenia<br />
endIndex, indeks konca<br />
zaznaczenia<br />
Metody obiektów i wlasciwosci<br />
427
Dodatek A<br />
Obiekt dzwiekowy (Sound)<br />
Metoda Opis Argumenty<br />
Metody obiektów i wlasciwosci<br />
new Sound (target) Tworzy nowy obiekt dzwiekowy. target, sciezka dostepu do klipu<br />
filmowego<br />
attachSound(idName) Dolacza plik dzwiekowy z biblioteki<br />
do obiektu dzwiekowego.<br />
getPan()<br />
Zwraca poziom panoramy, ustawiony<br />
przez setPan.<br />
getTransform() Zwraca informacje o przeksztalceniu<br />
dzwieku, wykonanym przez<br />
setTransform.<br />
idName, identyfikator dzwieku<br />
w bibliotece<br />
getVolume()<br />
Zwraca poziom glosnosci przypisany<br />
przez setVolume.<br />
setPan(pan) Ustawia balans kanalów lewy-prawy. pan, liczba od –100 (lewy) do 100<br />
(prawy)<br />
setTransform(sxform) Ustawia sposób rozdzielenia dzwieku<br />
z kanalów lewego i prawego na<br />
poszczególne glosniki.<br />
sxform, obiekt przechowujacy<br />
parametry transformacji dzwieku:<br />
ll, lr, rr i rl<br />
setVolume(volume)<br />
start(secondOffset,<br />
loops)<br />
stop()<br />
Ustawia procentowa wartosc poziomu<br />
glosnosci.<br />
Odtwarza przylaczony dzwiek.<br />
Zatrzymuje odtwarzanie przylaczonego<br />
dzwieku.<br />
volume, liczba od 0 (cisza)<br />
do 100 (glosno)<br />
secondOffset, punkt startowy<br />
dzwieku (w sekundach)<br />
loops, liczba okreslajaca, ile razy<br />
dzwiek bedzie odtwarzany<br />
Obiekt lancucha znakowego (String)<br />
Metoda Opis Argumenty<br />
new String (value)<br />
charAt (index)<br />
charCodeAt (index)<br />
concat<br />
(string1,...,stringN)<br />
Tworzy nowy obiekt lancucha<br />
znakowego.<br />
Zwraca znak znajdujacy sie na pozycji<br />
wskazanej indeksem.<br />
Zwraca kod znaku z pozycji<br />
o wskazanym indeksie.<br />
Wiaze wskazane lancuchy.<br />
value, wartosc obiektu lancucha<br />
znakowego<br />
index, pozycja, na której<br />
znajduje sie znak<br />
index, pozycja, na której<br />
znajduje sie znak<br />
string1,...,stringN, lancuchy<br />
przeznaczone do powiazania<br />
428
Podsumowanie metod obiektów i wlasciwosci<br />
Obiekt lancucha znakowego (String)<br />
Metoda Opis Argumenty<br />
fromCharCode<br />
(num1,...,numN)<br />
indexOf(searchString<br />
, fromIndex)<br />
lastIndexOf(searchSt<br />
ring, fromIndex)<br />
slice (indexA,<br />
indexB)<br />
split (separator,<br />
limit)<br />
substr(start,<br />
length)<br />
substring(indexA,<br />
indexB)<br />
toLowerCase()<br />
toUpperCase()<br />
Zwraca lancuch znakowy utworzony<br />
ze wskazanych elementów.<br />
Przeszukuje lancuch znakowy i zwraca<br />
miejsce wystapienia po raz pierwszy<br />
podlancucha wskazanego parametrem<br />
searchString.<br />
Przeszukuje lancuch znakowy i zwraca<br />
miejsce wystapienia po raz ostatni<br />
podlancucha wskazanego parametrem<br />
searchString.<br />
Zwraca podlancuch umieszczony<br />
pomiedzy wskazanymi indeksami,<br />
lacznie z indexA, lecz bez indexB.<br />
Zwraca tablice dwóch lub wiecej<br />
podlancuchów na podstawie argumentu<br />
separator.<br />
Zwraca lancuch znakowy o podanej<br />
dlugosci, zaczynajacy sie od indeksu<br />
start.<br />
Zwraca lancuch znakowy, którego<br />
pozycje wyznaczaja parametry<br />
indexA i indexB.<br />
Zamienia znaki w lancuchu na pisane<br />
mala litera.<br />
Zamienia znaki w lancuchu na pisane<br />
wielka litera.<br />
num1,...,numN, znaki tworzace<br />
lancuch<br />
searchString, znak lub znaki<br />
fromIndex, indeks startowy<br />
searchString, znak lub znaki<br />
fromIndex, indeks startowy<br />
indexA, punkt poczatkowy<br />
lancucha<br />
indexB, punkt koncowy lancucha<br />
separator, znak oddzielajacy<br />
podlancuchy<br />
limit, maksymalna ilosc<br />
podlancuchów mozliwych<br />
do umieszczenia w tablicy<br />
start, indeks startowy<br />
length, dlugosc podlancucha<br />
indexA, punkt poczatkowy<br />
lancucha<br />
indexB, punkt koncowy lancucha<br />
Metody obiektów i wlasciwosci<br />
429
Dodatek A<br />
430
Kody klawiszy<br />
B<br />
Czesci skladowe jezyka HTML<br />
Litery<br />
Klawisz litery Kod<br />
A 65<br />
B 66<br />
C 67<br />
D 68<br />
E 69<br />
F 70<br />
G 71<br />
H 72<br />
I 73<br />
J 74<br />
K 75<br />
L 76<br />
M 77<br />
N 78<br />
O 79<br />
P 80<br />
Q 81<br />
R 82<br />
S 83<br />
T 84<br />
U 85<br />
V 86<br />
W 87<br />
X 88<br />
Y 89<br />
Z 90<br />
Kody klawiszy<br />
431
Dodatek B<br />
Kody klawiszy<br />
Cyfry i symbole<br />
Cyfry i symbole<br />
Klawisz Kod Wlasciwosc obiektu Key Klawisz Kod Wlasciwosc obiektu Key<br />
0 48 . (w bloku<br />
numerycznym)<br />
1 49 / (w bloku<br />
numerycznym)<br />
2 50 Backspace 8 BACKSPACE<br />
3 51 Tab 9 TAB<br />
4 52 clear 12 ENTER<br />
5 53 Enter 13 SHIFT<br />
6 54 Shift 16 CONTROL<br />
7 55 Ctrl 17<br />
8 56 Alt 18<br />
9 57 Caps Lock 20 CAPSLOCK<br />
0 (w bloku<br />
numerycznym)<br />
1 (w bloku<br />
numerycznym)<br />
2 (w bloku<br />
numerycznym)<br />
3 (w bloku<br />
numerycznym)<br />
4 (w bloku<br />
numerycznym)<br />
5 (w bloku<br />
numerycznym)<br />
6 (w bloku<br />
numerycznym)<br />
7 (w bloku<br />
numerycznym)<br />
8 (w bloku<br />
numerycznym)<br />
9 (w bloku<br />
numerycznym)<br />
* (w bloku<br />
numerycznym)<br />
+ (w bloku<br />
numerycznym)<br />
Enter (w bloku<br />
numerycznym)<br />
- (w bloku<br />
numerycznym)<br />
96 Esc 27 ESCAPE<br />
97 Spacja 32 SPACE<br />
110<br />
111<br />
98 Page Up 33 PGUP<br />
99 Page Down 34 PGDN<br />
100 End 35 END<br />
101 Home 36 HOME<br />
102 Strzalka w<br />
lewo<br />
37 LEFT<br />
103 Strzalka w góre 38 UP<br />
104 Strzalka w<br />
prawo<br />
39 RIGHT<br />
105 Strzalka w dól 40 DOWN<br />
106 Insert 45 INSERT<br />
107 Delete 46 DELETEKEY<br />
108 Help 47<br />
109 Num Lock 144<br />
432
Kody klawiszy<br />
Cyfry i symbole<br />
Klawisz Kod Wlasciwosc obiektu Key<br />
;: 186<br />
=+ 187<br />
-_ 189<br />
/? 191<br />
`~ 192<br />
[{ 219<br />
\| 220<br />
]} 221<br />
‘” 222<br />
Kody klawiszy<br />
Klawisze funkcyjne<br />
Klawisz funkcyjny Kod<br />
F1 112<br />
F2 113<br />
F3 114<br />
F4 115<br />
F5 116<br />
F6 117<br />
F7 118<br />
F8 119<br />
F9 120<br />
F10 121<br />
F11 122<br />
F12 123<br />
433
Dodatek B<br />
434
Kody klawiszy<br />
435
Podsumowanie<br />
kategorii akcji<br />
C<br />
Czesci skladowe jezyka HTML<br />
Opis akcji<br />
Akcja Skladnia Sekwencja klawiszy Opis<br />
break break; Esc + br Przerywa wykonywanie petli (for,<br />
for in, do while, while).<br />
call call (ujecie); Esc + ca Przetwarza skrypt przypisany do<br />
ujecia o wskazanej etykiecie. Jest to<br />
akcja odrzucona; zamiast niej nalezy<br />
uzywac akcji function.<br />
comment // komentarz Esc + // Sprawia, ze wpisany tekst jest<br />
traktowany tylko jako komentarz.<br />
continue continue; Esc + co Sprawia, ze Flash opuszcza pozostale<br />
akcje w obrebie petli i przeskakuje<br />
do miejsca, w którym nastepuje<br />
sprawdzanie warunku.<br />
delete<br />
do while do {<br />
duplicate<br />
MovieClip<br />
delete<br />
zmienna;<br />
instrukcje;<br />
} while<br />
(warunek);<br />
else else {<br />
else if<br />
duplicateMovie<br />
Clip (sciezka,<br />
nowanazwa,<br />
glebokosc);<br />
instrukcje;<br />
}<br />
else if<br />
(warunek) {<br />
instrukcje;<br />
}<br />
Esc + da<br />
Esc + do<br />
Esc + dm<br />
Esc + el<br />
Esc + ei<br />
Usuwa zmienna.<br />
Tworzy petle wykonujaca instrukcje,<br />
dopóki spelniony jest warunek.<br />
Tworzy kopie klonu klipu filmowego.<br />
Okresla instrukcje, które maja byc<br />
wykonywane w przypadku<br />
niespelnienia warunku<br />
w wyrazeniu if.<br />
Okresla instrukcje, które maja byc<br />
wykonywane jako warunek<br />
alternatywny.<br />
Podsumowanie kategorii akcji<br />
435
Dodatek C<br />
Opis akcji<br />
Akcja Skladnia Sekwencja klawiszy Opis<br />
Podsumowanie kategorii akcji<br />
evaluate wyrazenie; Esc + ev Dodaje nowa linie wyrazen w oknie<br />
skryptu, umozliwiajaca oszacowanie<br />
wyrazenia.<br />
for<br />
for..in<br />
fsCommand<br />
function<br />
getURL<br />
goto<br />
for<br />
(poczatkowe;<br />
warunek;<br />
nastepne) {<br />
instrukcje;<br />
}<br />
for (iterator<br />
in obiekt) {<br />
instrukcje;<br />
}<br />
fscommand<br />
(komenda,<br />
argumenty);<br />
function nazwa<br />
(parametry) {<br />
instrukcje;<br />
}<br />
getURL (URL,<br />
okno,<br />
znienne);<br />
gotoAndPlay<br />
(scena,<br />
ujecie);<br />
gotoAndStop<br />
(scena,<br />
ujecie);<br />
nextFrame();<br />
previousFrame(<br />
);<br />
nextScene();<br />
previousScene(<br />
);<br />
Esc + fr<br />
Esc + fi<br />
Esc + fs<br />
Esc + fn<br />
Esc + gu<br />
Esc + go<br />
Tworzy petle wykonujaca instrukcje,<br />
dopóki spelniony jest warunek.<br />
Warunek ten jest zazwyczaj<br />
licznikiem, zwiekszajacym lub<br />
zmniejszajacym wartosc z kazdym<br />
wykonaniem petli.<br />
Tworzy petle wykonujaca instrukcje<br />
na wlasciwosciach obiektu lub<br />
elementach tablicy.<br />
Wysyla komendy dla JavaScript<br />
w srodowisku przegladarki lub tez do<br />
odtwarzacza Flasha, albo projektora,<br />
w celu kontrolowania przebiegu<br />
odtwarzania.<br />
Definiuje wyrazenia wykonujace<br />
okreslone dzialanie w oparciu<br />
o podane parametry. Uzyj tej akcji<br />
do tworzenia wlasnych klas i metod.<br />
Wczytuje do okna przegladarki plik<br />
o wskazanym adresie URL (pelny<br />
adres internetowy lub wzgledna<br />
sciezka dostepu). Udostepnia<br />
opcjonalne argumenty specyfikujace<br />
metody CGI GET lub POST.<br />
Przeskakuje do wskazanej sceny,<br />
ujecia, numeru lub etykiety ujecia,<br />
a nastepnie odtwarza od tego<br />
momentu lub przerywa odtwarzanie.<br />
436
Podsumowanie kategorii akcji<br />
Opis akcji<br />
Akcja Skladnia Sekwencja klawiszy Opis<br />
if if (warunek) {<br />
instrukcje;<br />
ifFrameLoaded ifFrameLoaded<br />
(scena,<br />
ujecie) {<br />
include<br />
loadMovie<br />
}<br />
instrukcje;<br />
}<br />
#include<br />
(sciezka)<br />
loadMovieNum<br />
lub loadMovie<br />
(URL,<br />
poziomlubsciez<br />
ka, zmienne);<br />
loadVariables loadVariablesN<br />
um lub<br />
loadVariables<br />
(URL,<br />
poziomlubsciez<br />
ka, zmienne);<br />
on<br />
onClipEvent<br />
on<br />
(mouseEvent) {<br />
instrukcje;<br />
}<br />
onClipEvent<br />
(clipEvent) {<br />
instrukcje;<br />
}<br />
Esc + if<br />
Esc + il<br />
Esc + in<br />
Esc + lm<br />
Esc + lv<br />
Esc + on<br />
Esc + on<br />
Okresla instrukcje przeznaczone do<br />
wykonania w przypadku spelnienia<br />
warunku.<br />
Okresla instrukcje przeznaczone do<br />
wykonania po wczytaniu wskazanej<br />
klatki lub sceny. Ta akcja jest<br />
odrzucona; zamiast niej powinno<br />
sie uzywac wlasciwosci<br />
_framesloaded.<br />
Dolacza skrypt z zewnetrznego<br />
dokumentu tekstowego.<br />
Wczytuje zewnetrzny plik SWF<br />
do wskazanego poziomu lub klipu<br />
filmowego. Udostepnia opcjonalne<br />
argumenty specyfikujace metody CGI<br />
GET lub POST.<br />
Wczytuje zmienne z zewnetrznego<br />
dokumentu tekstowego do<br />
wskazanego poziomu lub klipu<br />
filmowego. Udostepnia opcjonalne<br />
argumenty specyfikujace metody CGI<br />
GET lub POST.<br />
Okresla instrukcje do wykonania po<br />
wystapieniu danego zdarzenia myszy<br />
lub zdarzenia klawiaturowego.<br />
Manipulator on jest zawsze<br />
przypisany do klonu przycisku.<br />
Okresla instrukcje do wykonania po<br />
wystapieniu danego zdarzenia klipu<br />
filmowego. Manipulator<br />
onClipEvent jest zawsze<br />
przypisany do klonu klipu filmowego.<br />
play play(); Esc + pl Rozpoczyna odtwarzanie filmu<br />
od biezacej pozycji.<br />
print<br />
removeMovieCl<br />
ip<br />
print<br />
(lokalizacja,<br />
obramowanie);<br />
removeMovieCli<br />
p (sciezka);<br />
Esc + pr<br />
Esc + rm<br />
Drukuje zawartosc ujec.<br />
Usuwa duplikat klonu klipu<br />
filmowego.<br />
Podsumowanie kategorii akcji<br />
set variable zmienna =<br />
wartosc<br />
return<br />
return<br />
wartosc;<br />
Esc + sv<br />
Esc + rt<br />
Przypisuje wartosc do zmiennej.<br />
Zwraca wartosc obliczona przez<br />
funkcje.<br />
437
Dodatek C<br />
Opis akcji<br />
Akcja Skladnia Sekwencja klawiszy Opis<br />
Podsumowanie kategorii akcji<br />
setProperty<br />
startDrag<br />
setProperty<br />
(sciezka,<br />
wlasciwosc,<br />
wartosc);<br />
startDrag<br />
(sciezka,<br />
wysrodkowany,<br />
L, T, R, B);<br />
Esc + sp<br />
Esc + dr<br />
Przypisuje wartosc do wlasciwosci<br />
klonu klipu filmowego lub calego<br />
filmu.<br />
Sprawia, ze wskazany klip filmowy<br />
podaza za wskaznikiem myszy.<br />
stop stop(); Esc + st Wstrzymuje odtwarzanie.<br />
stopAllSounds stopAllSounds(<br />
);<br />
Esc + ss<br />
Przerywa odtwarzanie wszystkich<br />
dzwieków.<br />
stopDrag stopDrag(); Esc + sd Sprawia, ze klip filmowy przestaje<br />
podazac za wskaznikiem myszy, co<br />
bylo spowodowane uzyciem akcji<br />
startDrag.<br />
tellTarget<br />
toggleHigh<br />
Quality<br />
trace<br />
unloadMovie<br />
tellTarget<br />
(sciezka) {<br />
instrukcje;<br />
}<br />
toggleHighQual<br />
ity();<br />
trace<br />
(komunikat);<br />
unoadMovieNum<br />
lub<br />
unloadMovie<br />
(poziomlubscie<br />
zka);<br />
var var zmienna =<br />
wartosc<br />
while<br />
with<br />
while<br />
(warunek) {<br />
instrukcje;<br />
}<br />
with (obiekt)<br />
{<br />
instrukcje;<br />
}<br />
Esc + tt<br />
Esc + tq<br />
Esc + tr<br />
Esc + um<br />
Esc + vr<br />
Esc + wh<br />
Esc + wt<br />
Okresla instrukcje do wykonania<br />
w odniesieniu do klipu filmowego<br />
wskazanego sciezka dostepu. Ta akcja<br />
jest odrzucona; zamiast niej powinno<br />
sie uzywac akcji with lub skladni<br />
z kropka.<br />
Wlacza lub wylacza wygladzanie,<br />
oddzialujac na caly film. Ta akcja jest<br />
odrzucona; zamiast niej powinno sie<br />
uzywac wlasciwosci _quality.<br />
Wyswietla wyrazenie w oknie<br />
Output w trybie testowym.<br />
Usuwa wczytany film z danego<br />
poziomu lub klipu filmowego.<br />
Definiuje zmienne lokalne zawarte<br />
w funkcji.<br />
Tworzy petle wykonywana, dopóki<br />
spelniony jest okreslony warunek.<br />
Okresla instrukcje do wykonania<br />
w odniesieniu do obiektu lub klipu<br />
filmowego wskazanego sciezka<br />
dostepu.<br />
438