Professional Documents
Culture Documents
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
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
SPIS TRECI
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
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
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
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
56
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,
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);
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
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
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;
fragment skryptu:
function changeTheChannel(newChannel:Number) {
if (tvPower) {
currentChannel = newChannel;
tv_mc.screen_mc.gotoAndStop(newChannel+1);
remote_mc.light_mc.play();
}
}
60
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() {
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,
62
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
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,
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
W jednej linii kodu umieszczonej wewntrz funkcji moesz zadeklarowa wiele zmiennych lokalnych:
var firstName:String = "Jobe", lastName:String = "Makar", email:String =
"jobe@electrotank.com";
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");
}
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 {
Definicja funkcji, ktra zwraca warto w postaci acucha znakw, wygldaaby np. tak:
function myNumberFunction(param1:Number, param2:Boolean):String {
// 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
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]+".";
Jeeli pierwsza cz wyraenia warunkowego zawartego w funkcji nie jest speniona (else),
zmiennej lokalnej displayText przypisywany jest acuch pusty (""). Funkcja koczy si
70
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
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