You are on page 1of 27

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Wydawnictwo Helion
ul. Kociuszki 1c
44-100 Gliwice
tel. 032 230 98 63
e-mail: helion@helion.pl

Macromedia Flash 8 ActionScript.


Oficjalny podrcznik
Autorzy: Jobe Makar, Danny Patterson
Tumaczenie: Jakub Thiele-Wieczorek na podstawie
tumaczenia Piotra Cielaka i Marcina Samodulskiego
ISBN: 83-246-0312-3
Tytu oryginau: Macromedia Flash 8
ActionScript: Training from the Source
Format: B5, stron: 488
Poznaj ogromne moliwoci jzyka ActionScript 2.0
ActionScript to obiektowy jzyk programowania zaimplementowany w jednym
z najpopularniejszych narzdzi do tworzenia interaktywnych witryn WWW,
czyli w programie Macromedia Flash. Korzystanie z ActionScriptu pozwala wydoby
z Flasha moliwoci niedostpne z poziomu jego narzdzi graficznych i animacyjnych.
ActionScript daje projektantowi niemal nieograniczon swobod twrcz. Za pomoc
odpowiednio skonstruowanych skryptw mona tworzy zarwno proste przyciski
i animacje, jak i zoone mechanizmy pobierania danych z zewntrznych rde,
dynamicznego generowania grafiki i dokumentw oraz sterowania animacj
w zalenoci od dziaa uytkownika.
Ksika Macromedia Flash 8 ActionScript. Oficjalny podrcznik, przygotowana
we wsppracy z producentem Flasha firm Macromedia, umoliwi Ci odkrycie
niesamowitych moliwoci jzyka ActionScript. Wykonujc przedstawione w niej
wiczenia i projekty, poznasz skadni tego jzyka i zasady programowania
obiektowego. Dowiesz si, jak za pomoc skryptw kontrolowa odtwarzanie animacji
i zachowanie obiektw na scenie oraz nauczysz si korzysta w animacjach
z elementw pobieranych z plikw i baz danych. Przeczytasz o przetwarzaniu plikw
XML, weryfikowaniu danych wprowadzanych przez uytkownika oraz odtwarzaniu
plikw multimedialnych za pomoc Flasha.
Elementy panelu Actions
Skadnia jzyka ActionScript
Funkcje i instrukcje warunkowe
Klasy obiektw
Obsuga zdarze
Korzystanie z plikw graficznych i cyfrowego wideo
Tworzenie komponentw
Odczyt danych z plikw zewntrznych
Drukowanie z poziomu prezentacji
Optymalizacja plikw SWF

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, ktre zwracaj okrelon warto ..................................................................... 65

Lekcja 3. Korzystanie z instrukcji warunkowych ............................................................................................................ 73


Kontrolowanie przebiegu skryptw .......................................................................................................................74
Reakcja na rne warunki ........................................................................................................................................80
Reakcja na dziaania uytkownika ..........................................................................................................................82
Wykrywanie krawdzi sceny .................................................................................................................................... 83

Lekcja 4. Tablice i ptle .............................................................................................................................................................. 87


Dlaczego ptle s uyteczne? ....................................................................................................................................88
Typy ptli ....................................................................................................................................................................89
Wyjtki w ptlach ......................................................................................................................................................92
Aplikacja wyszukujca .............................................................................................................................................. 93
Pisanie i rozumienie warunkw ptli ..................................................................................................................... 95
Ptle zagniedone ....................................................................................................................................................98

Lekcja 5. Posugiwanie si klasami obiektw ................................................................................................................ 103


Czym s obiekty i dlaczego s przydatne? ............................................................................................................ 104
Zastosowanie klasy Color .......................................................................................................................................119
Klasy String i Selection ........................................................................................................................................... 123

Lekcja 6. Tworzenie wasnych klas obiektw ................................................................................................................ 131


Klasy, klasy wierzchokowe i kopie obiektw ...................................................................................................... 132
Tworzenie klasy ....................................................................................................................................................... 134
cieka dostpu do definicji klas ........................................................................................................................... 137
Pakiety i importowanie klas ................................................................................................................................... 139
Odczytywanie i zapisywanie waciwoci klasy ................................................................................................... 144
Definiowanie skadowych klasy ............................................................................................................................ 147
Dziedziczenie ............................................................................................................................................................151
Modyfikacja projektu wykorzystujcego dziedziczenie ......................................................................................161

Lekcja 7. Zdarzenia, obiekty typu listener i odwoania ........................................................................................... 167


Do czego su uchwyty zdarze? ......................................................................................................................... 168
Typy zdarze w programie Flash .......................................................................................................................... 169
Procedury obsugujce zdarzenia .......................................................................................................................... 169
Tworzenie projektu wykorzystujcego procedury obsugujce zdarzenia ....................................................... 172
Obiekty typu listener .............................................................................................................................................. 175
Tworzenie projektu wykorzystujcego obiekty typu listener ............................................................................ 176

Lekcja 8. Dynamiczne tworzenie zasobw ..................................................................................................................... 181


Dodawanie klipw filmowych .............................................................................................................................. 182
Dodawanie pustych klipw filmowych ................................................................................................................ 186
Rysowanie za pomoc kodu .................................................................................................................................. 187
Wykorzystywanie klipw filmowych jako przyciskw ...................................................................................... 190
Dodawanie pl tekstowych za pomoc kodu ...................................................................................................... 192
Formatowanie tekstu .............................................................................................................................................. 194

Lekcja 9. Wykorzystywanie grafiki rastrowej ................................................................................................................. 197


Buforowanie powierzchni bitmapowych ............................................................................................................. 198
Wykorzystywanie filtrw ........................................................................................................................................203
Tryby przenikania ....................................................................................................................................................211
Wprowadzenie do Bitmap API .............................................................................................................................. 214

Lekcja 10. Tworzenie komponentw interfejsu uytkownika ............................................................................... 223


Komponenty: elementarz pisania skryptw ........................................................................................................225
Konfiguracja waciwoci komponentw ............................................................................................................226
Wyzwalanie skryptw przy uyciu zdarze komponentw .............................................................................. 233
Korzystanie z metod komponentw ....................................................................................................................239
Korzystanie z komponentu FocusManager ........................................................................................................248
Stylizacja komponentw interfejsu uytkownika z wykorzystaniem jzyka ActionScript ...........................252

MACROMEDIA FLASH 8 ACTIONSCRIPT


Oficjalny podrcznik

Lekcja 11. Zaawansowane programowanie obiektowe ........................................................................................... 257


Usuwanie bdw zakresu za pomoc delegacji ..................................................................................................258
Enkapsulacja ............................................................................................................................................................262
Wykorzystywanie kompozycji ............................................................................................................................... 263
czenie kompozycji i dziedziczenia ................................................................................................................... 265
Wyzwalanie zdarze ................................................................................................................................................268

Lekcja 12. Walidacja danych ................................................................................................................................................ 275


Proces walidacji danych ..........................................................................................................................................276
Korzystanie z procedur walidacyjnych .................................................................................................................277
Obsuga bdw .......................................................................................................................................................280
Walidacja cigw znakw .......................................................................................................................................282
Walidacja sekwencji ................................................................................................................................................287
Walidacja z wykorzystaniem listy moliwych wartoci ...................................................................................... 291
Walidacja liczb .........................................................................................................................................................294
Przetwarzanie danych po procesie walidacji ........................................................................................................296

Lekcja 13. Poczenia z zewntrznymi rdami danych ........................................................................................ 299


rda i formaty danych ........................................................................................................................................300
Instrukcje GET i POST ........................................................................................................................................... 303
Korzystanie z klasy LoadVars ................................................................................................................................304
Pliki regu ..................................................................................................................................................................313
Korzystanie z obiektw 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 serwerw gniazd ..............................................................................................................................349

Lekcja 15. Interfejs zewntrzny ............................................................................................................................................ 367


Klasa ExternalInterface .......................................................................................................................................... 368
Konfiguracja jzyka HTML dla potrzeb prostych wywoa klasy ExternalInterface .................................... 369
Wywoywanie funkcji jzyka JavaScript w ActionScripcie ................................................................................ 369
Korzystanie z moliwoci jzyka JavaScript w programie Flash .......................................................................370
Wywoywanie funkcji jzyka ActionScript w JavaScripcie ................................................................................ 373
Aplikacja-quiz ..........................................................................................................................................................374

SPIS TRECI

Lekcja 16. Korzystanie z dwiku i filmw .................................................................................................................... 381


Sterowanie odtwarzaniem dwikw za pomoc ActionScriptu ...................................................................... 383
Tworzenie kopii klasy Sound ................................................................................................................................ 383
Przeciganie klipu filmowego na okrelonym obszarze .................................................................................... 386
Sterowanie gonoci .............................................................................................................................................390
Sterowanie balansem ...............................................................................................................................................397
Doczanie dwikw i sterowanie ich odtwarzaniem .......................................................................................402
Wczytywanie i kontrolowanie odtwarzania zewntrznych plikw wideo .......................................................407

Lekcja 17. Drukowanie i tworzenie podrcznych menu .......................................................................................... 417


Rnice midzy drukowaniem z poziomu Flasha a przegldarki .................................................................... 418
Korzystanie z klasy PrintJob ..................................................................................................................................420
Tworzenie wasnych menu podrcznych .............................................................................................................429

Lekcja 18. SWF o maksymalnych moliwociach ........................................................................................................ 437


Polecenie fscommand() ..........................................................................................................................................438
Korzystanie z programu Zinc ................................................................................................................................444
Uycie mechanizmu przekazywania parametrw FlashVars do filmu ............................................................458

Skorowidz ....................................................................................................................................................................................... 467

MACROMEDIA FLASH 8 ACTIONSCRIPT


Oficjalny podrcznik

Podczas programowania niekiedy spotykasz si z koniecznoci wprowadzenia wielokrotnie powtarzajcych si czci kodu wwczas moesz uproci sobie zadanie, kopiujc je i wklejajc lub
przepisujc te same linie w edytorze ActionScript. Jest jednak sposb na to, by powtarzajce si
fragmenty napisa tylko raz, a przy najbliszych okazjach zastpowa je pojedynczym poleceniem.
Sposb ten polega na tworzeniu funkcji, za wykonanie funkcji nosi nazw wywoania funkcji lub po
prostu wywoania. Uycie funkcji oszczdza mnstwo czasu zarwno podczas pisania, jak i modyfikowania aplikacji. Zmniejszaj one dugo kodu niezbdnego do jej dziaania, poprawiajc
przejrzysto i przyspieszajc ewentualne zmiany.
W czasie tej lekcji
wykonamy wiczenie
polegajce
na zaprojektowaniu
prostej aplikacji
naladujcej wirtualny
odbiornik TV.
Za pomoc funkcji
zrealizujemy przeczanie
programw oraz
wczanie i wyczanie
odbiornika Flash-TV

Potraktuj funkcje jako miniprogramy, ktre speniaj okrelon rol wewntrz wikszej aplikacji.
Moesz wykorzysta je do wykonania zestawu okrelonych polece, przetworzenia przekazanych
im danych i zwrcenia rezultatu lub obu tych dziaa jednoczenie. Funkcje stanowi bardzo elastyczn i wygodn technik programowania.
Podczas tej lekcji wykonamy jedno wiczenie, w ktrym nauczysz si, w jaki sposb tworzy funkcje
i z nich korzysta.

Czego si nauczysz?
W czasie tej lekcji:
Utworzysz funkcj
Odwoasz si do niej
Zaprojektujesz funkcj korzystajc z parametrw
Napiszesz funkcj zwracajc okrelony rezultat
Skorzystasz ze zmiennych lokalnych

Czas trwania
Lekcja zajmie Ci okoo ptorej godziny.

Materiay 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. Mona tego dokona,
posugujc si jedn z dwch dostpnych konstrukcji.

Konstrukcja 1.
Poniszy kod przedstawia pierwsz:
function myFunction (parameter1:DataType,parameter2:DataType,etc.) {
// W tym miejscu znajduj si akcje;
}

Skrypt ten odzwierciedla najpopularniejszy sposb tworzenia funkcji, jest to rwnie metoda, ktr
bdziemy posugiwa si najczciej w trakcie biecej lekcji. Jak wida, deklaracja funkcji rozpoczyna si od sowa kluczowego function, za ktrym nastpuje nazwa funkcji (dowolna wybrana
52

MACROMEDIA FLASH 8 ACTIONSCRIPT


Oficjalny podrcznik

przez Ciebie, lecz zgodna z oglnymi zasadami nazewnictwa obowizujcymi we Flashu). Cz


definicji znajdujca si za nazw zostaa ujta w nawiasy. Moesz pozostawi j pust lub wypeni
odpowiednimi wyraeniami (bd to parametry), ktre funkcja bdzie wykorzystywa do swojego
dziaania. Pozostawiajc puste nawiasy, tworzysz tzw. funkcj ogln czyli tak, ktra jest
wykonywana zawsze w ten sam sposb, niezalenie od tego, kiedy zostanie wywoana (czyli uruchomiona). Jeli Twoja funkcja przyjmuje parametry, bdzie wykonana w inny sposb za kadym
jej wywoaniem; sposb ten bdzie zalea od wartoci i rodzaju parametrw, ktre jej wylemy.
Takie wysyanie informacji do funkcji nosi nazw przekazywania argumentw lub przekazywania parametrw. Moesz wykorzysta dowoln liczb parametrw. W dalszej czci lekcji napiszemy, w jaki
sposb korzysta z danych przekazywanych przez parametry.
Za opcjonalnym elementem deklaracji funkcji, jakim s parametry, nastpuje otwarcie nawiasu
klamrowego oraz powrt karetki (przejcie do nowego wiersza). Jest to miejsce przeznaczone na
wszelkie polecenia i dziaania, ktre ma podj funkcja podczas wywoania. Polecenia te mog wykorzysta dowolny z parametrw przekazany do funkcji (o czym wkrtce si przekonasz).

Konstrukcja 2.
Poniszy fragment skryptu stanowi odzwierciedlenie drugiej konstrukcji przeznaczonej do tworzenia funkcji.
myFunction = function (parameter1:DataType,parameter2:DataType,etc.)
{/* W tym miejscu znajduj si akcje */
};

Konstrukcji tej mona uy do dynamicznego tworzenia funkcji lub podczas definiowania wasnej
metody (zagadnienie to poruszymy podczas lekcji 6., Tworzenie wasnych klas obiektw). Jedyna
rnica, jaka dzieli obydwie przedstawione skadnie, polega na sposobie nadania funkcji nazwy:
w tym wypadku nazwa ta umieszczona jest na pocztku konstrukcji, za midzy ni a definicj
dziaania i operatorami funkcji znajduje si znak przypisania (=).
Po zapoznaniu si z podstawami tworzenia czy te definiowania funkcji przyjrzyjmy si sposobowi
ich wykorzystania lub, mwic inaczej, wywoywania.
Jeli definicja funkcji nie zawiera adnych parametrw, moe ona zosta wywoana przez zastosowanie nastpujcej konstrukcji:
myFunction();

Wywoujc okrelon funkcj, tym samym przekazujesz do Flasha instrukcj wykonania polece
w niej zawartych. Jeli funkcja myFunction() skadaaby si z 20 polece, wszystkie one zostayby
wykonane dziki tej pojedynczej linii skryptu.
Jeeli definicja funkcji obejmuje rwnie przyjmowanie parametrw dziaania, do jej wywoania
moesz wykorzysta nastpujc konstrukcj:
myFunction(parameter1, parameter2);

Jeli parametr parameter1 miaby warto w postaci sowa cat, za parametrem parameter2 byaby
liczba 36, to te dwie wartoci zostayby przekazane do funkcji i mogyby zosta wykorzystane wewntrz
LEKCJA 2.
Funkcje

53

niej do przeprowadzenia zdefiniowanych wczeniej operacji i dziaa. W innym miejscu skryptu ta


sama funkcja mogaby zosta wywoana z zupenie innymi parametrami. Sprawioby to, e ta sama
funkcja zadziaaaby nieco inaczej, gdy polecenia zawarte w ciele funkcji przy zmienionych parametrach dayby odmienny wynik.
W kolejnych przykadach poczynilimy zaoenie, e zarwno funkcja, jak i odwoania do niej
znajduj si na tej samej listwie czasowej. Wiesz ju, e kada listwa czasowa moe zawiera wasne
obiekty i zmienne; dokadnie to samo tyczy si funkcji, ktre zostay w niej zdefiniowane. Kiedy
wywoujesz funkcj znajdujc si na okrelonej listwie czasowej, musisz wskaza jej pooenie,
poprzedzajc nazw funkcji ciek dostpu do tej listwy. Moe to wyglda np. tak:
_root.clip1.clip2.myFunction();

W wiczeniu tym zaprojektujemy przycisk, speniajcy rol wcznika na pilocie zdalnego sterowania telewizora. Za pomoc tego przycisku nasz odbiornik Flash TV bdzie mona wcza lub
wycza. Podczas pisania skryptw skorzystamy z moliwoci oferowanych przez funkcje.
Funkcja moe by wywoana dynamicznie w oparciu o podan warto, np. _root[aVariable
Name]();. W takiej konstrukcji, jeli aVariableName miaaby warto "sayHello", wynikowe
odwoanie do funkcji przybraoby posta _root.sayHello();.
1. Otwrz plik television1.fla znajdujcy si w folderze Lekcja02/Starts.

Struktura filmu zostaa ju przygotowana. Cay 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 skada 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 (ktry zamaskowany
jest przez warstw umieszczon na samej grze). Kopia klipu screen_mc skada si z dwch warstw
i dwch klatek, a zawiera grafik naladujc programy przeczane za pomoc pilota TV.

Warstwa Remote skadajca si na gwn listw czasow zawiera kopi klipu filmowego
o nazwie remote_mc. Wewntrz tego klipu znajdziesz warstw, w ktrej umieszczono wikszo
54

MACROMEDIA FLASH 8 ACTIONSCRIPT


Oficjalny podrcznik

elementw graficznych przedstawiajcych pilota, wczajc w to kopi klipu o nazwie light_mc


oraz kolejn warstw, na ktrej 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
przyciskw 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 gwnej listwie czasowej. Korzystajc z panelu Actions,

wprowad 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, ktra posuy
do ledzenia biecego stanu odbiornika TV. Jeli bdzie ona miaa warto true, to znaczy,
e telewizor jest wczony, warto false oznacza wyczenie odbiornika. Poniewa po
uruchomieniu filmu telewizor jest wyczony, zmiennej tvPower nadawana jest warto false.
Kolejnych 11 linii kodu zawiera definicj funkcji togglePower(). Funkcja ta po wywoaniu
spowoduje wczenie lub wyczenie telewizora. Do dziaania funkcji nie s wymagane adne
parametry. Poniewa skrypt ten znajduje si w 1. klatce filmu, funkcja togglePower() oraz
zmienna tvPower z nadan wartoci false s deklarowane natychmiast po wczytaniu tej
klatki, czyli rozpoczciu odtwarzania filmu.
Poniewa funkcje musz by zdefiniowane, zanim nastpi ich pierwsze wywoanie, standardow
praktyk jest definiowanie ich w pierwszych klatkach filmu, dziki czemu mog one zosta wywoane
w dowolnym, pniejszym momencie.
Pierwsza cz funkcji zawiera wyraenie warunkowe if, analizujce biec warto zmiennej
tvPower. Jeli zmienna ta przechowuje warto true (TV jest wczony), to po wywoaniu funkcji
zostaje ona zmieniona na false (wyczenie TV), za zmiennej newChannel przechowujcej
numer biecego kanau zostaje nadana warto 0. Jeeli zmienna tvPower ma warto false,
to (kod za wyraeniem else) zostaje ona zmieniona na true, za zmiennej newChannel
przypisywana jest warto 1. Stosujc wyraenie if w taki wanie sposb, osigamy efekt
zmiany wartoci zmiennej tvPower na przeciwn, za kadym razem gdy wywoana jest funkcja
togglePower(). Jednoczenie nastpuje rwnie zmiana wartoci zmiennej newChannel.
Po zakoczeniu dziaania skryptu zmienna ta przyjmuje warto 0 lub 1.

LEKCJA 2.
Funkcje

55

W tej lekcji wykorzystamy kilkakrotnie instrukcje if. Jednak ich dokadny opis znajdziesz dopiero
w lekcji 4., "Tablice i ptle". W tej chwili wystarczy, e bdziesz wiedzia, i s one uywane do
sprawdzania, czy zosta speniony okrelony warunek. Jeli tak, wykonywany jest dodatkowy kod.
Po zakoczeniu opisanych powyej dziaa funkcja powoduje odtworzenie odpowiedniej
klatki kopii klipu filmowego screen_mc, ktry znajduje si wewntrz klipu tv_mc. Numer tej
klatki uzyskany jest przez zwikszenie wartoci zmiennej newChannel o 1. Zabieg ten jest
konieczny, poniewa zapobiega odtworzeniu klatki o numerze 0 (mogoby si tak zdarzy,
poniewa zmienna newChannel przyjmuje niekiedy warto 0, a klatki o takim numerze nie
zawiera adna listwa czasowa Flasha). Podsumowujc dziaanie omawianej czci funkcji,
stwierdzamy, e powoduje ona odtworzenie klatki 1. (pusty ekran TV) lub 2. (program 1.)
kopii klipu filmowego screen_mc.
Funkcja koczy dziaanie na przekazaniu polecenia odtwarzania klipowi przedstawiajcemu
nadajnik zdalnego sterowania. Powoduje to bynicie diody umieszczonej na pilocie,
co stanowi potwierdzenie wcinicia przycisku.
Dysponujemy zatem funkcj zdefiniowan w 1. klatce gwnej listwy czasowej filmu. Cho
funkcja ta skada si z kilku polece, adne z nich nie jest wykonywane a do momentu jej
wywoania.
3. Korzystajc z panelu Actions, dodaj kolejny fragment skryptu poniej 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 jednoczenie znajduje si rwnie w klipie remote_mc z pilotem). Linia kodu, ktr
przed chwil wpisae, przypisuje uchwyt zdarzenia onRelease do przycisku Power. Po zajciu
tego zdarzenia wywoywana jest nasza funkcja togglePower. Dzieje si tak za kadym
wciniciem i zwolnieniem tego przycisku, co powoduje wykonanie polece zawartych w funkcji.
4. Wydaj polecenie Control/Test Movie. Kliknij kilkukrotnie przycisk Power, aby przekona si,

e wczanie i wyczanie wirtualnego telewizora dziaa bez zarzutu.


Za kadym razem gdy wciskasz przycisk Power, wywoywana jest funkcja togglePower(),
a wraz z ni wykonywane s wszystkie polecenia w niej zawarte. Zgodnie z tym, co mwilimy
przed chwil, powoduj one naprzemienne wczanie i wyczanie TV.
5. Zakocz testowanie filmu i zapisz projekt w pliku o nazwie television2.fla.

Wanie utworzye i zastosowae swoj pierwsz funkcj! W nastpnej czci lekcji rozbudujemy
nieco projekt, aby zaprezentowa dziaanie bardziej rozbudowanej i elastycznej funkcji.

Funkcje z parametrami
W naszym poprzednim wiczeniu nauczye si, w jaki sposb zdefiniowa funkcj i wywoa j.
W wiczeniu, ktre za chwil rozpoczniemy, funkcj t wzbogacimy w moliwo wykorzystania
parametrw, przedstawimy te opis ich zastosowania. Oto konstrukcja pozwalajca na zdefiniowanie funkcji, do ktrej mona przekaza parametry:
function convertToMoonWeight (myWeight:Number) {
var weightOnMoon:Number = myWeight/6.04;
}

Jedyny parametr funkcji zdefiniowanej w tym skrypcie nosi nazw myWeight. Warto tego parametru wykorzystana jest take wewntrz definicji funkcji (pod koniec drugiej linii kodu), zupenie
jakby bya to zdefiniowana wczeniej zmienna. Zauwa, e definicja funkcji z parametrami powinna zawiera deklaracje typw tych parametrw. W tym przypadku parametr o nazwie myWeight
jest wartoci numeryczn.
Oto przykad wywoania zdefiniowanej w ten sposb funkcji:
convertToMoonWeight(165);

Jak widzisz, do wywoania funkcji dodalimy warto numeryczn w postaci liczby 165. Warto ta
wysyana jest do wywoywanej funkcji, dziki czemu moe ona zosta wykorzystana do oblicze
zdefiniowanych wewntrz tej funkcji. W zaprezentowanym tutaj przykadzie warto 165 umieszczona w wywoaniu funkcji przypisywana jest do parametru myWeight w definicji funkcji. Rezultat wyglda nastpujco:
function convertToMoonWeight (165) {
var weightOnMoon:Number = 165/6.04;
}

LEKCJA 2.
Funkcje

57

W taki oto sposb w naszym przykadzie wysanie wartoci 165 do funkcji convertToMoonWeight() spowoduje obliczenie wyniku zmiennej weightOnMoon, ktrej warto wyniosaby 165/6.04,
czyli 27.32.
Parametr myWeight zastpowany jest wartoci przekazywan w odwoaniu do funkcji. Najwiksza
zaleta tego mechanizmu polega na moliwoci wysania za kadym razem innej wartoci podczas
wywoania tej samej funkcji. Dziki temu zmienna weightOnMoon obliczona na podstawie przekazanej liczby rwnie bdzie miaa inn warto. Przyjrzyjmy si rnym odwoaniom do funkcji
convertToMoonWeight():
convertToMoonWeight(190);
convertToMoonWeight(32);
convertToMoonWeight(230);

Kade z tych odwoa dotyczy tej samej funkcji, jednak ze wzgldu na to, e przekazywany do niej
parametr ma za kadym razem inn warto, take i efekt jej dziaania bdzie rny (mwic innymi sowy, inny bdzie przechowywany w zmiennej weightOnMoon rezultat oblicze zdefiniowanych wewntrz funkcji).
Parametry okrelone w definicji funkcji istniej jedynie w jej obrbie. W naszym przykadzie parametrem takim jest warto myWeight, ktra nie jest dostpna poza sam funkcj.
Wysyajc do funkcji okrelone wartoci parametrw, moesz skonstruowa wywoanie zawierajce
nazw zmiennej, np.:
convertToMoonWeight(myVariable);

W takim wypadku do funkcji zostanie wysana warto zmiennej myVariable.


Definicje funkcji mog te obejmowa kilka parametrw, np.:
function openWindow(url:String, window:String) {
getURL(url, window);
}

Podana definicja funkcji zawiera dwa parametry, url oraz window, oddzielone przecinkiem. Funkcja ta skada si z jednego polecenia, getURL(), ktre wykorzystuje oba przekazane do funkcji parametry. Odwoanie do tej funkcji mogoby wyglda np. tak:
openWindow("http://www.yahoo.com", "_blank");

Odwoanie to wysya do funkcji dwie wartoci, oddzielone przecinkiem; jest to adres URL oraz sposb otwarcia strony definiowany przez atrybut target. Wartoci te wykorzystane zostan przez funkcj
do zrealizowania okrelonego zadania, w tym przypadku bdzie to otwarcie witryny yahoo.com w nowym oknie przegldarki.
Deklarujc wiele parametrw w definicji funkcji, naley zapamita kolejno, w jakiej zostay podane.
Wartoci umieszczone w wywoaniu musz by bowiem uoone w tej samej kolejnoci, w jakiej
zdefiniowano odpowiadajce im parametry.

58

MACROMEDIA FLASH 8 ACTIONSCRIPT


Oficjalny podrcznik

Przykadowo ponisze odwoanie do zaprezentowanej wczeniej funkcji openWindow() nie zadziaa,


poniewa definicja funkcji zakada podanie najpierw adresu URL, a dopiero potem sposobu otwarcia
strony:
openWindow("_blank", "http://www.yahoo.com");

Po wywoaniu funkcji tworzona jest pomocnicza, tymczasowa tablica o nazwie arguments. Tablica ta zawiera wszystkie parametry przekazane do funkcji nawet wtedy, jeli definicja funkcji nie
zawiera adnych parametrw. Oto przykad ilustrujcy sposb, w jaki mona 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 przykadowego skryptu w oknie output Flasha wywietlone zostan nastpujce informacje:
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, ktre mog przystosowywa si do


zmiennej iloci parametrw. Wicej informacji na temat tablic znajdziesz w lekcji 4., Tablice i ptle.
W wiczeniu, ktre za chwil rozpoczniemy, rozbudujemy nieco nasz poprzedni projekt, dodajc
funkcje do przyciskw numerycznych oraz przyciskw zmiany kanaw Up oraz Down umieszczonych na pilocie telewizora. Korzystajc z tych przyciskw, bdziemy mogli zmieni wywietlany
kana telewizyjny. Dziaanie przyciskw numerycznych oprzemy si na funkcji, ktrej przekazywa
bdziemy parametr w postaci numeru danego kanau. Nieznacznym zmianom poddamy rwnie funkcj togglePower().
1. Otwrz plik television2.fla.

W wiczeniu tym wykorzystamy plik, ktry zapisae na kocu 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 wyczony (klatka 1.) oraz sze kolejnych kanaw telewizyjnych,
ktre mona bdzie wczy za pomoc pilota.

LEKCJA 2.
Funkcje

59

2. Wybierz 1. klatk na warstwie Actions gwnej listwy czasowej i otwrz panel Actions.
Poniej linii var tvPower:Boolean = false; dodaj nastpujcy fragment skryptu:
var currentChannel:Number;

W wiczeniu tym zajmiemy si przygotowaniem funkcji zmieniajcej kana wywietlany w TV.


Zaprogramujemy te zmian kanau za pomoc przyciskw Up nastpny oraz Down
poprzedni. W tym celu musimy dysponowa informacj o biecym kanale wywietlanym
w TV. Przedstawiona linia skryptu deklaruje now zmienn o nazwie currentChannel,
ktra bdzie suya do przechowywania numeru biecego, wywietlanego kanau.
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

Zdefiniowae wanie funkcj z parametrem. Funkcja ta powoduje zmian biecego kanau TV


na podstawie wartoci przekazanego do niej parametru (newChannel). Wszystkie polecenia
realizowane przez funkcj znajduj si wewntrz wyraenia warunkowego if, ktre pozwala
na zmian kanaw wycznie wtedy, gdy zmienna tvPower ma warto true. Kolejne
polecenie przypisuje zmiennej przechowujcej biecy numer kanau warto parametru,
ktry przekazae do funkcji.
Kolejne dwie linie skryptu powinny wyglda znajomo: omawialimy je w poprzednim
wiczeniu przy okazji definiowania funkcji togglePower(). Powoduj one odtworzenie
odpowiedniej klatki klipu screen_mc (a co za tym idzie, zmian kanau TV) oraz bynicie
diody kontrolnej na pilocie. Rozwamy nastpujcy przykad, ktry pomoe w zrozumieniu
dziaania omawianej funkcji. Zamy, e wykonane zostao nastpujce odwoanie:
changeTheChannel(4);

Na pocztku funkcja sprawdzi, czy zmiennej tvPower przypisano warto true (TV jest
wczony). Jeli 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 rwnym tej wartoci, zwikszonej o 1 (czyli 4 + 1). W omawianym
przypadku bdzie to zatem klatka 5.
Twoja nowa funkcja jest gotowa do wykorzystania. Dodajmy jeszcze uchwyty zdarze
onRelease do kadego z przyciskw numerycznych pilota, pozwol one wywoywa funkcj
changeTheChannel().
4. Dodaj nastpujcy skrypt poniej ju wprowadzonego w 1. klatce gwnej listwy czasowej:
remote_mc.channel1_btn.onRelease
changeTheChannel(1);
};
remote_mc.channel2_btn.onRelease
changeTheChannel(2);
};
remote_mc.channel3_btn.onRelease
changeTheChannel(3);
};
remote_mc.channel4_btn.onRelease
changeTheChannel(4);
};
remote_mc.channel5_btn.onRelease
changeTheChannel(5);
};
remote_mc.channel6_btn.onRelease
changeTheChannel(6);
};

= function() {
= function() {
= function() {
= function() {
= function() {
= function() {

Do kadego z przyciskw numerycznych na pilocie dodany zosta w ten sposb


uchwyt zdarzenia (przypominamy, e kopia klipu remote_mc zawiera sze przyciskw
o nazwach od channel1_btn do channel6_btn nazwy te stanowi podstaw dla zastosowanej
konstrukcji). Gdy jeden z tych przyciskw zostanie wcinity, nastpi odwoanie do funkcji
changeTheChannel() i przekazanie jej numeru kanau. W ten sposb moemy wykorzysta
t sam funkcj w odniesieniu do kilku rnych przyciskw i uzyska rezultat zaleny
od przekazanego jej parametru.

LEKCJA 2.
Funkcje

61

Funkcje zdefiniowane za pomoc operatora przypisania (=) traktowane s jak polecenia. Wszystkie
polecenia powinny by zakoczone rednikami. Dlatego te kada przedstawiona tutaj definicja funkcji
zakoczona jest rednikiem, cho standardowa konstrukcja definicji nie wymaga takiego zakoczenia.
5. Wydaj polecenie Control/Test Movie. Wcinij przycisk Power na pilocie, aby wczy telewizor,

a nastpnie skorzystaj z przyciskw oznaczonych cyframi do przeczania programw TV.


Jeeli prbowae wcisn dowolny przycisk z numerem programu, zanim wczye odbiornik,
funkcja changeTheChannel() nie wykonaa danej zmiany. Dopiero po wczeniu
telewizora i wciniciu jednego z przyciskw kanaw liczba, ktr oznaczony jest przycisk,
przekazywana jest w charakterze parametru do funkcji changeTheChannel() i odtwarzanie
kopii klipu screen_mc zostaje przeniesione do odpowiedniej klatki (kanau).
6. Zakocz testowanie pliku i powr do rodowiska edycji projektu. Zaznacz 1. klatk warstwy

Actions gwnej listwy czasowej.


W klatce tej znajduj si teraz dwie definicje funkcji, jedna powodujca wczenie i wyczenie
TV, druga za pozwalajca na zmian programw za pomoc przyciskw numerycznych na
pilocie telewizora. Przygldajc si konstrukcji obu funkcji, moemy jednak zauway pewne
nadmiarowe, powtarzajce si elementy. Obydwie zawieraj polecenia powodujce byskanie
lampki kontrolnej pilota, obie te powoduj odtworzenie wskazanej klatki klipu screen_mc.
Takie powtarzajce si fragmenty najlepiej eliminowa zawsze, gdy to tylko moliwe,
zajmiemy si wic teraz poprawieniem tego problemu.

62

MACROMEDIA FLASH 8 ACTIONSCRIPT


Oficjalny podrcznik

7. Korzystajc z panelu Actions, zmie funkcj togglePower() w nastpujcy sposb:


function togglePower() {
if (tvPower) {
changeTheChannel(0);
tvPower = false;
} else {
tvPower = true;
changeTheChannel(1);
}
}

Funkcja togglePower() wykorzystuje teraz odwoanie do funkcji changeTheChannel(), aby


zmieni biecy program, gdy telewizor jest wczany lub wyczany. Przy wczeniu, podczas
odwoania do funkcji changeTheChannel(), przekazywana jest warto 1. Oznacza to, e za
kadym razem gdy telewizor bdzie wczany, automatycznie wywietlany bdzie program 1.
Po wyczeniu telewizora wywietlany bdzie kana 0 (czyli pusty ekran). Stanowi to prosty
przykad ilustrujcy moliwo wywoania funkcji z poziomu innej funkcji.
Przyjrzyj si pierwszej czci wyraenia if w punkcie 7. wiczenia i zwr uwag, e odwoanie do
funkcji changeTheChannel() ma miejsce, zanim jeszcze zmiennej tvPower przypisana zostanie warto false. Kolejno taka spowodowana jest konstrukcj funkcji changeTheChannel(), ktra wykonana zostanie jedynie wwczas, gdy zmienna tvPower ma warto true (a niewtpliwie ma tak
warto, poniewa jest ona sprawdzana przez wyraenie if). Jeeli przypisalibymy zmiennej tvPower warto false, zanim nastpioby wywoanie changeTheChannel(0), funkcja ta nie wykonywaaby po prostu adnej czynnoci. Druga cz wyraenia warunkowego znajdujca si po sowie else dziaa dokadnie odwrotnie: najpierw zmiennej tvPower nadawana jest warto true,
dopiero potem za nastpuje wywoanie funkcji. Ponownie dzieje si tak ze wzgldu na konstrukcj
funkcji changeTheChannel().
Napiszmy teraz funkcje, ktre pozwol wybra kolejny i poprzedni program TV za pomoc
przyciskw Up oraz Down na pilocie.
8. Wybierz 1. klatk warstwy Actions na gwnej listwie czasowej i otwrz panel Actions.
Wprowad podany niej 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), ktra suy bdzie do zmiany
programu TV na kolejny. Pamitajc, e klip screen_mc zawiera graficzne odpowiedniki szeciu
programw, nadajemy utworzonej zmiennej warto 6, ktra odzwierciedla ich liczb.
Zmienna numberOfChannels bdzie zapobiega zwikszeniu numeru programu na wikszy
ni szsty. Przyjrzyjmy si, jak dziaa to w praktyce.
9. Dodaj nastpujcy fragment skryptu poniej ju istniejcego:
function channelUp() {
if (currentChannel+1<=numberOfChannels) {
changeTheChannel(currentChannel+1);
}
}
LEKCJA 2.
Funkcje

63

Funkcja ta nie wymaga parametrw, za jej zadaniem jest zwikszanie numeru programu o 1,
zawsze wtedy, gdy zostanie ona wywoana. Jednak funkcja zawiera pewien mechanizm
bezpieczestwa, zapobiegajcy przekroczeniu dostpnej liczby kanaw (w tym wypadku
programu 6.). Przypominamy, e warto zmiennej o nazwie currentChannel zmieniana jest,
za kadym razem gdy wywoana jest funkcja changeTheChannel() (patrz punkt 3. wiczenia).
Warto tej zmiennej odzwierciedla biecy numer programu minus 1. A zatem, jeli
wywietlany jest akurat program 4., warto ta bdzie wynosi 3. Zanim jednak wykonana
zostanie funkcja channelUp(), uruchamiane jest wyraenie warunkowe if sprawdzajce,
czy zwikszenie biecego numeru programu o 1 (warto zmiennej currentChannel + 1)
nadal bdzie mniejsza lub co najwyej rwna dostpnej liczbie kanaw (warto zmiennej
numberOfChannels czyli 6). Jeli warunek ten jest speniony, nastpuje wywoanie funkcji
changeTheChannel() z parametrem o wartoci numeru biecego kanau zwikszonej o 1.
Spowoduje to oczywicie wywietlenie kolejnego programu. Przedstawione tutaj wyraenie
if nie zawiera towarzyszcego wyraenia else: jeli warunek pocztkowy nie jest speniony,
to znaczy, e wywietlany jest akurat program 6. i podejmowanie dalszych dziaa nie ma sensu.
10. Dodaj kolejny fragment skryptu w biecej klatce filmu:
function channelDown() {
if (currentChannel-1>=1) {
changeTheChannel(currentChannel-1);
}
}

Podobnie jak funkcja channelUp(), tak i channelDown()do dziaania nie wymaga podania
parametrw. Po wywoaniu sprawdza ona, czy bieca warto zmiennej currentChannel
zmniejszona o 1 byaby nadal wiksza lub rwna 1, zapobiega jednoczenie zmianie programu
na mniejszy ni oznaczony numerem pierwszym. Jeli warunek ten jest speniony, nastpuje
wywoanie funkcji changeTheChannel() i przekazanie jej biecej wartoci zmiennej
currentChannel zmniejszonej o 1. Spowoduje to wywietlenie poprzedniego w kolejnoci,
w jakiej s ponumerowane, programu. Podobnie jak w przypadku funkcji channelUp(),
tak i tutaj konstrukcja wyraenia if nie zawiera towarzyszcego wyraenia else. Jeli
warunek pocztkowy nie jest speniony, to znaczy, e biecym kanaem jest program 1.
i nie ma moliwoci jego zmiany na niszy.
Naszed czas na dodanie wywoa przygotowanych funkcji channelUp() i channelDown()
do przyciskw 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 kadym razem gdy przycisk ten
bdzie wcinity, nastpi wywoanie funkcji channelUp(). Jeeli numer biecego programu
zrwna si z grn, dopuszczaln granic (okrelon w zmiennej numberOfChannels),
wywoanie funkcji channelUp() przestanie powodowa przeczanie 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 kadym razem gdy przycisk ten jest wcinity, wywoywana jest funkcja
channelDown(), a warto zmiennej currentChannel jest zmniejszana (tak dugo, jak
dugo bdzie ona wiksza ni dolna, dopuszczalna granica). W wyniku tego na ekranie TV
wywietlany jest odpowiedni program.
13. Wydaj polecenie Control/Test Movie. Wcz telewizor, korzystajc z przycisku Power,

a nastpnie zmie wywietlany program, posugujc si przyciskami Up i Down.


Zwr uwag, e moesz wybra dowolny program za pomoc przyciskw numerycznych,
a nastpnie przeczy go na poprzedni lub nastpny przy uyciu przyciskw Up i Down.
Stao si to moliwe po wykorzystaniu zmiennej przechowujcej biecy numer programu
oraz funkcji niezmiernie upraszczajcych tego typu zadania.
14. Zakocz testowanie filmu i zapisz projekt w pliku o nazwie television3.fla.

Zaprogramowae wanie dziaanie pilota TV umoliwiajcego zmian wywietlanych


programw. W naszym nastpnym wiczeniu wykorzystamy funkcje w nieco inny ni dotd
sposb, dodajc moliwo wywietlania tekstowego opisu odbieranego wanie programu.

Zmienne lokalne oraz funkcje,


ktre zwracaj okrelon warto
Do zmiennych, ktre tworzylimy i wykorzystywalimy do tej pory, mona byo odwoa si
w dowolnym momencie, z poziomu dowolnego skryptu umieszczonego w filmie Flasha. Jednak
istniej rwnie zmienne lokalne, ktre tworzone s i wykorzystywane jedynie w obrbie definicji
LEKCJA 2.
Funkcje

65

okrelonej funkcji. Innymi sowy, zmienna lokalna tworzona jest wewntrz definicji funkcji i wykorzystywana przez t wanie funkcj po jej wywoaniu, a nastpnie po zakoczeniu dziaania automatycznie usuwana. Zmienne lokalne istniej jedynie w obrbie funkcji, w ktrej zostay zadeklarowane.
Cho stosowanie zmiennych lokalnych podczas programowania w jzyku ActionScript nie jest absolutnie konieczne, posugiwanie si nimi stanowi dobry programistyczny zwyczaj. Aplikacje wymagajce wielu skomplikowanych oblicze wykorzystuj mnstwo zmiennych, ktre mog spowolni jej dziaanie z upywem czasu. Wykorzystujc zmienne lokalne, minimalizujesz wykorzystanie
dostpnej pamici i zapobiegasz wystpowaniu konfliktw nazw, mogcych pojawi si w duych
projektach podczas spontanicznego tworzenia nowych zmiennych i nadawania im nazw, ktre byy ju wczeniej wykorzystane. Zmienne lokalne zadeklarowane w jednej funkcji mog mie identyczne nazwy jak zmienne istniejce w innej nawet jeli definicje obu funkcji znajduj si na tej
samej listwie czasowej. Jest to moliwe, poniewa Flash rozpatruje dan zmienn lokaln jedynie
w obszarze funkcji, w ktrym zostaa zadeklarowana.
Jest tylko jedna metoda rcznego tworzenia zmiennych lokalnych; konstrukcji tej uywae dotd
z powodzeniem przy tworzeniu zwykych zmiennych:
var myName:String = "Jobe";

Zmienna ta staje si lokalna po prostu przez umieszczenie jej deklaracji wewntrz definicji funkcji
i zastosowanie konstrukcji ze sowem kluczowym var.
Posumy si pewnym przykadem, aby lepiej wyjani ide deklarowania funkcji lokalnych. W naszym poprzednim wiczeniu zadeklarowalimy (utworzylimy) zmienn o nazwie currentChannel
i umiecilimy j w pierwszej klatce gwnej listwy czasowej. Do jej utworzenia posuya nastpujca konstrukcja:
var currentChannel:Number;

Poniewa podana tutaj linia skryptu zawierajca deklaracj zmiennej znajdowaa si w 1. klatce
gwnej listwy czasowej, nie za wewntrz definicji funkcji, zmienna ta stanie si dostpna na gwnej listwie czasowej. Jeeli umiecilibymy identyczn deklaracj wewntrz definicji jakiej funkcji,
zmienna currentChannel byaby traktowana jako lokalna (przynalena jedynie do tej funkcji): istniaaby wycznie po wywoaniu tej funkcji i usuwana po zakoczeniu jej dziaania. Sprbuj potraktowa zmienne lokalne jako tymczasowe wartoci przeznaczone do wykorzystania jedynie
w obrbie wybranej funkcji.
Jeeli chciaby wewntrz funkcji zadeklarowa zmienn, ktra bdzie dostpna z zewntrz, pomi
w deklaracji sowo kluczowe var i skorzystaj z nastpujcej konstrukcji:
name = "Jobe";

Zmienne oglnodostpne najlepiej deklarowa poza obrbem funkcji. Deklaracja taka jest traktowana jako poprawna, poniewa uatwia zgrupowanie wszystkich tego typu zmiennych w jednym
miejscu. Porzdek i przejrzysto programowania staje si bardzo istotna szczeglnie wwczas, gdy
chciaby powrci do swojego projektu po kilku miesicach lub przekaza go innemu programicie.
66

MACROMEDIA FLASH 8 ACTIONSCRIPT


Oficjalny podrcznik

W jednej linii kodu umieszczonej wewntrz funkcji moesz zadeklarowa wiele zmiennych lokalnych:
var firstName:String = "Jobe", lastName:String = "Makar", email:String =
"jobe@electrotank.com";

Zwracanie wartoci przez funkcj


Funkcje niekoniecznie musz suy wycznie jako zestaw polece przeznaczonych do wykonania; moesz rwnie wykorzysta je w charakterze miniprogramw dziaajcych w obrbie projektu, przetwarzajcych wysyane im informacje i zwracajcych okrelony rezultat. Przyjrzyjmy si nastpujcej 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 wywoania funkcji wysyane s do niej dwa parametry availableFunds oraz currentDay. Funkcja przetwarza wartoci tych parametrw za pomoc wyraenia warunkowego if/else.
Efektem jego dziaania jest przypisanie zmiennej myVariable wartoci true lub false. Gdy skorzystamy z wyraenia return (widocznego na kocu definicji funkcji), warto tej zmiennej zwracana jest do skryptu, ktry wywoa funkcj. Sprbujmy przeanalizowa nastpujcy przykad:
var idealCircumstances:Boolean = buyCD(19, "Friday");
if (idealCircumstances == true) {
gotoAndPlay("Happiness");
} else {
gotoAndPlay("StayHome");
}

Szczegln uwag zwr na nastpujc lini kodu:


var idealCircumstances:Boolean = buyCD(19, "Friday");

Po prawej stronie znaku = znajduje si faktyczne wywoanie funkcji, ktre wysya wartoci 19 oraz
"Friday" do funkcji buyCD(). Pamitajc, w jaki sposb zdefiniowana zostaa funkcja, wiemy, e
zostan one wykorzystane do okrelenia wartoci, jak przyjmie zmienna myVariable. Moe to by
jedna z dwch wartoci logicznych: true lub false. Wysanie okrelonych parametrw (19, "Friday") do funkcji spowoduje, e zmienna myVariable bdzie miaa warto false. Poniewa ostatnia linia kodu naszej funkcji zakada zwrot tej wartoci za pomoc wyraenia return myVariable;, jest ona zwracana do skryptu, ktry wywoa funkcj. Otrzymujemy zatem:
idealCircumstances = false;

W istocie wykorzystalimy odwoanie do funkcji, aby byskawicznie ustali warto zmiennej idealCircumstances. Po okreleniu tej wartoci za pomoc zmiennej idealCircumstances moe ona
by wykorzystana w pozostaej czci skryptu, co demonstruje przykadowy skrypt.

LEKCJA 2.
Funkcje

67

Moesz zastosowa polecenie return, aby zwrci dowolny typ danych, wczajc wartoci zmiennych, tablic i innych obiektw.
Wiesz ju, e funkcje mog zwraca pewne wartoci. Nadszed zatem odpowiedni moment, aby
zwrci uwag na drobn zmian, jakiej poddalimy skadni definicji naszej funkcji. Pierwsza
linia funkcji buyCD() wyglda nastpujco:
function buyCD(availableFunds:Number, currentDay:String):Boolean {

Midzy nawiasem zamykajcym sekcj parametrw a otwarciem nawiasu klamrowego na kocu


umiecilimy nastpujce wyraenie :Boolean. Dodatek ten wskazuje, e funkcja po wywoaniu
zawsze zwraca pewn warto. W tym przypadku jest to jedna z wartoci logicznych true lub false,
std powd zastosowania typu :Boolean. Definicja funkcji zwracajcej warto numeryczn wygldaaby nastpujco:
function myNumberFunction(param1:Number, param2:Boolean):Number {
// Akcje
}

Definicja funkcji, ktra zwraca warto w postaci acucha znakw, wygldaaby np. tak:
function myNumberFunction(param1:Number, param2:Boolean):String {
// Akcje
}

Tak wygldaaby definicja funkcji, ktra zwraca warto w postaci tablicy:


function myNumberFunction(param1:Number, param2:Boolean):Array {
// Akcje
}

itd.
Jeeli funkcja nie zwraca adnej wartoci (podobnie jak wszystkie funkcje zdefiniowane do tej pory
podczas biecej lekcji), konstrukcja jej definicji powinna mie nastpujc posta:

68

MACROMEDIA FLASH 8 ACTIONSCRIPT


Oficjalny podrcznik

function myNumberFunction(param1:Number, param2:Boolean):Void {


// Akcje
}

Wyraenie :Void oznacza funkcj, ktra nie zwraca adnej wartoci.


Cho w funkcjach, ktrymi posugiwalimy si w trakcie biecej lekcji, nie korzystalimy z takiej
konstrukcji definicji (mimo to nadal dziaaj one poprawnie), zastosowanie podanej skadni stanowi bardzo poprawny nawyk, a co wicej powinno przyspieszy wykonywanie kodu ActionScript. Wzrost prdkoci bdzie odczuwalny jedynie w przypadku projektu zawierajcego wiele
funkcji.
W naszym kolejnym wiczeniu bdziemy korzysta zarwno ze zmiennych lokalnych, jak rwnie
funkcji, ktre zwracaj okrelon warto. Zaprogramujemy dekoder telewizji kablowej, znajdujcy
si pod telewizorem w taki sposb, aby wywietla nazw biecego kanau. Utworzymy w tym celu
funkcj, ktra bdzie konstruowa acuch tekstowy przeznaczony do wywietlenia na dekoderze.
1. Otwrz 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 wywietlane bd nazwy rnych programw, w zalenoci
od tego, ktry z nich zostanie wybrany za pomoc pilota.

2. Wybierz 1. klatk filmu i, korzystajc z panelu Actions, wprowad nastpujcy skrypt poniej
linii numberOfChannels = 6;:
var channelNames:Array = ["", "News", "Classics", "Family", "Cartoons",
"Horror", "Westerns"];

LEKCJA 2.
Funkcje

69

Utworzye wanie tablic o nazwie channelNames. Zawiera ona nazwy, ktre bd dynamicznie
umieszczane w acuchu tekstowym wywietlanym na dekoderze. Siedem acuchw tekstowych,
stanowicych elementy tej tablicy, oddzielono przecinkami (pierwszy z nich moe wydawa
si do nieczytelny, poniewa stanowi po prostu acuch pusty oznaczony w nastpujcy
sposb: ""). Kady z tych elementw ma przyporzdkowan pewn liczb, wyznaczajc jego
pozycj (index) w tablicy. Pierwszy z nich znajduje si na pozycji 0. Przykadowo channelNames[0]
= "" (pusty), channelNames[1] = "News", channelNames[2] = "Classics" itd. Zrozumienie
tego zagadnienia ma kluczowe znaczenie podczas realizacji dalszej czci wiczenia.
Wicej informacji dotyczcych tablic znajdziesz w lekcji 4., Tablice i ptle.
Utwrzmy funkcj, ktra wykorzysta elementy tekstowe umieszczone w tej tablicy
do wywietlania komunikatu na dekoderze TV.
3. Wprowad kolejny fragment skryptu w 1. klatce filmu, poniej ju istniejcego:
function displayCableText():String {
var displayText:String;
if (currentChannel != 0) {
displayText = "You are viewing "+channelNames[currentChannel]+".";
} else {
displayText = "";
}
return displayText;
}

Definicja ta mogaby zosta rwnie dobrze umieszczona przed, jak i po okreleniu uchwytw zdarze;
jej pooenie nie ma wikszego znaczenia i stanowi kwesti osobistych nawykw i przyzwyczaje.
Skrypt ten definiuje funkcj displayCableText(), ktra nie wymaga podania adnych
parametrw. Suy ona do dynamicznego zbudowania acucha tekstowego, ktry pojawi si
w polu tekstowym cableDisplay_txt, umieszczonym w kopii klipu o nazwie cableBox_mc.
Funkcja ta zwraca zbudowany acuch za pomoc polecenia return. Zawiera ona wyraenie
warunkowe sprawdzajce, czy biecy program nie jest przypadkiem oznaczony liczb 0,
co oznacza, e telewizor jest wyczony. Jeli warunek ten jest speniony, tworzona jest zmienna
lokalna o nazwie displayText, a umieszczany w niej acuch tekstowy budowany jest zarwno
z elementu tablicy channelNames, jak i biecej wartoci zmiennej currentChannel. Jeli
przykadowo warto tej zmiennej w momencie wywoania funkcji wynosi 4, konstrukcja
acucha wyglda nastpujco:
displayText = "You are viewing "+channelNames[4]+".";

Poniewa na pozycji 4. tablicy channelNames znajduje si acuch tekstowy Cartoons,


moemy podstawi go do przedstawionego przed chwil wyraenia:
displayText = "You are viewing Cartoons.";

Jeeli pierwsza cz wyraenia warunkowego zawartego w funkcji nie jest speniona (else),
zmiennej lokalnej displayText przypisywany jest acuch pusty (""). Funkcja koczy si
70

MACROMEDIA FLASH 8 ACTIONSCRIPT


Oficjalny podrcznik

zwrceniem wartoci zmiennej displayText. Dokd jednak zostanie zwrcona ta warto?


Wyjanimy to w nastpnym punkcie wiczenia. Poniewa zmienna displayText zostaa
zadeklarowana jako lokalna (za pomoc sowa kluczowego var), jest ona usuwana z pamici
natychmiast po zwrceniu wartoci przez funkcj.
4. Korzystajc z panelu Actions, zmodyfikuj funkcj changeTheChannel() przez dodanie

nastpujcego kodu poniej pitej linii definicji tej funkcji:


cableBox_mc.cableDisplay_txt.text = displayCableText();

Zmodyfikowalimy funkcj changeTheChannel() w taki sposb, e za kadym razem przy


zmianie kanau i wywoaniu funkcji changeChannel() w polu tekstowym cableDisplay_txt
(znajdujcym si wewntrz klipu filmowego cableBox_mc) wywietlony zostanie odpowiedni
tekst. Dodana linia kodu ActionScript ustala warto kopii pola tekstowego cableDisplay_txt
(ktre jest dynamicznym polem tekstowym umieszczonym na naszym dekoderze), korzysta
przy tym z wartoci zwrconej przez funkcj displayCableText(). Funkcja ta zostaje
wywoana, zrealizowana, a efekt jej dziaania umieszczany jest po znaku rwnoci (=). Takie
wanie dziaanie nosi nazw zwracania wartoci przez funkcj. Warto uzyskana wewntrz
funkcji jest zwracana i umieszczana w linii skryptu, ktry spowodowa jej wywoanie. Jest
to rwnie doskonay przykad tego, w jaki sposb stosowanie funkcji pomaga zaoszczdzi
mnstwo czasu konstrukcj funkcji changeTheChannel() zmienilimy tylko w jednym
miejscu, a mimo to zmiana ta jest widoczna i dostpna przy kadym wywoaniu tej funkcji!
5. Wydaj polecenie Control/Test Movie. Wcz telewizor przyciskiem Power. Zmie kilkakrotnie

wywietlany program.
Za kadym razem gdy wciniesz przycisk realizujcy zmian kanau, pole tekstowe
umieszczone na dekoderze TV wywietla jego nazw. Utworzye prost aplikacj
wykorzystujc sze funkcji realizujcych szereg rnorodnych zada
(zobacz rysunek na nastpnej stronie).
LEKCJA 2.
Funkcje

71

6. Zakocz testowanie filmu i zapisz projekt w pliku television4.fla.

Zakoczylimy prac nad projektem. Wiedza, ktr zdobye, bdzie wielokrotnie


wykorzystywana w naszych kolejnych lekcjach.

Podsumowanie
W czasie tej lekcji:
Napisae funkcje, uywajc rnych skadni
Przekazae funkcjom argumenty w wywoaniach
Uye zmiennych lokalnych
Zwrcie wyniki wywoania funkcji i wykorzystae je

72

MACROMEDIA FLASH 8 ACTIONSCRIPT


Oficjalny podrcznik

You might also like