plik


ÿþIDZ DO IDZ DO PRZYK£ADOWY ROZDZIA£ PRZYK£ADOWY ROZDZIA£ Macromedia Flash 8 ActionScript. SPIS TRESCI SPIS TRESCI Oficjalny podrêcznik Autorzy: Jobe Makar, Danny Patterson KATALOG KSI¥¯EK KATALOG KSI¥¯EK T³umaczenie: Jakub Thiele-Wieczorek na podstawie t³umaczenia Piotra CieSlaka i Marcina Samodulskiego KATALOG ONLINE KATALOG ONLINE ISBN: 83-246-0312-3 Tytu³ orygina³u: Macromedia Flash 8 ZAMÓW DRUKOWANY KATALOG ZAMÓW DRUKOWANY KATALOG ActionScript: Training from the Source Format: B5, stron: 488 TWÓJ KOSZYK TWÓJ KOSZYK Poznaj ogromne mo¿liwoSci jêzyka ActionScript 2.0 DODAJ DO KOSZYKA DODAJ DO KOSZYKA ActionScript to obiektowy jêzyk programowania zaimplementowany w jednym z najpopularniejszych narzêdzi do tworzenia interaktywnych witryn WWW, czyli w programie Macromedia Flash. Korzystanie z ActionScriptu pozwala wydobyæ CENNIK I INFORMACJE CENNIK I INFORMACJE z Flasha mo¿liwoSci niedostêpne z poziomu jego narzêdzi graficznych i animacyjnych. ActionScript daje projektantowi niemal nieograniczon¹ swobodê twórcz¹. Za pomoc¹ ZAMÓW INFORMACJE ZAMÓW INFORMACJE odpowiednio skonstruowanych skryptów mo¿na tworzyæ zarówno proste przyciski O NOWOSCIACH O NOWOSCIACH i animacje, jak i z³o¿one mechanizmy pobierania danych z zewnêtrznych xróde³, dynamicznego generowania grafiki i dokumentów oraz sterowania animacj¹ ZAMÓW CENNIK ZAMÓW CENNIK w zale¿noSci od dzia³añ u¿ytkownika. Ksi¹¿ka  Macromedia Flash 8 ActionScript. Oficjalny podrêcznik , przygotowana we wspó³pracy z producentem Flasha  firm¹ Macromedia, umo¿liwi Ci odkrycie CZYTELNIA CZYTELNIA niesamowitych mo¿liwoSci jêzyka ActionScript. Wykonuj¹c przedstawione w niej æwiczenia i projekty, poznasz sk³adniê tego jêzyka i zasady programowania FRAGMENTY KSI¥¯EK ONLINE FRAGMENTY KSI¥¯EK ONLINE obiektowego. Dowiesz siê, jak za pomoc¹ skryptów kontrolowaæ odtwarzanie animacji i zachowanie obiektów na scenie oraz nauczysz siê korzystaæ w animacjach z elementów pobieranych z plików i baz danych. Przeczytasz o przetwarzaniu plików XML, weryfikowaniu danych wprowadzanych przez u¿ytkownika oraz odtwarzaniu plików multimedialnych za pomoc¹ Flasha. " Elementy panelu Actions " Sk³adnia jêzyka ActionScript " Funkcje i instrukcje warunkowe " Klasy obiektów " Obs³uga zdarzeñ " Korzystanie z plików graficznych i cyfrowego wideo Wydawnictwo Helion " Tworzenie komponentów ul. KoSciuszki 1c " Odczyt danych z plików zewnêtrznych 44-100 Gliwice " Drukowanie z poziomu prezentacji tel. 032 230 98 63 " Optymalizacja plików SWF e-mail: helion@helion.pl O autorach ........................................................................................................................................................................................... 9 Wprowadzenie ................................................................................................................................................................................. 11 Lekcja 1. Wprowadzenie do jzyka ActionScript 2.0 ...................................................................................................17 Czym jest jzyk ActionScript? ................................................................................................................................. 18 Korzystanie z panelu Actions ..................................................................................................................................27 Tworzenie zmiennych .............................................................................................................................................. 38 Sposoby umieszczania kodu w aplikacji ................................................................................................................44 Obiekty, klasy i zasig ...............................................................................................................................................47 Lekcja 2. Funkcje .......................................................................................................................................................................... 51 Tworzenie funkcji ...................................................................................................................................................... 52 Funkcje z parametrami ............................................................................................................................................. 57 Zmienne lokalne oraz funkcje, które zwracaj okre[lon warto[ ..................................................................... 65 Lekcja 3. Korzystanie z instrukcji warunkowych ............................................................................................................73 Kontrolowanie przebiegu skryptów .......................................................................................................................74 Reakcja na ró|ne warunki ........................................................................................................................................80 Reakcja na dziaBania u|ytkownika ..........................................................................................................................82 Wykrywanie krawdzi sceny .................................................................................................................................... 83 Lekcja 4. Tablice i ptle ..............................................................................................................................................................87 Dlaczego ptle s u|yteczne? ....................................................................................................................................88 Typy ptli ....................................................................................................................................................................89 Wyjtki w ptlach ......................................................................................................................................................92 Aplikacja wyszukujca .............................................................................................................................................. 93 Pisanie i rozumienie warunków ptli ..................................................................................................................... 95 Ptle zagnie|d|one ....................................................................................................................................................98 Lekcja 5. PosBugiwanie si klasami obiektów ................................................................................................................103 Czym s obiekty i dlaczego s przydatne? ............................................................................................................ 104 Zastosowanie klasy Color .......................................................................................................................................119 Klasy String i Selection ........................................................................................................................................... 123 Lekcja 6. Tworzenie wBasnych klas obiektów ................................................................................................................131 Klasy, klasy wierzchoBkowe i kopie obiektów ...................................................................................................... 132 Tworzenie klasy ....................................................................................................................................................... 134 Zcie|ka dostpu do definicji klas ........................................................................................................................... 137 Pakiety i importowanie klas ................................................................................................................................... 139 Odczytywanie i zapisywanie wBa[ciwo[ci klasy ................................................................................................... 144 Definiowanie skBadowych klasy ............................................................................................................................ 147 Dziedziczenie ............................................................................................................................................................151 Modyfikacja projektu wykorzystujcego dziedziczenie ......................................................................................161 Lekcja 7. Zdarzenia, obiekty typu listener i odwoBania ...........................................................................................167 Do czego sBu| uchwyty zdarzeD? ......................................................................................................................... 168 Typy zdarzeD w programie Flash .......................................................................................................................... 169 Procedury obsBugujce zdarzenia .......................................................................................................................... 169 Tworzenie projektu wykorzystujcego procedury obsBugujce zdarzenia ....................................................... 172 Obiekty typu listener .............................................................................................................................................. 175 Tworzenie projektu wykorzystujcego obiekty typu listener ............................................................................ 176 Lekcja 8. Dynamiczne tworzenie zasobów .....................................................................................................................181 Dodawanie klipów filmowych .............................................................................................................................. 182 Dodawanie pustych klipów filmowych ................................................................................................................ 186 Rysowanie za pomoc kodu .................................................................................................................................. 187 Wykorzystywanie klipów filmowych jako przycisków ...................................................................................... 190 Dodawanie pól tekstowych za pomoc kodu ...................................................................................................... 192 Formatowanie tekstu .............................................................................................................................................. 194 Lekcja 9. Wykorzystywanie grafiki rastrowej .................................................................................................................197 Buforowanie powierzchni bitmapowych ............................................................................................................. 198 Wykorzystywanie filtrów ........................................................................................................................................203 Tryby przenikania ....................................................................................................................................................211 Wprowadzenie do Bitmap API .............................................................................................................................. 214 Lekcja 10. Tworzenie komponentów interfejsu u|ytkownika ...............................................................................223 Komponenty: elementarz pisania skryptów ........................................................................................................225 Konfiguracja wBa[ciwo[ci komponentów ............................................................................................................226 Wyzwalanie skryptów przy u|yciu zdarzeD komponentów .............................................................................. 233 Korzystanie z metod komponentów ....................................................................................................................239 Korzystanie z komponentu FocusManager ........................................................................................................248 Stylizacja komponentów interfejsu u|ytkownika z wykorzystaniem jzyka ActionScript ...........................252 6 MACROMEDIA FLASH 8 ACTIONSCRIPT Oficjalny podrcznik Lekcja 11. Zaawansowane programowanie obiektowe ...........................................................................................257 Usuwanie bBdów zakresu za pomoc delegacji ..................................................................................................258 Enkapsulacja ............................................................................................................................................................262 Wykorzystywanie kompozycji ............................................................................................................................... 263 Aczenie kompozycji i dziedziczenia ................................................................................................................... 265 Wyzwalanie zdarzeD ................................................................................................................................................268 Lekcja 12. Walidacja danych ................................................................................................................................................275 Proces walidacji danych ..........................................................................................................................................276 Korzystanie z procedur walidacyjnych .................................................................................................................277 ObsBuga bBdów .......................................................................................................................................................280 Walidacja cigów znaków .......................................................................................................................................282 Walidacja sekwencji ................................................................................................................................................287 Walidacja z wykorzystaniem listy mo|liwych warto[ci ...................................................................................... 291 Walidacja liczb .........................................................................................................................................................294 Przetwarzanie danych po procesie walidacji ........................................................................................................296 Lekcja 13. PoBczenia z zewntrznymi zródBami danych ........................................................................................299 yródBa i formaty danych ........................................................................................................................................300 Instrukcje GET i POST ........................................................................................................................................... 303 Korzystanie z klasy LoadVars ................................................................................................................................304 Pliki reguB ..................................................................................................................................................................313 Korzystanie z obiektów udostpnionych ............................................................................................................. 315 Korzystanie z komponentu WebServiceConnector ........................................................................................... 326 Lekcja 14. Korzystanie z jzyka XML w programie Flash ........................................................................................335 Podstawy jzyka XML ............................................................................................................................................. 337 Korzystanie z klasy XML ........................................................................................................................................340 Korzystanie z serwerów gniazd ..............................................................................................................................349 Lekcja 15. Interfejs zewntrzny ............................................................................................................................................367 Klasa ExternalInterface .......................................................................................................................................... 368 Konfiguracja jzyka HTML dla potrzeb prostych wywoBaD klasy ExternalInterface .................................... 369 WywoBywanie funkcji jzyka JavaScript w ActionScripcie ................................................................................ 369 Korzystanie z mo|liwo[ci jzyka JavaScript w programie Flash .......................................................................370 WywoBywanie funkcji jzyka ActionScript w JavaScripcie ................................................................................ 373 Aplikacja-quiz ..........................................................................................................................................................374 SPIS TREZCI 7 Lekcja 16. Korzystanie z dzwiku i filmów ....................................................................................................................381 Sterowanie odtwarzaniem dzwików za pomoc ActionScriptu ...................................................................... 383 Tworzenie kopii klasy Sound ................................................................................................................................ 383 Przeciganie klipu filmowego na okre[lonym obszarze .................................................................................... 386 Sterowanie gBo[no[ci .............................................................................................................................................390 Sterowanie balansem ...............................................................................................................................................397 DoBczanie dzwików i sterowanie ich odtwarzaniem .......................................................................................402 Wczytywanie i kontrolowanie odtwarzania zewntrznych plików wideo .......................................................407 Lekcja 17. Drukowanie i tworzenie podrcznych menu ..........................................................................................417 Ró|nice midzy drukowaniem z poziomu Flasha a przegldarki .................................................................... 418 Korzystanie z klasy PrintJob ..................................................................................................................................420 Tworzenie wBasnych menu podrcznych .............................................................................................................429 Lekcja 18. SWF o maksymalnych mo|liwo[ciach ........................................................................................................437 Polecenie fscommand() ..........................................................................................................................................438 Korzystanie z programu Zinc ................................................................................................................................444 U|ycie mechanizmu przekazywania parametrów FlashVars do filmu ............................................................458 Skorowidz .......................................................................................................................................................................................467 8 MACROMEDIA FLASH 8 ACTIONSCRIPT Oficjalny podrcznik Podczas programowania niekiedy spotykasz si z konieczno[ci wprowadzenia wielokrotnie po- wtarzajcych si cz[ci kodu  wówczas mo|esz upro[ci sobie zadanie, kopiujc je i wklejajc lub przepisujc te same linie w edytorze ActionScript. Jest jednak sposób na to, by powtarzajce si fragmenty napisa tylko raz, a przy najbli|szych okazjach zastpowa je pojedynczym poleceniem. Sposób ten polega na tworzeniu funkcji, za[ wykonanie funkcji nosi nazw wywoBania funkcji lub po prostu wywoBania. U|ycie funkcji oszczdza mnóstwo czasu zarówno podczas pisania, jak i mody- fikowania aplikacji. Zmniejszaj one dBugo[ kodu niezbdnego do jej dziaBania, poprawiajc przejrzysto[ i przyspieszajc ewentualne zmiany. W czasie tej lekcji wykonamy wiczenie polegajce na zaprojektowaniu prostej aplikacji na[ladujcej wirtualny odbiornik TV. Za pomoc funkcji zrealizujemy przeBczanie programów oraz wBczanie i wyBczanie odbiornika Flash-TV Potraktuj funkcje jako miniprogramy, które speBniaj okre[lon rol wewntrz wikszej aplikacji. Mo|esz wykorzysta je do wykonania zestawu okre[lonych poleceD, przetworzenia przekazanych im danych i zwrócenia rezultatu lub obu tych dziaBaD jednocze[nie. Funkcje stanowi bardzo ela- styczn i wygodn technik programowania. Podczas tej lekcji wykonamy jedno wiczenie, w którym nauczysz si, w jaki sposób tworzy funkcje i z nich korzysta. Czego si nauczysz? W czasie tej lekcji: Utworzysz funkcj OdwoBasz si do niej Zaprojektujesz funkcj korzystajc z parametrów Napiszesz funkcj zwracajc okre[lony rezultat Skorzystasz ze zmiennych lokalnych Czas trwania Lekcja zajmie Ci okoBo póBtorej godziny. MateriaBy do lekcji Pliki multimedialne: Brak Pliki startowe: Lekcja02\Start\television1.fla Gotowy projekt: Lekcja02\Completed\television4.fla Tworzenie funkcji Zanim zaczniesz korzysta z funkcji, musisz j utworzy lub zdefiniowa. Mo|na tego dokona, posBugujc si jedn z dwóch dostpnych konstrukcji. Konstrukcja 1. Poni|szy kod przedstawia pierwsz: function myFunction (parameter1:DataType,parameter2:DataType,etc.) { // W tym miejscu znajduj si akcje; } Skrypt ten odzwierciedla najpopularniejszy sposób tworzenia funkcji, jest to równie| metoda, któr bdziemy posBugiwa si najcz[ciej w trakcie bie|cej lekcji. Jak wida, deklaracja funkcji rozpo- czyna si od sBowa kluczowego function, za którym nastpuje nazwa funkcji (dowolna wybrana 52 MACROMEDIA FLASH 8 ACTIONSCRIPT Oficjalny podrcznik przez Ciebie, lecz zgodna z ogólnymi zasadami nazewnictwa obowizujcymi we Flashu). Cz[ definicji znajdujca si za nazw zostaBa ujta w nawiasy. Mo|esz pozostawi j pust lub wypeBni odpowiednimi wyra|eniami (bd to parametry), które funkcja bdzie wykorzystywa do swojego dziaBania. Pozostawiajc puste nawiasy, tworzysz tzw. funkcj  ogóln  czyli tak, która jest wykonywana zawsze w ten sam sposób, niezale|nie od tego, kiedy zostanie wywoBana (czyli uru- chomiona). Je[li Twoja funkcja przyjmuje parametry, bdzie wykonana w inny sposób za ka|dym jej wywoBaniem; sposób ten bdzie zale|aB od warto[ci i rodzaju parametrów, które jej wy[lemy. Takie wysyBanie informacji do funkcji nosi nazw przekazywania argumentów lub przekazywania para- metrów. Mo|esz wykorzysta dowoln liczb parametrów. W dalszej cz[ci lekcji napiszemy, w jaki sposób korzysta z danych przekazywanych przez parametry. Za opcjonalnym elementem deklaracji funkcji, jakim s parametry, nastpuje otwarcie nawiasu klamrowego oraz powrót karetki (przej[cie do nowego wiersza). Jest to miejsce przeznaczone na wszelkie polecenia i dziaBania, które ma podj funkcja podczas wywoBania. Polecenia te mog wy- korzysta dowolny z parametrów przekazany do funkcji (o czym wkrótce si przekonasz). Konstrukcja 2. Poni|szy fragment skryptu stanowi odzwierciedlenie drugiej konstrukcji przeznaczonej do two- rzenia funkcji. myFunction = function (parameter1:DataType,parameter2:DataType,etc.) {/* W tym miejscu znajduj si akcje */ }; Konstrukcji tej mo|na u|y do dynamicznego tworzenia funkcji lub podczas definiowania wBasnej metody (zagadnienie to poruszymy podczas lekcji 6.,  Tworzenie wBasnych klas obiektów ). Jedyna ró|nica, jaka dzieli obydwie przedstawione skBadnie, polega na sposobie nadania funkcji nazwy: w tym wypadku nazwa ta umieszczona jest na pocztku konstrukcji, za[ midzy ni a definicj dziaBania i operatorami funkcji znajduje si znak przypisania (=). Po zapoznaniu si z podstawami tworzenia czy te| definiowania funkcji przyjrzyjmy si sposobowi ich wykorzystania lub, mówic inaczej, wywoBywania. Je[li definicja funkcji nie zawiera |adnych parametrów, mo|e ona zosta wywoBana przez zastoso- wanie nastpujcej konstrukcji: myFunction(); WywoBujc okre[lon funkcj, tym samym przekazujesz do Flasha instrukcj wykonania poleceD w niej zawartych. Je[li funkcja myFunction() skBadaBaby si z 20 poleceD, wszystkie one zostaByby wykonane dziki tej pojedynczej linii skryptu. Je|eli definicja funkcji obejmuje równie| przyjmowanie parametrów dziaBania, do jej wywoBania mo|esz wykorzysta nastpujc konstrukcj: myFunction(parameter1, parameter2); Je[li parametr parameter1 miaBby warto[ w postaci sBowa cat, za[ parametrem parameter2 byBaby liczba 36, to te dwie warto[ci zostaByby przekazane do funkcji i mogByby zosta wykorzystane wewntrz LEKCJA 2. 53 Funkcje niej do przeprowadzenia zdefiniowanych wcze[niej operacji i dziaBaD. W innym miejscu skryptu ta sama funkcja mogBaby zosta wywoBana z zupeBnie innymi parametrami. SprawiBoby to, |e ta sama funkcja zadziaBaBaby nieco inaczej, gdy| polecenia zawarte w ciele funkcji przy zmienionych pa- rametrach daByby odmienny wynik. W kolejnych przykBadach poczynili[my zaBo|enie, |e zarówno funkcja, jak i odwoBania do niej znajduj si na tej samej listwie czasowej. Wiesz ju|, |e ka|da listwa czasowa mo|e zawiera wBasne obiekty i zmienne; dokBadnie to samo tyczy si funkcji, które zostaBy w niej zdefiniowane. Kiedy wywoBujesz funkcj znajdujc si na okre[lonej listwie czasowej, musisz wskaza jej poBo|enie, poprzedzajc nazw funkcji [cie|k dostpu do tej listwy. Mo|e to wyglda np. tak: _root.clip1.clip2.myFunction(); W wiczeniu tym zaprojektujemy przycisk, speBniajcy rol wBcznika na pilocie zdalnego stero- wania telewizora. Za pomoc tego przycisku nasz odbiornik Flash TV bdzie mo|na wBcza lub wyBcza. Podczas pisania skryptów skorzystamy z mo|liwo[ci oferowanych przez funkcje. Funkcja mo|e by wywoBana dynamicznie w oparciu o podan warto[, np. _root[aVariable Name]();. W takiej konstrukcji, je[li aVariableName miaBaby warto[ "sayHello", wynikowe odwoBanie do funkcji przybraBoby posta _root.sayHello();. 1. Otwórz plik television1.fla znajdujcy si w folderze Lekcja02/Starts. Struktura filmu zostaBa ju| przygotowana. CaBy kod ActionScript, jaki napiszesz w tym wiczeniu, zostanie umieszczony w warstwie Actions projektu. W warstwie o nazwie TV znajduje si kopia klipu filmowego o nazwie tv_mc. Listwa czasowa tego klipu skBada si z trzech warstw: w widocznej na samym dole warstwie Television umieszczono rysunek telewizora, za[ warstwa znajdujca si ponad ni (Screen) zawiera kopi klipu o nazwie screen_mc (który zamaskowany jest przez warstw umieszczon na samej górze). Kopia klipu screen_mc skBada si z dwóch warstw i dwóch klatek, a zawiera grafik na[ladujc  programy przeBczane za pomoc pilota TV. Warstwa Remote skBadajca si na gBówn listw czasow zawiera kopi klipu filmowego o nazwie remote_mc. Wewntrz tego klipu znajdziesz warstw, w której umieszczono wikszo[ 54 MACROMEDIA FLASH 8 ACTIONSCRIPT Oficjalny podrcznik elementów graficznych przedstawiajcych pilota, wBczajc w to kopi klipu o nazwie light_mc oraz kolejn warstw, na której widniej przyciski zdalnego sterowania. Ponumerowane przyciski nosz nazwy od channel1_btn do channel6_btn. Pod przyciskami zaopatrzonymi w cyfry widoczne s dodatkowe dwa, oznaczone napisami Up oraz Down. Nazwy kopii tych przycisków to, odpowiednio, up_btn oraz down_btn. Znajdujcy si na samym dole przycisk z napisem Power nosi nazw power_btn. 2. Zaznacz 1. klatk warstwy Actions na gBównej listwie czasowej. Korzystajc z panelu Actions, wprowadz nastpujcy skrypt: var tvPower:Boolean = false; function togglePower() { var newChannel:Number; if (tvPower) { newChannel = 0; tvPower = false; } else { newChannel = 1; tvPower = true; } tv_mc.screen_mc.gotoAndStop(newChannel+1); remote_mc.light_mc.play(); } W pierwszej linii tego skryptu deklarowana jest zmienna o nazwie tvPower, która posBu|y do [ledzenia bie|cego stanu odbiornika TV. Je[li bdzie ona miaBa warto[ true, to znaczy, |e telewizor jest wBczony, warto[ false oznacza wyBczenie odbiornika. Poniewa| po uruchomieniu filmu telewizor jest wyBczony, zmiennej tvPower nadawana jest warto[ false. Kolejnych 11 linii kodu zawiera definicj funkcji togglePower(). Funkcja ta po wywoBaniu spowoduje wBczenie lub wyBczenie telewizora. Do dziaBania funkcji nie s wymagane |adne parametry. Poniewa| skrypt ten znajduje si w 1. klatce filmu, funkcja togglePower() oraz zmienna tvPower z nadan warto[ci false s deklarowane natychmiast po wczytaniu tej klatki, czyli rozpoczciu odtwarzania filmu. Poniewa| funkcje musz by zdefiniowane, zanim nastpi ich pierwsze wywoBanie, standardow praktyk jest definiowanie ich w pierwszych klatkach filmu, dziki czemu mog one zosta wywoBane w dowolnym, pózniejszym momencie. Pierwsza cz[ funkcji zawiera wyra|enie warunkowe if, analizujce bie|c warto[ zmiennej tvPower. Je[li zmienna ta przechowuje warto[ true (TV jest wBczony), to po wywoBaniu funkcji zostaje ona zmieniona na false (wyBczenie TV), za[ zmiennej newChannel przechowujcej numer bie|cego kanaBu zostaje nadana warto[ 0. Je|eli zmienna tvPower ma warto[ false, to (kod za wyra|eniem else) zostaje ona zmieniona na true, za[ zmiennej newChannel przypisywana jest warto[ 1. Stosujc wyra|enie if w taki wBa[nie sposób, osigamy efekt zmiany warto[ci zmiennej tvPower na przeciwn, za ka|dym razem gdy wywoBana jest funkcja togglePower(). Jednocze[nie nastpuje równie| zmiana warto[ci zmiennej newChannel. Po zakoDczeniu dziaBania skryptu zmienna ta przyjmuje warto[ 0 lub 1. LEKCJA 2. 55 Funkcje W tej lekcji wykorzystamy kilkakrotnie instrukcje if. Jednak ich dokBadny opis znajdziesz dopiero w lekcji 4., "Tablice i ptle". W tej chwili wystarczy, |e bdziesz wiedziaB, i| s one u|ywane do sprawdzania, czy zostaB speBniony okre[lony warunek. Je[li tak, wykonywany jest dodatkowy kod. Po zakoDczeniu opisanych powy|ej dziaBaD funkcja powoduje odtworzenie odpowiedniej klatki kopii klipu filmowego screen_mc, który znajduje si wewntrz klipu tv_mc. Numer tej klatki uzyskany jest przez zwikszenie warto[ci zmiennej newChannel o 1. Zabieg ten jest konieczny, poniewa| zapobiega odtworzeniu klatki o numerze 0 (mogBoby si tak zdarzy, poniewa| zmienna newChannel przyjmuje niekiedy warto[ 0, a klatki o takim numerze nie zawiera |adna listwa czasowa Flasha). Podsumowujc dziaBanie omawianej cz[ci funkcji, stwierdzamy, |e powoduje ona odtworzenie klatki 1. (pusty ekran TV) lub 2. (program 1.) kopii klipu filmowego screen_mc. Funkcja koDczy dziaBanie na przekazaniu polecenia odtwarzania klipowi przedstawiajcemu nadajnik zdalnego sterowania. Powoduje to bBy[nicie  diody umieszczonej na pilocie, co stanowi potwierdzenie wci[nicia przycisku. Dysponujemy zatem funkcj zdefiniowan w 1. klatce gBównej listwy czasowej filmu. Cho funkcja ta skBada si z kilku poleceD, |adne z nich nie jest wykonywane a| do momentu jej wywoBania. 3. Korzystajc z panelu Actions, dodaj kolejny fragment skryptu poni|ej ju| wprowadzonego (po definicji funkcji) remote_mc.power.btn.onRelease = togglePower; 56 MACROMEDIA FLASH 8 ACTIONSCRIPT Oficjalny podrcznik Przycisk Power umieszczony na pilocie zawarty jest w kopii klipu filmowego o nazwie power_btn (czyli jednocze[nie znajduje si równie| w klipie remote_mc z pilotem). Linia kodu, któr przed chwil wpisaBe[, przypisuje uchwyt zdarzenia onRelease do przycisku Power. Po zaj[ciu tego zdarzenia wywoBywana jest nasza funkcja togglePower. Dzieje si tak za ka|dym wci[niciem i zwolnieniem tego przycisku, co powoduje wykonanie poleceD zawartych w funkcji. 4. Wydaj polecenie Control/Test Movie. Kliknij kilkukrotnie przycisk Power, aby przekona si, |e wBczanie i wyBczanie wirtualnego telewizora dziaBa bez zarzutu. Za ka|dym razem gdy wciskasz przycisk Power, wywoBywana jest funkcja togglePower(), a wraz z ni wykonywane s wszystkie polecenia w niej zawarte. Zgodnie z tym, co mówili[my przed chwil, powoduj one naprzemienne wBczanie i wyBczanie TV. 5. ZakoDcz testowanie filmu i zapisz projekt w pliku o nazwie television2.fla. WBa[nie utworzyBe[ i zastosowaBe[ swoj pierwsz funkcj! W nastpnej cz[ci lekcji rozbudujemy nieco projekt, aby zaprezentowa dziaBanie bardziej rozbudowanej i elastycznej funkcji. Funkcje z parametrami W naszym poprzednim wiczeniu nauczyBe[ si, w jaki sposób zdefiniowa funkcj i wywoBa j. W wiczeniu, które za chwil rozpoczniemy, funkcj t wzbogacimy w mo|liwo[ wykorzystania parametrów, przedstawimy te| opis ich zastosowania. Oto konstrukcja pozwalajca na zdefinio- wanie funkcji, do której mo|na przekaza parametry: function convertToMoonWeight (myWeight:Number) { var weightOnMoon:Number = myWeight/6.04; } Jedyny parametr funkcji zdefiniowanej w tym skrypcie nosi nazw myWeight. Warto[ tego para- metru wykorzystana jest tak|e wewntrz definicji funkcji (pod koniec drugiej linii kodu), zupeBnie jakby byBa to zdefiniowana wcze[niej zmienna. Zauwa|, |e definicja funkcji z parametrami po- winna zawiera deklaracje typów tych parametrów. W tym przypadku parametr o nazwie myWeight jest warto[ci numeryczn. Oto przykBad wywoBania zdefiniowanej w ten sposób funkcji: convertToMoonWeight(165); Jak widzisz, do wywoBania funkcji dodali[my warto[ numeryczn w postaci liczby 165. Warto[ ta wysyBana jest do wywoBywanej funkcji, dziki czemu mo|e ona zosta wykorzystana do obliczeD zdefiniowanych wewntrz tej funkcji. W zaprezentowanym tutaj przykBadzie warto[ 165 umiesz- czona w wywoBaniu funkcji przypisywana jest do parametru myWeight w definicji funkcji. Rezultat wy- glda nastpujco: function convertToMoonWeight (165) { var weightOnMoon:Number = 165/6.04; } LEKCJA 2. 57 Funkcje W taki oto sposób w naszym przykBadzie wysBanie warto[ci 165 do funkcji convertToMoonWe- ight() spowoduje obliczenie wyniku zmiennej weightOnMoon, której warto[ wyniosBaby 165/6.04, czyli 27.32. Parametr myWeight zastpowany jest warto[ci przekazywan w odwoBaniu do funkcji. Najwiksza zaleta tego mechanizmu polega na mo|liwo[ci wysBania za ka|dym razem innej warto[ci podczas wywoBania tej samej funkcji. Dziki temu zmienna weightOnMoon obliczona na podstawie przeka- zanej liczby równie| bdzie miaBa inn warto[. Przyjrzyjmy si ró|nym odwoBaniom do funkcji convertToMoonWeight(): convertToMoonWeight(190); convertToMoonWeight(32); convertToMoonWeight(230); Ka|de z tych odwoBaD dotyczy tej samej funkcji, jednak ze wzgldu na to, |e przekazywany do niej parametr ma za ka|dym razem inn warto[, tak|e i efekt jej dziaBania bdzie ró|ny (mówic in- nymi sBowy, inny bdzie przechowywany w zmiennej weightOnMoon rezultat obliczeD zdefiniowa- nych wewntrz funkcji). Parametry okre[lone w definicji funkcji istniej jedynie w jej obrbie. W naszym przykBadzie para- metrem takim jest warto[ myWeight, która nie jest dostpna poza sam funkcj. WysyBajc do funkcji okre[lone warto[ci parametrów, mo|esz skonstruowa wywoBanie zawierajce nazw zmiennej, np.: convertToMoonWeight(myVariable); W takim wypadku do funkcji zostanie wysBana warto[ zmiennej myVariable. Definicje funkcji mog te| obejmowa kilka parametrów, np.: function openWindow(url:String, window:String) { getURL(url, window); } Podana definicja funkcji zawiera dwa parametry, url oraz window, oddzielone przecinkiem. Funk- cja ta skBada si z jednego polecenia, getURL(), które wykorzystuje oba przekazane do funkcji pa- rametry. OdwoBanie do tej funkcji mogBoby wyglda np. tak: openWindow("http://www.yahoo.com", "_blank"); OdwoBanie to wysyBa do funkcji dwie warto[ci, oddzielone przecinkiem; jest to adres URL oraz spo- sób otwarcia strony definiowany przez atrybut target. Warto[ci te wykorzystane zostan przez funkcj do zrealizowania okre[lonego zadania, w tym przypadku bdzie to otwarcie witryny yahoo.com w no- wym oknie przegldarki. Deklarujc wiele parametrów w definicji funkcji, nale|y zapamita kolejno[, w jakiej zostaBy podane. Warto[ci umieszczone w wywoBaniu musz by bowiem uBo|one w tej samej kolejno[ci, w jakiej zdefiniowano odpowiadajce im parametry. 58 MACROMEDIA FLASH 8 ACTIONSCRIPT Oficjalny podrcznik PrzykBadowo poni|sze odwoBanie do zaprezentowanej wcze[niej funkcji openWindow() nie zadziaBa, poniewa| definicja funkcji zakBada podanie najpierw adresu URL, a dopiero potem sposobu otwarcia strony: openWindow("_blank", "http://www.yahoo.com"); Po wywoBaniu funkcji tworzona jest pomocnicza, tymczasowa tablica o nazwie arguments. Tabli- ca ta zawiera wszystkie parametry przekazane do funkcji nawet wtedy, je[li definicja funkcji nie zawiera |adnych parametrów. Oto przykBad ilustrujcy sposób, w jaki mo|na uzyska dostp do tablicy arguments: function traceNames() { trace("This function was passed " + arguments.length + "arguments"); trace ("The value of the first argument is: " + arguments[0]); trace ("The value of the second argument is: " + arguments[1]); } traceNames("Kelly", "Chance"); Po wykonaniu przykBadowego skryptu w oknie output Flasha wy[wietlone zostan nastpujce in- formacje: This function was passed two arguments The value of the first argument is: Kelly The value of the second argument is: Chance Dostp do tablicy arguments pozwala na tworzenie funkcji, które mog przystosowywa si do zmiennej ilo[ci parametrów. Wicej informacji na temat tablic znajdziesz w lekcji 4.,  Tablice i ptle . W wiczeniu, które za chwil rozpoczniemy, rozbudujemy nieco nasz poprzedni projekt, dodajc funkcje do przycisków numerycznych oraz przycisków zmiany kanaBów Up oraz Down umieszczo- nych na pilocie telewizora. Korzystajc z tych przycisków, bdziemy mogli zmieni wy[wietlany kanaB telewizyjny. DziaBanie przycisków numerycznych oprzemy si na funkcji, której przekazywa bdziemy parametr w postaci numeru |danego kanaBu. Nieznacznym zmianom poddamy rów- nie| funkcj togglePower(). 1. Otwórz plik television2.fla. W wiczeniu tym wykorzystamy plik, który zapisaBe[ na koDcu pracy z poprzednim projektem. Zanim jednak przystpimy do dalszej pracy, powiniene[ zapozna si ze struktur kopii klipu screen_mc, znajdujc si wewntrz klipu tv_mc. W klatkach od 1. do 7. listwy czasowej klipu screen_mc znajduj si elementy graficzne. Odzwierciedlaj one wygld ekranu, gdy telewizor jest wyBczony (klatka 1.) oraz sze[ kolejnych kanaBów telewizyjnych, które mo|na bdzie wBczy za pomoc pilota. LEKCJA 2. 59 Funkcje 2. Wybierz 1. klatk na warstwie Actions gBównej listwy czasowej i otwórz panel Actions. Poni|ej linii var tvPower:Boolean = false; dodaj nastpujcy fragment skryptu: var currentChannel:Number; W wiczeniu tym zajmiemy si przygotowaniem funkcji zmieniajcej kanaB wy[wietlany w TV. Zaprogramujemy te| zmian kanaBu za pomoc przycisków Up   nastpny oraz Down   poprzedni . W tym celu musimy dysponowa informacj o bie|cym kanale wy[wietlanym w TV. Przedstawiona linia skryptu deklaruje now zmienn o nazwie currentChannel, która bdzie sBu|yBa do przechowywania numeru bie|cego, wy[wietlanego kanaBu. 3. W tej samej klatce filmu, tu| pod znajdujc si tam definicj funkcji, dodaj kolejny fragment skryptu: function changeTheChannel(newChannel:Number) { if (tvPower) { currentChannel = newChannel; tv_mc.screen_mc.gotoAndStop(newChannel+1); remote_mc.light_mc.play(); } } 60 MACROMEDIA FLASH 8 ACTIONSCRIPT Oficjalny podrcznik ZdefiniowaBe[ wBa[nie funkcj z parametrem. Funkcja ta powoduje zmian bie|cego kanaBu TV na podstawie warto[ci przekazanego do niej parametru (newChannel). Wszystkie polecenia realizowane przez funkcj znajduj si wewntrz wyra|enia warunkowego if, które pozwala na zmian kanaBów wyBcznie wtedy, gdy zmienna tvPower ma warto[ true. Kolejne polecenie przypisuje zmiennej przechowujcej bie|cy numer kanaBu warto[ parametru, który przekazaBe[ do funkcji. Kolejne dwie linie skryptu powinny wyglda znajomo: omawiali[my je w poprzednim wiczeniu przy okazji definiowania funkcji togglePower(). Powoduj one odtworzenie odpowiedniej klatki klipu screen_mc (a co za tym idzie, zmian kanaBu TV) oraz bBy[nicie diody kontrolnej na pilocie. Rozwa|my nastpujcy przykBad, który pomo|e w zrozumieniu dziaBania omawianej funkcji. ZaBó|my, |e wykonane zostaBo nastpujce odwoBanie: changeTheChannel(4); Na pocztku funkcja sprawdzi, czy zmiennej tvPower przypisano warto[ true (TV jest wBczony). Je[li tak, to zmiennej currentChannel nadana zostanie warto[ 4 (taka sama jak warto[ parametru przekazanego do funkcji). Nastpnie odtworzona zostanie klatka klipu screen_mc o numerze równym tej warto[ci, zwikszonej o 1 (czyli 4 + 1). W omawianym przypadku bdzie to zatem klatka 5. Twoja nowa funkcja jest gotowa do wykorzystania. Dodajmy jeszcze uchwyty zdarzeD onRelease do ka|dego z przycisków numerycznych pilota, pozwol one wywoBywa funkcj changeTheChannel(). 4. Dodaj nastpujcy skrypt poni|ej ju| wprowadzonego w 1. klatce gBównej listwy czasowej: remote_mc.channel1_btn.onRelease = function() { changeTheChannel(1); }; remote_mc.channel2_btn.onRelease = function() { changeTheChannel(2); }; remote_mc.channel3_btn.onRelease = function() { changeTheChannel(3); }; remote_mc.channel4_btn.onRelease = function() { changeTheChannel(4); }; remote_mc.channel5_btn.onRelease = function() { changeTheChannel(5); }; remote_mc.channel6_btn.onRelease = function() { changeTheChannel(6); }; Do ka|dego z przycisków numerycznych na pilocie dodany zostaB w ten sposób uchwyt zdarzenia (przypominamy, |e kopia klipu remote_mc zawiera sze[ przycisków o nazwach od channel1_btn do channel6_btn  nazwy te stanowi podstaw dla zastosowanej konstrukcji). Gdy jeden z tych przycisków zostanie wci[nity, nastpi odwoBanie do funkcji changeTheChannel() i przekazanie jej numeru kanaBu. W ten sposób mo|emy wykorzysta t sam funkcj w odniesieniu do kilku ró|nych przycisków i uzyska rezultat zale|ny od przekazanego jej parametru. LEKCJA 2. 61 Funkcje Funkcje zdefiniowane za pomoc operatora przypisania (=) traktowane s jak polecenia. Wszystkie polecenia powinny by zakoDczone [rednikami. Dlatego te| ka|da przedstawiona tutaj definicja funkcji zakoDczona jest [rednikiem, cho standardowa konstrukcja definicji nie wymaga takiego zakoDczenia. 5. Wydaj polecenie Control/Test Movie. Wci[nij przycisk Power na pilocie, aby wBczy telewizor, a nastpnie skorzystaj z przycisków oznaczonych cyframi do przeBczania programów TV. Je|eli próbowaBe[ wcisn dowolny przycisk z numerem programu, zanim wBczyBe[ odbiornik, funkcja changeTheChannel() nie wykonaBa |danej zmiany. Dopiero po wBczeniu telewizora i wci[niciu jednego z przycisków kanaBów liczba, któr oznaczony jest przycisk, przekazywana jest w charakterze parametru do funkcji changeTheChannel() i odtwarzanie kopii klipu screen_mc zostaje przeniesione do odpowiedniej klatki (kanaBu). 6. ZakoDcz testowanie pliku i powró do [rodowiska edycji projektu. Zaznacz 1. klatk warstwy Actions gBównej listwy czasowej. W klatce tej znajduj si teraz dwie definicje funkcji, jedna powodujca wBczenie i wyBczenie TV, druga za[ pozwalajca na zmian programów za pomoc przycisków numerycznych na pilocie telewizora. Przygldajc si konstrukcji obu funkcji, mo|emy jednak zauwa|y pewne nadmiarowe, powtarzajce si elementy. Obydwie zawieraj polecenia powodujce bByskanie lampki kontrolnej pilota, obie te| powoduj odtworzenie wskazanej klatki klipu screen_mc. Takie powtarzajce si fragmenty najlepiej eliminowa zawsze, gdy to tylko mo|liwe, zajmiemy si wic teraz poprawieniem tego problemu. 62 MACROMEDIA FLASH 8 ACTIONSCRIPT Oficjalny podrcznik 7. Korzystajc z panelu Actions, zmieD funkcj togglePower() w nastpujcy sposób: function togglePower() { if (tvPower) { changeTheChannel(0); tvPower = false; } else { tvPower = true; changeTheChannel(1); } } Funkcja togglePower() wykorzystuje teraz odwoBanie do funkcji changeTheChannel(), aby zmieni bie|cy program, gdy telewizor jest wBczany lub wyBczany. Przy wBczeniu, podczas odwoBania do funkcji changeTheChannel(), przekazywana jest warto[ 1. Oznacza to, |e za ka|dym razem gdy telewizor bdzie wBczany, automatycznie wy[wietlany bdzie program 1. Po wyBczeniu telewizora  wy[wietlany bdzie kanaB 0 (czyli pusty ekran). Stanowi to prosty przykBad ilustrujcy mo|liwo[ wywoBania funkcji z poziomu innej funkcji. Przyjrzyj si pierwszej cz[ci wyra|enia if w punkcie 7. wiczenia i zwró uwag, |e odwoBanie do funkcji changeTheChannel() ma miejsce, zanim jeszcze zmiennej tvPower przypisana zostanie war- to[ false. Kolejno[ taka spowodowana jest konstrukcj funkcji changeTheChannel(), która wyko- nana zostanie jedynie wówczas, gdy zmienna tvPower ma warto[ true (a niewtpliwie ma tak warto[, poniewa| jest ona sprawdzana przez wyra|enie if). Je|eli przypisaliby[my zmiennej tv- Power warto[ false, zanim nastpiBoby wywoBanie changeTheChannel(0), funkcja ta nie wyko- nywaBaby po prostu |adnej czynno[ci. Druga cz[ wyra|enia warunkowego znajdujca si po sBo- wie else dziaBa dokBadnie odwrotnie: najpierw zmiennej tvPower nadawana jest warto[ true, dopiero potem za[ nastpuje wywoBanie funkcji. Ponownie dzieje si tak ze wzgldu na konstrukcj funkcji changeTheChannel(). Napiszmy teraz funkcje, które pozwol wybra kolejny i poprzedni program TV za pomoc przycisków Up oraz Down na pilocie. 8. Wybierz 1. klatk warstwy Actions na gBównej listwie czasowej i otwórz panel Actions. Wprowadz podany ni|ej skrypt tu| pod lini tvPower:Boolean = false;: var numberOfChannels:Number = 6; Ta linia kodu deklaruje zmienn o nazwie numberOfChannels i nadaje jej warto[ 6. Zmienn t wykorzystamy w funkcji (napiszemy j za chwil), która sBu|y bdzie do zmiany programu TV na kolejny. Pamitajc, |e klip screen_mc zawiera graficzne odpowiedniki sze[ciu programów, nadajemy utworzonej zmiennej warto[ 6, która odzwierciedla ich liczb. Zmienna numberOfChannels bdzie zapobiega zwikszeniu numeru programu na wikszy ni| szósty. Przyjrzyjmy si, jak dziaBa to w praktyce. 9. Dodaj nastpujcy fragment skryptu poni|ej ju| istniejcego: function channelUp() { if (currentChannel+1<=numberOfChannels) { changeTheChannel(currentChannel+1); } } LEKCJA 2. 63 Funkcje Funkcja ta nie wymaga parametrów, za[ jej zadaniem jest zwikszanie numeru programu o 1, zawsze wtedy, gdy zostanie ona wywoBana. Jednak funkcja zawiera pewien  mechanizm bezpieczeDstwa , zapobiegajcy przekroczeniu dostpnej liczby kanaBów (w tym wypadku programu 6.). Przypominamy, |e warto[ zmiennej o nazwie currentChannel zmieniana jest, za ka|dym razem gdy wywoBana jest funkcja changeTheChannel() (patrz punkt 3. wiczenia). Warto[ tej zmiennej odzwierciedla bie|cy numer programu minus 1. A zatem, je[li wy[wietlany jest akurat program 4., warto[ ta bdzie wynosi 3. Zanim jednak wykonana zostanie funkcja channelUp(), uruchamiane jest wyra|enie warunkowe if sprawdzajce, czy zwikszenie bie|cego numeru programu o 1 (warto[ zmiennej currentChannel + 1) nadal bdzie mniejsza lub co najwy|ej równa dostpnej liczbie kanaBów (warto[ zmiennej numberOfChannels czyli 6). Je[li warunek ten jest speBniony, nastpuje wywoBanie funkcji changeTheChannel() z parametrem o warto[ci numeru bie|cego kanaBu zwikszonej o 1. Spowoduje to oczywi[cie wy[wietlenie kolejnego programu. Przedstawione tutaj wyra|enie if nie zawiera towarzyszcego wyra|enia else: je[li warunek pocztkowy nie jest speBniony, to znaczy, |e wy[wietlany jest akurat program 6. i podejmowanie dalszych dziaBaD nie ma sensu. 10. Dodaj kolejny fragment skryptu w bie|cej klatce filmu: function channelDown() { if (currentChannel-1>=1) { changeTheChannel(currentChannel-1); } } Podobnie jak funkcja channelUp(), tak i channelDown()do dziaBania nie wymaga podania parametrów. Po wywoBaniu sprawdza ona, czy bie|ca warto[ zmiennej currentChannel zmniejszona o 1 byBaby nadal wiksza lub równa 1, zapobiega jednocze[nie zmianie programu na mniejszy ni| oznaczony numerem pierwszym. Je[li warunek ten jest speBniony, nastpuje wywoBanie funkcji changeTheChannel() i przekazanie jej bie|cej warto[ci zmiennej currentChannel zmniejszonej o 1. Spowoduje to wy[wietlenie poprzedniego w kolejno[ci, w jakiej s ponumerowane, programu. Podobnie jak w przypadku funkcji channelUp(), tak i tutaj konstrukcja wyra|enia if nie zawiera towarzyszcego wyra|enia else. Je[li warunek pocztkowy nie jest speBniony, to znaczy, |e bie|cym kanaBem jest program 1. i nie ma mo|liwo[ci jego zmiany na  ni|szy . NaszedB czas na dodanie wywoBaD przygotowanych funkcji channelUp() i channelDown() do przycisków Up oraz Down na pilocie TV. 11. Dodaj nastpujc lini skryptu w 1. klatce filmu: remote_mc.up_btn.onRelease = channelUp; Podana tutaj linia kodu ActionScript przypisuje uchwyt zdarzenia onRelease do kopii przycisku up_btn, znajdujcej si wewntrz klipu remote_mc. Za ka|dym razem gdy przycisk ten bdzie wci[nity, nastpi wywoBanie funkcji channelUp(). Je|eli numer bie|cego programu zrówna si z górn, dopuszczaln granic (okre[lon w zmiennej numberOfChannels), wywoBanie funkcji channelUp() przestanie powodowa przeBczanie programu na nastpny. 12. Dodaj nastpujcy skrypt: remote_mc.down_btn.onRelease = channelDown; 64 MACROMEDIA FLASH 8 ACTIONSCRIPT Oficjalny podrcznik Podobnie jak w przypadku przycisku Up opisanego w 11. punkcie wiczenia, skrypt ten przypisuje uchwyt zdarzenia do przycisku down_btn, znajdujcego si wewntrz klipu remote_mc. Za ka|dym razem gdy przycisk ten jest wci[nity, wywoBywana jest funkcja channelDown(), a warto[ zmiennej currentChannel jest zmniejszana (tak dBugo, jak dBugo bdzie ona wiksza ni| dolna, dopuszczalna granica). W wyniku tego na ekranie TV wy[wietlany jest odpowiedni program. 13. Wydaj polecenie Control/Test Movie. WBcz telewizor, korzystajc z przycisku Power, a nastpnie zmieD wy[wietlany program, posBugujc si przyciskami Up i Down. Zwró uwag, |e mo|esz wybra dowolny program za pomoc przycisków numerycznych, a nastpnie przeBczy go na poprzedni lub nastpny przy u|yciu przycisków Up i Down. StaBo si to mo|liwe po wykorzystaniu zmiennej przechowujcej bie|cy numer programu oraz funkcji niezmiernie upraszczajcych tego typu zadania. 14. ZakoDcz testowanie filmu i zapisz projekt w pliku o nazwie television3.fla. ZaprogramowaBe[ wBa[nie dziaBanie pilota TV umo|liwiajcego zmian wy[wietlanych programów. W naszym nastpnym wiczeniu wykorzystamy funkcje w nieco inny ni| dotd sposób, dodajc mo|liwo[ wy[wietlania tekstowego opisu odbieranego wBa[nie programu. Zmienne lokalne oraz funkcje, które zwracaj okre[lon warto[ Do zmiennych, które tworzyli[my i wykorzystywali[my do tej pory, mo|na byBo odwoBa si w dowolnym momencie, z poziomu dowolnego skryptu umieszczonego w filmie Flasha. Jednak istniej równie| zmienne lokalne, które tworzone s i wykorzystywane jedynie w obrbie definicji LEKCJA 2. 65 Funkcje okre[lonej funkcji. Innymi sBowy, zmienna lokalna tworzona jest wewntrz definicji funkcji i wy- korzystywana przez t wBa[nie funkcj po jej wywoBaniu, a nastpnie po zakoDczeniu dziaBania au- tomatycznie usuwana. Zmienne lokalne istniej jedynie w obrbie funkcji, w której zostaBy zade- klarowane. Cho stosowanie zmiennych lokalnych podczas programowania w jzyku ActionScript nie jest ab- solutnie konieczne, posBugiwanie si nimi stanowi dobry programistyczny zwyczaj. Aplikacje wy- magajce wielu skomplikowanych obliczeD wykorzystuj mnóstwo zmiennych, które mog spowol- ni jej dziaBanie z upBywem czasu. Wykorzystujc zmienne lokalne, minimalizujesz wykorzystanie dostpnej pamici i zapobiegasz wystpowaniu konfliktów nazw, mogcych pojawi si w du|ych projektach podczas spontanicznego tworzenia nowych zmiennych i nadawania im nazw, które by- By ju| wcze[niej wykorzystane. Zmienne lokalne zadeklarowane w jednej funkcji mog mie iden- tyczne nazwy jak zmienne istniejce w innej  nawet je[li definicje obu funkcji znajduj si na tej samej listwie czasowej. Jest to mo|liwe, poniewa| Flash rozpatruje dan zmienn lokaln jedynie w obszarze funkcji, w którym zostaBa zadeklarowana. Jest tylko jedna metoda rcznego tworzenia zmiennych lokalnych; konstrukcji tej u|ywaBe[ dotd z powodzeniem przy tworzeniu zwykBych zmiennych: var myName:String = "Jobe"; Zmienna ta staje si lokalna po prostu przez umieszczenie jej deklaracji wewntrz definicji funkcji i zastosowanie konstrukcji ze sBowem kluczowym var. PosBu|my si pewnym przykBadem, aby lepiej wyja[ni ide deklarowania funkcji lokalnych. W na- szym poprzednim wiczeniu zadeklarowali[my (utworzyli[my) zmienn o nazwie currentChannel i umie[cili[my j w pierwszej klatce gBównej listwy czasowej. Do jej utworzenia posBu|yBa nastpu- jca konstrukcja: var currentChannel:Number; Poniewa| podana tutaj linia skryptu zawierajca deklaracj zmiennej znajdowaBa si w 1. klatce gBównej listwy czasowej, nie za[ wewntrz definicji funkcji, zmienna ta stanie si dostpna na gBów- nej listwie czasowej. Je|eli umie[ciliby[my identyczn deklaracj wewntrz definicji jakiej[ funkcji, zmienna currentChannel byBaby traktowana jako lokalna (przynale|na jedynie do tej funkcji): ist- niaBaby wyBcznie po wywoBaniu tej funkcji i usuwana po zakoDczeniu jej dziaBania. Spróbuj po- traktowa zmienne lokalne jako tymczasowe warto[ci przeznaczone do wykorzystania jedynie w obrbie wybranej funkcji. Je|eli chciaBby[ wewntrz funkcji zadeklarowa zmienn, która bdzie dostpna z zewntrz, pomiD w deklaracji sBowo kluczowe var i skorzystaj z nastpujcej konstrukcji: name = "Jobe"; Zmienne ogólnodostpne najlepiej deklarowa poza obrbem funkcji. Deklaracja taka jest trakto- wana jako poprawna, poniewa| uBatwia zgrupowanie wszystkich tego typu zmiennych w jednym miejscu. Porzdek i przejrzysto[ programowania staje si bardzo istotna szczególnie wówczas, gdy chciaBby[ powróci do swojego projektu po kilku miesicach lub przekaza go innemu programi[cie. 66 MACROMEDIA FLASH 8 ACTIONSCRIPT Oficjalny podrcznik W jednej linii kodu umieszczonej wewntrz funkcji mo|esz zadeklarowa wiele zmiennych lokalnych: var firstName:String = "Jobe", lastName:String = "Makar", email:String = "jobe@electrotank.com"; Zwracanie warto[ci przez funkcj Funkcje niekoniecznie musz sBu|y wyBcznie jako zestaw poleceD przeznaczonych do wykona- nia; mo|esz równie| wykorzysta je w charakterze miniprogramów dziaBajcych w obrbie projek- tu, przetwarzajcych wysyBane im informacje i zwracajcych okre[lony rezultat. Przyjrzyjmy si na- stpujcej definicji funkcji: function buyCD(availableFunds:Number, currentDay:String):Boolean { var myVariable:Boolean; if(currentDay != "Sunday" && availableFunds >= 20) { myVariable = true; } else { myVariable = false; } return myVariable; } Podczas wywoBania funkcji wysyBane s do niej dwa parametry  availableFunds oraz current- Day. Funkcja przetwarza warto[ci tych parametrów za pomoc wyra|enia warunkowego if/else. Efektem jego dziaBania jest przypisanie zmiennej myVariable warto[ci true lub false. Gdy sko- rzystamy z wyra|enia return (widocznego na koDcu definicji funkcji), warto[ tej zmiennej zwra- cana jest do skryptu, który wywoBaB funkcj. Spróbujmy przeanalizowa nastpujcy przykBad: var idealCircumstances:Boolean = buyCD(19, "Friday"); if (idealCircumstances == true) { gotoAndPlay("Happiness"); } else { gotoAndPlay("StayHome"); } Szczególn uwag zwró na nastpujc lini kodu: var idealCircumstances:Boolean = buyCD(19, "Friday"); Po prawej stronie znaku = znajduje si faktyczne wywoBanie funkcji, które wysyBa warto[ci 19 oraz "Friday" do funkcji buyCD(). Pamitajc, w jaki sposób zdefiniowana zostaBa funkcja, wiemy, |e zostan one wykorzystane do okre[lenia warto[ci, jak przyjmie zmienna myVariable. Mo|e to by jedna z dwóch warto[ci logicznych: true lub false. WysBanie okre[lonych parametrów (19, "Fri- day") do funkcji spowoduje, |e zmienna myVariable bdzie miaBa warto[ false. Poniewa| ostat- nia linia kodu naszej funkcji zakBada zwrot tej warto[ci za pomoc wyra|enia return myVaria- ble;, jest ona zwracana do skryptu, który wywoBaB funkcj. Otrzymujemy zatem: idealCircumstances = false; W istocie wykorzystali[my odwoBanie do funkcji, aby bByskawicznie ustali warto[ zmiennej ide- alCircumstances. Po okre[leniu tej warto[ci za pomoc zmiennej idealCircumstances mo|e ona by wykorzystana w pozostaBej cz[ci skryptu, co demonstruje przykBadowy skrypt. LEKCJA 2. 67 Funkcje Mo|esz zastosowa polecenie return, aby zwróci dowolny typ danych, wBczajc warto[ci zmien- nych, tablic i innych obiektów. Wiesz ju|, |e funkcje mog zwraca pewne warto[ci. NadszedB zatem odpowiedni moment, aby zwróci uwag na drobn zmian, jakiej poddali[my skBadni definicji naszej funkcji. Pierwsza linia funkcji buyCD() wyglda nastpujco: function buyCD(availableFunds:Number, currentDay:String):Boolean { Midzy nawiasem zamykajcym sekcj parametrów a otwarciem nawiasu klamrowego na koDcu umie[cili[my nastpujce wyra|enie :Boolean. Dodatek ten wskazuje, |e funkcja po wywoBaniu zawsze zwraca pewn warto[. W tym przypadku jest to jedna z warto[ci logicznych true lub false, std powód zastosowania typu :Boolean. Definicja funkcji zwracajcej warto[ numeryczn wy- gldaBaby nastpujco: function myNumberFunction(param1:Number, param2:Boolean):Number { // Akcje } Definicja funkcji, która zwraca warto[ w postaci BaDcucha znaków, wygldaBaby np. tak: function myNumberFunction(param1:Number, param2:Boolean):String { // Akcje } Tak wygldaBaby definicja funkcji, która zwraca warto[ w postaci tablicy: function myNumberFunction(param1:Number, param2:Boolean):Array { // Akcje } itd. Je|eli funkcja nie zwraca |adnej warto[ci (podobnie jak wszystkie funkcje zdefiniowane do tej pory podczas bie|cej lekcji), konstrukcja jej definicji powinna mie nastpujc posta: 68 MACROMEDIA FLASH 8 ACTIONSCRIPT Oficjalny podrcznik function myNumberFunction(param1:Number, param2:Boolean):Void { // Akcje } Wyra|enie :Void oznacza funkcj, która nie zwraca |adnej warto[ci. Cho w funkcjach, którymi posBugiwali[my si w trakcie bie|cej lekcji, nie korzystali[my z takiej konstrukcji definicji (mimo to nadal dziaBaj one poprawnie), zastosowanie podanej skBadni sta- nowi bardzo poprawny nawyk, a co wicej  powinno przyspieszy wykonywanie kodu Action- Script. Wzrost prdko[ci bdzie odczuwalny jedynie w przypadku projektu zawierajcego wiele funkcji. W naszym kolejnym wiczeniu bdziemy korzysta zarówno ze zmiennych lokalnych, jak równie| funkcji, które zwracaj okre[lon warto[. Zaprogramujemy dekoder telewizji kablowej, znajdujcy si pod telewizorem w taki sposób, aby wy[wietlaB nazw bie|cego kanaBu. Utworzymy w tym celu funkcj, która bdzie konstruowa BaDcuch tekstowy przeznaczony do wy[wietlenia na dekoderze. 1. Otwórz plik television3.fla. Projekt ten stanowi kontynuacj naszego poprzedniego wiczenia. Skupimy si tym razem na kopii klipu o nazwie cableBox_mc (przypomina on wygldem dekoder telewizji satelitarnej lub kablowej). Klip ten zawiera proste elementy graficzne oraz pole tekstowe o nazwie cableDisplay_txt. W polu tym wy[wietlane bd nazwy ró|nych programów, w zale|no[ci od tego, który z nich zostanie wybrany za pomoc pilota. 2. Wybierz 1. klatk filmu i, korzystajc z panelu Actions, wprowadz nastpujcy skrypt poni|ej linii numberOfChannels = 6;: var channelNames:Array = ["", "News", "Classics", "Family", "Cartoons", "Horror", "Westerns"]; LEKCJA 2. 69 Funkcje UtworzyBe[ wBa[nie tablic o nazwie channelNames. Zawiera ona nazwy, które bd dynamicznie umieszczane w BaDcuchu tekstowym wy[wietlanym na dekoderze. Siedem BaDcuchów tekstowych, stanowicych elementy tej tablicy, oddzielono przecinkami (pierwszy z nich mo|e wydawa si do[ nieczytelny, poniewa| stanowi po prostu BaDcuch pusty oznaczony w nastpujcy sposób: ""). Ka|dy z tych elementów ma przyporzdkowan pewn liczb, wyznaczajc jego pozycj (index) w tablicy. Pierwszy z nich znajduje si na pozycji 0. PrzykBadowo channelNames[0] = "" (pusty), channelNames[1] = "News", channelNames[2] = "Classics" itd. Zrozumienie tego zagadnienia ma kluczowe znaczenie podczas realizacji dalszej cz[ci wiczenia. Wicej informacji dotyczcych tablic znajdziesz w lekcji 4.,  Tablice i ptle . Utwórzmy funkcj, która wykorzysta elementy tekstowe umieszczone w tej tablicy do wy[wietlania komunikatu na dekoderze TV. 3. Wprowadz kolejny fragment skryptu w 1. klatce filmu, poni|ej ju| istniejcego: function displayCableText():String { var displayText:String; if (currentChannel != 0) { displayText = "You are viewing "+channelNames[currentChannel]+"."; } else { displayText = ""; } return displayText; } Definicja ta mogBaby zosta równie dobrze umieszczona przed, jak i po okre[leniu uchwytów zdarzeD; jej poBo|enie nie ma wikszego znaczenia i stanowi kwesti osobistych nawyków i przyzwyczajeD. Skrypt ten definiuje funkcj displayCableText(), która nie wymaga podania |adnych parametrów. SBu|y ona do dynamicznego zbudowania BaDcucha tekstowego, który pojawi si w polu tekstowym cableDisplay_txt, umieszczonym w kopii klipu o nazwie cableBox_mc. Funkcja ta zwraca zbudowany BaDcuch za pomoc polecenia return. Zawiera ona wyra|enie warunkowe sprawdzajce, czy bie|cy program nie jest przypadkiem oznaczony liczb 0, co oznacza, |e telewizor jest wyBczony. Je[li warunek ten jest speBniony, tworzona jest zmienna lokalna o nazwie displayText, a umieszczany w niej BaDcuch tekstowy budowany jest zarówno z elementu tablicy channelNames, jak i bie|cej warto[ci zmiennej currentChannel. Je[li przykBadowo warto[ tej zmiennej w momencie wywoBania funkcji wynosi 4, konstrukcja BaDcucha wyglda nastpujco: displayText = "You are viewing "+channelNames[4]+"."; Poniewa| na pozycji 4. tablicy channelNames znajduje si BaDcuch tekstowy Cartoons, mo|emy podstawi go do przedstawionego przed chwil wyra|enia: displayText = "You are viewing Cartoons."; Je|eli pierwsza cz[ wyra|enia warunkowego zawartego w funkcji nie jest speBniona (else), zmiennej lokalnej displayText przypisywany jest BaDcuch pusty (""). Funkcja koDczy si 70 MACROMEDIA FLASH 8 ACTIONSCRIPT Oficjalny podrcznik zwróceniem warto[ci zmiennej displayText. Dokd jednak zostanie zwrócona ta warto[? Wyja[nimy to w nastpnym punkcie wiczenia. Poniewa| zmienna displayText zostaBa zadeklarowana jako lokalna (za pomoc sBowa kluczowego var), jest ona usuwana z pamici natychmiast po zwróceniu warto[ci przez funkcj. 4. Korzystajc z panelu Actions, zmodyfikuj funkcj changeTheChannel() przez dodanie nastpujcego kodu poni|ej pitej linii definicji tej funkcji: cableBox_mc.cableDisplay_txt.text = displayCableText(); Zmodyfikowali[my funkcj changeTheChannel() w taki sposób, |e za ka|dym razem przy zmianie kanaBu i wywoBaniu funkcji changeChannel() w polu tekstowym cableDisplay_txt (znajdujcym si wewntrz klipu filmowego cableBox_mc) wy[wietlony zostanie odpowiedni tekst. Dodana linia kodu ActionScript ustala warto[ kopii pola tekstowego cableDisplay_txt (które jest dynamicznym polem tekstowym umieszczonym na naszym dekoderze), korzysta przy tym z warto[ci zwróconej przez funkcj displayCableText(). Funkcja ta zostaje wywoBana, zrealizowana, a efekt jej dziaBania umieszczany jest po znaku równo[ci (=). Takie wBa[nie dziaBanie nosi nazw zwracania warto[ci przez funkcj. Warto[ uzyskana wewntrz funkcji jest zwracana i umieszczana w linii skryptu, który spowodowaB jej wywoBanie. Jest to równie| doskonaBy przykBad tego, w jaki sposób stosowanie funkcji pomaga zaoszczdzi mnóstwo czasu  konstrukcj funkcji changeTheChannel() zmienili[my tylko w jednym miejscu, a mimo to zmiana ta jest widoczna i dostpna przy ka|dym wywoBaniu tej funkcji! 5. Wydaj polecenie Control/Test Movie. WBcz telewizor przyciskiem Power. ZmieD kilkakrotnie wy[wietlany program. Za ka|dym razem gdy wci[niesz przycisk realizujcy zmian kanaBu, pole tekstowe umieszczone na dekoderze TV wy[wietla jego nazw. UtworzyBe[ prost aplikacj wykorzystujc sze[ funkcji realizujcych szereg ró|norodnych zadaD (zobacz rysunek na nastpnej stronie). LEKCJA 2. 71 Funkcje 6. ZakoDcz testowanie filmu i zapisz projekt w pliku television4.fla. ZakoDczyli[my prac nad projektem. Wiedza, któr zdobyBe[, bdzie wielokrotnie wykorzystywana w naszych kolejnych lekcjach. Podsumowanie W czasie tej lekcji: NapisaBe[ funkcje, u|ywajc ró|nych skBadni PrzekazaBe[ funkcjom argumenty w wywoBaniach U|yBe[ zmiennych lokalnych ZwróciBe[ wyniki wywoBania funkcji i wykorzystaBe[ je 72 MACROMEDIA FLASH 8 ACTIONSCRIPT Oficjalny podrcznik

Wyszukiwarka

Podobne podstrony:
Macromedia Flash 8 Professional Oficjalny podrecznik fla8po
Macromedia FreeHand MX Oficjalny podrecznik
Macromedia Flash MX 04?tionScript Oficjalny podrecznik fx24as
Macromedia Flash MX 04 Oficjalny podrecznik flmx24
Macromedia Dreamweaver 8 z ASP, PHP i ColdFusion Oficjalny podrecznik
Macromedia Studio 8 Oficjalny podrecznik stu8op

więcej podobnych podstron