You are on page 1of 28

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

Macromedia Flash
MX 2004 ActionScript.
Oficjalny podrcznik
Autorzy: Derek Franklin, Jobe Makar
Tumaczenie: Piotr Cielak (rozdz. 1 - 7, 18),
Marcin Samodulski (wstp, rozdz. 15 - 17, 19 - 21)
ISBN: 83-7361-533-4
Tytu oryginau: Macromedia Flash MX 2004
ActionScript: Training from the Source
Format: B5, stron: 728

Polecane przez firm Macromedia rdo informacji o jzyku ActionScript


Poznaj skadni i elementy jzyka ActionScript 2.0
Wykorzystaj moliwoci programowania obiektowego
Zastosuj w aplikacjach usugi sieciowe i jzyk XML
Napisz skrypty sterujce przebiegiem odtwarzania prezentacji
Macromedia Flash MX 2004 i Macromedia Flash MX 2004 Professional to aplikacje
suce do tworzenia publikacji multimedialnych opartych na grafice wektorowej.
Zaimplementowany w nich rozbudowany obiektowy jzyk programowania ActionScript
daje projektantom nieograniczon swobod twrcz. Za jego pomoc mona stworzy
proste skrypty nawigacyjne, rozbudowane mechanizmy obsugi danych, narzdzia
weryfikacji danych wprowadzanych przez uytkownikw, narzdzia adowania plikw
z dyskw oraz elementy interfejsu uytkownika.
Macromedia Flash MX 2004 ActionScript. Oficjalny podrcznik to zbir wicze
przygotowanych przy wsppracy z firm Macromedia producentem Flasha.
Dziki przykadom przedstawianym w kolejnych lekcjach poznasz moliwoci jzyka
ActionScript 2.0. Dowiesz si wszystkiego o jego elementach i skadni, nauczysz si
korzysta z danych zewntrznych i kontrolowa elementy prezentacji tworzonej
we Flashu.

Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl

Skadnia jzyka ActionScript


Zdarzenia i ich obsuga
Uzyskiwanie dostpu do elementw prezentacji
Klasy obiektw
Definiowanie i wykorzystywanie funkcji
Struktury sterujce ptle i wyraenia warunkowe
Obsuga, pobieranie, wysyanie i walidacja danych
Korzystanie z jzyka XML
Obsuga plikw multimedialnych
Testowanie skryptw i usuwanie z nich bdw
Poznaj moliwoci jzyka ActionScript 2.0 w praktyce, korzystajc z podrcznika
polecanego przez firm Macromedia.

Spis treci
O Autorach .......................................................................................................................................................................................... 11
Wprowadzenie ................................................................................................................................................................................... 13
Lekcja 1. Przedstawiamy ActionScript .................................................................................................................................... 19
Co nowego w wersji 2.0 ActionScriptu? ..................................................................................................................20
Rnice dzielce ActionScript 1.0 i 2.0 ...................................................................................................................22
Podobiestwa pomidzy ActionScript 1.0 a 2.0..................................................................................................... 26
Dlaczego miabym uczy si jzyka ActionScript? ................................................................................................27
Elementy jzyka ActionScript ..................................................................................................................................27
Posugiwanie si panelem Actions i edytorem ActionScriptu ............................................................................. 33
Planowanie projektu .................................................................................................................................................. 38
Przystpujemy do pisania pierwszego skryptu ....................................................................................................... 41
Testowanie pierwszego skryptu ................................................................................................................................ 50

Lekcja 2. Obsuga zdarze............................................................................................................................................................. 55


Co robi uchwyty zdarze?....................................................................................................................................... 57
Wybr waciwego uchwytu zdarzenia .................................................................................................................... 57
Zdarzenia myszy......................................................................................................................................................... 58
Jak osign najlepsze efekty podczas przypisywania zdarze myszy do klipw filmowych? ........................ 67
Zdarzenia na listwie czasowej ................................................................................................................................... 69
Posugiwanie si zdarzeniami klipw filmowych .................................................................................................. 75
czenie rnych zdarze .........................................................................................................................................88
Metody uchwytw zdarze ....................................................................................................................................... 93
Posugiwanie si metodami uchwytw zdarze .....................................................................................................94
Obiekty nasuchujce .............................................................................................................................................. 102

Lekcja 3. cieki dostpu ............................................................................................................................................................111


Listwy czasowe ...........................................................................................................................................................113
Odwoania do biecego filmu ...............................................................................................................................114
Odwoania do gwnego filmu .............................................................................................................................. 120

Odwoania do filmu nadrzdnego ........................................................................................................................ 122


Odwoywanie si do kopii klipw.......................................................................................................................... 126
Odwoywanie si do filmw umieszczonych na rnych poziomach.............................................................. 129
Odwoywanie si do kopii klipw znajdujcych si na innych poziomach .................................................... 135
Sposoby konstruowania odwoa...........................................................................................................................141
Tworzenie i odwoywanie si do elementw globalnych .....................................................................................141

Lekcja 4. Posugiwanie si klasami obiektw...................................................................................................................145


Czym s obiekty i dlaczego s przydatne?............................................................................................................. 146
Wbudowane klasy obiektw ................................................................................................................................... 150
Zastosowanie klasy Color ........................................................................................................................................161
Wykorzystanie klasy Key do rozbudowania interakcji z projektem ................................................................. 166
Klasy String i Selection............................................................................................................................................ 169

Lekcja 5. Funkcje ...........................................................................................................................................................................177


Tworzenie funkcji .................................................................................................................................................... 178
Funkcje z parametrami............................................................................................................................................ 183
Zmienne lokalne oraz funkcje, ktre zwracaj okrelon warto .................................................................... 192

Lekcja 6. Tworzenie i przetwarzanie danych ....................................................................................................................199


Tworzenie zmiennych .............................................................................................................................................200
Tworzenie tablic .......................................................................................................................................................206
Tworzenie dynamicznych pl tekstowych i pobieranie informacji.................................................................. 210
Pobieranie danych.................................................................................................................................................... 216
Konstruowanie wyrae ..........................................................................................................................................223
Operatory ..................................................................................................................................................................224
Przetwarzanie danych numerycznych za pomoc klasy Math ..........................................................................227
Operacje na acuchach tekstowych......................................................................................................................232

Lekcja 7. Tworzenie wasnych klas obiektw...................................................................................................................237


Klasy, klasy wierzchokowe i kopie obiektw.......................................................................................................238
Tworzenie klasy ........................................................................................................................................................240
cieka dostpu do definicji klas............................................................................................................................243
Pakiety i importowanie klas....................................................................................................................................246
Odczytywanie i zapisywanie cech klasy.................................................................................................................252
Definiowanie czonkw klasy.................................................................................................................................254
Dziedziczenie............................................................................................................................................................258

MACROMEDIA FLASH MX 2004 ACTIONSCRIPT


Oficjalny podrcznik

Lekcja 8. Korzystanie z instrukcji warunkowych............................................................................................................275


Kontrolowanie przebiegu skryptw ......................................................................................................................276
Okrelanie warunkw..............................................................................................................................................282
Reakcja na rne warunki .......................................................................................................................................282
Definiowanie granic ................................................................................................................................................286
Wczanie i wyczanie ............................................................................................................................................289
Reagowanie na sygnay pochodzce od uytkownika.........................................................................................294
Wykrywanie zderze obiektw...............................................................................................................................297

Lekcja 9. Automatyzacja skryptw za pomoc ptli ....................................................................................................301


Dlaczego ptle s uyteczne?...................................................................................................................................302
Typy ptli................................................................................................................................................................... 303
Pisanie i rozumienie warunkw ptli .................................................................................................................... 306
Ptle zagniedone ................................................................................................................................................... 312
Wyjtki w ptlach ..................................................................................................................................................... 317

Lekcja 10. Tworzenie komponentw interfejsu uytkownika..................................................................................323


Komponenty: elementarz pisania skryptw.........................................................................................................324
Konfiguracja waciwoci komponentw ............................................................................................................. 326
Wyzwalanie skryptw przy uyciu zdarze komponentw ............................................................................... 333
Korzystanie z metod komponentw ..................................................................................................................... 338
Korzystanie z komponentu FocusManager .........................................................................................................348
Stylizacja komponentw interfejsu uytkownika z wykorzystaniem jzyka ActionScript............................ 352

Lekcja 11. Pobieranie i wysyanie danych w programie Flash ................................................................................357


rda i formaty danych ......................................................................................................................................... 358
Instrukcje GET i POST............................................................................................................................................ 361
Korzystanie z klasy LoadVars ................................................................................................................................. 362
Pliki regu .................................................................................................................................................................. 371
Korzystanie z obiektw udostpnionych ............................................................................................................. 373
Korzystanie z komponentu WebServiceConnector............................................................................................384

Lekcja 12. Korzystanie z jzyka XML w programie Flash ..........................................................................................393


Podstawy jzyka XML .............................................................................................................................................. 395
Korzystanie z klasy XML.........................................................................................................................................398
Korzystanie z serwerw gniazd...............................................................................................................................407

Lekcja 13. Walidacja danych ....................................................................................................................................................425


Proces walidacji danych...........................................................................................................................................426
Korzystanie z procedur walidacyjnych .................................................................................................................427

SPIS TRECI

Obsuga bdw ........................................................................................................................................................430


Walidacja cigw znakw........................................................................................................................................432
Walidacja sekwencji .................................................................................................................................................437
Walidacja z wykorzystaniem listy moliwych wartoci ...................................................................................... 441
Walidacja liczb..........................................................................................................................................................443
Przetwarzanie danych po procesie walidacji.........................................................................................................446

Lekcja 14. Praca z polami tekstowymi.................................................................................................................................449


Automatyczne tworzenie i konfiguracja pl tekstowych ...................................................................................450
Korzystanie z obiektu TextFormat ........................................................................................................................459
adowanie obrazkw i plikw SWF oraz komunikacja z nimi ......................................................................... 466
Formatowanie pl tekstowych za pomoc kaskadowych arkuszy stylw ........................................................474

Lekcja 15. Dynamiczne sterowanie klipami filmowymi ..............................................................................................483


Tworzenie obiektw klipw filmowych w sposb dynamiczny ........................................................................484
Tworzenie przyciskw o cigej odpowiedzi ........................................................................................................495
Uycie ActionScriptu do dynamicznego rysowania linii................................................................................... 503
Uycie metod rysunkowych.................................................................................................................................... 505
Dynamiczne tworzenie wypenionych ksztatw ................................................................................................509
Zmiana gbokoci pooenia obiektw klipw filmowych ...............................................................................511
Przeciganie i upuszczanie obiektw klipw filmowych.................................................................................... 516
Usuwanie dynamicznie tworzonej zawartoci .....................................................................................................520

Lekcja 16. Bieg klatek i czasu ...................................................................................................................................................523


Odczytywanie czasu we Flashu i pomiar jego upywu ........................................................................................524
Obsuga kalendarza i odczytywanie daty .............................................................................................................. 526
Pomiar upywu czasu ............................................................................................................................................... 538
Sterowanie szybkoci i kierunkiem odtwarzania klatek na listwie czasowej .................................................. 546
ledzenie postpu odtwarzania i adowania filmu .............................................................................................. 551

Lekcja 17. Oprogramowanie dwiku .................................................................................................................................557


Sterowanie odtwarzaniem dwikw za pomoc ActionScriptu ...................................................................... 558
Tworzenie obiektu klasy Sound ............................................................................................................................. 559
Przeciganie klipu filmowego na okrelonym obszarze ..................................................................................... 562
Sterowanie gonoci.............................................................................................................................................. 566
Sterowanie balansem................................................................................................................................................572
Doczanie dwikw i sterowanie ich odtwarzaniem........................................................................................578

MACROMEDIA FLASH MX 2004 ACTIONSCRIPT


Oficjalny podrcznik

Lekcja 18. adowanie zewntrznych plikw multimedialnych ...............................................................................585


Wejcie i wyjcie wczytywania zewntrznych plikw multimedialnych...........................................................587
Wczytywanie filmw z okreleniem celu ..............................................................................................................589
Dynamiczne wczytywanie obrazw JPG ............................................................................................................... 595
Tworzenie interaktywnego klipu osadzania multimediw (placeholder)........................................................600
Umieszczanie filmw na wskazanych poziomach ..............................................................................................604
Kontrolowanie odtwarzania filmu umieszczonego na okrelonym poziomie ...............................................608
Dynamiczne wczytywanie plikw MP3................................................................................................................. 610
Zdarzenia zwizane z dynamicznie wczytywanymi plikami MP3 .................................................................... 613
Pobieranie danych ID3 z plikw MP3................................................................................................................... 617
Wczytywanie i kontrolowanie odtwarzania zewntrznych plikw wideo........................................................624

Lekcja 19. Testowanie i debugowanie.................................................................................................................................635


Eliminowanie bdw, zanim bdzie za pno ................................................................................................... 636
Zwikszanie skutecznoci procesu testowania i debugowania aplikacji........................................................... 637
Poprawianie bdw kompilacji............................................................................................................................. 638
Szukanie i poprawianie bdw czasu wykonania ............................................................................................... 639

Lekcja 20. SWF o maksymalnych moliwociach...........................................................................................................657


Polecenie fscommand() dziaanie i uycie....................................................................................................... 659
Uycie programu Flash Studio Pro........................................................................................................................ 664
Uycie mechanizmu przekazywania parametrw FlashVars do filmu.............................................................677

Lekcja 21. Drukowanie i tworzenie podrcznych menu.............................................................................................685


Rnice midzy drukowaniem z poziomu Flasha a przegldarki.....................................................................686
Uycie klasy PrintJob...............................................................................................................................................688
Tworzenie wasnych menu podrcznych ..............................................................................................................697

Skorowidz ..........................................................................................................................................................................................705

SPIS TRECI

Automatyzacja skryptw
za pomoc ptli

Kady z nas musi czasem wykonywa czynnoci, ktre wymagaj wielokrotnego powtarzania
przynajmniej jednego zadania. Jeli np. wysyamy 100 zaprosze na lub, powtarzajcymi si czynnociami s skadanie papieru, sklejanie kopert i naklejanie znaczkw. Trzeba je wykona 100 razy.
W jzyku ActionScript zbiory powtarzajcych si akcji nazywamy ptlami. Pozwalaj one na uruchomienie danych instrukcji dowoln ilo razy, co oznacza, e zamiast ponownie je przepisywa,
wystarczy napisa je raz i umieci w ptli. W tej lekcji zobaczysz, jak uywa si trzech typw ptli
dostpnych w jzyku ActionScript.
Rozwijana lista oraz siatka
o wymiarach 2 na 2,
wykorzystane w tej aplikacji,
zostan utworzone
za pomoc ptli.

Czego si nauczysz?
W czasie tej lekcji:
 Odkryjesz, jak uyteczne s ptle,
 Poznasz typy ptli,
 Ustawisz warunki wykonania ptli,
 Utworzysz ptle zagniedone,
 Uyjesz wyjtkw.

Przybliony czas
Ta lekcja zajmie w przyblieniu 45 minut.

Materiay do lekcji
Pliki startowe:
Lekcja09\Assets\pictureShow1.fla
Lekcja09\Assets\phoneNumberSearch1.fla
Gotowe projekty:
pictureShow3.fla
phoneNumberSearch2.fla

Dlaczego ptle s uyteczne?


Ptle pozwalaj programowi Flash na powtarzanie akcji (lub ich zbioru), co oznacza, e uywajc
tylko kilku wierszy kodu w jzyku ActionScript, moesz uruchomi dan instrukcj nawet kilka
tysicy razy. W tym jzyku ptle wykorzystuje si do zada, ktre bez nich byyby trudne lub niemoliwe do wykonania np.do:
 automatycznego tworzenia rozwijanych list,
 sprawdzania danych,
 wyszukiwania tekstu,
 powielania klipw filmowych,
 kopiowania zawartoci jednej tabeli do innej,
 wykrywania w grach zderze obiektw.

302

MACROMEDIA FLASH MX 2004 ACTIONSCRIPT


Oficjalny podrcznik

Ptli mona uy do automatyzacji dowolnej iloci zada, takich jak tworzenie instancji klipw
filmowych. Przypumy, e projekt wymaga rwnomiernego rozmieszczenia 100 instancji tego
samego klipu. Wystarczy wwczas przecign jedn z nich z biblioteki, a nastpnie napisa cztero
lub piciowierszowy kod powodujcy jej stukrotne powielenie i rozmieszczenie kopii w rwnomiernych odstpach. Jest to znacznie atwiejsze ni stukrotne przeciganie instancji z biblioteki
i rczne pozycjonowanie ich na scenie.

Ptle mog by dostosowywane do wymaga programu. Przypumy, e napisae instrukcj powodujc automatyczne tworzenie menu zawierajcego 15 przyciskw. Nieznacznie j modyfikujc, moesz dodawa i usuwa jego elementy. Wykonanie tego rcznie wymaga dodania lub usunicia zaznaczonego elementu, a nastpnie przesunicia wszystkich pozostaych w gr lub w d,
a niekiedy nawet modyfikacji istniejcego kodu.
W miar postpw w przyswajaniu wiedzy zawartej w tej lekcji (oraz w caej reszcie ksiki) docenisz rol ptli w skryptach.

Typy ptli
Jzyk ActionScript zawiera trzy typy ptli, z ktrych wszystkie wykonuj akcj (lub ich zbir) wwczas, gdy dany warunek jest prawdziwy.

Ptla while
Skadnia tego popularnego typu ptli jest nastpujca:
while (someNumber < 10) {
// wykonaj te akcje
}

Wyraenie someNumber < 10 jest warunkiem, ktry okrela liczb iteracji (powtrze) ptli. Podczas
kadej z nich wykonane zostaj zawarte w niej akcje. Sposoby okrelania warunku (i wychodzenia
z ptli) zostay opisane w podrozdziale Pisanie i rozumienie warunkw ptli.

LEKCJA 9.
Automatyzacja skryptw za pomoc ptli

303

Oto przykad ptli while:


while (myClip_mc._y < 0) {
myClip_mc._y += 3;
}

Powyszy skrypt przesuwa klip filmowy myClip_mc wzdu osi y a do momentu, gdy jego pozycja
bdzie wiksza od 0.

Ptla for
Instrukcja for jest ptl, ktrej dziaanie opiera si na zwikszaniu lub pomniejszaniu wartoci
zmiennej. Pozwala ona na jej inicjalizacj, ustalenie warunkw wykonania zawartych w niej komend oraz zwikszanie lub zmniejszanie wartoci zmiennej przy kadej iteracji wszystko to
w jednej instrukcji jzyka ActionScript. Jest ona zwykle uywana do wykonywania akcji (lub ich
zbioru) w zalenoci od wartoci zmiennej np. przy operowaniu tablic lub wykonywaniu akcji
zwizanych z list klipw filmowych. Oto skadnia ptli for:
for (var someNumber:Number= 0; someNumber < 10; ++someNunber) {
// wykonaj te akcje
}

Trzy elementy umieszczone w nawiasie i oddzielone od siebie rednikami s uywane do okrelenia liczby iteracji ptli. W powyszym przykadzie tworzymy zmienn someNumber, a nastpnie
przyporzdkowujemy jej warto pocztkow 0. Pniej instrukcje wewntrz ptli s wykonywane
do momentu, gdy warto zmiennej jest mniejsza od 10. Ostatni element umieszczony w nawiasie
mwi, e przy kadej iteracji jest ona zwikszana o 1, co ostatecznie powoduje, e zmienna someNumber otrzymuje warto 10, oznaczajc koniec ptli.
Ptla for jest uywana gwnie do powtarzania zbioru akcji okrelon ilo razy. Poniej znajduje
si przykad jej zastosowania:
for (var i:Number=0; i<10; ++i) {
myClip_mc.duplicateMovieClip("myClip_mc" + i, i);
}

Powyszy kod powoduje dziesiciokrotne powielenie instancji klipu myClip_mc.

Ptla forin
W tym typie ptli jest wykorzystywana lista wszystkich waciwoci obiektu. Oto jego skadnia:
for (var i:String in someObject) {
trace(i);
}

Warto i jest zmienn, ktra przy kadej iteracji przechowuje nazw waciwoci. Moe ona zosta uyta w akcjach umieszczonych wewntrz ptli. Przyjrzyjmy si nastpujcemu skryptowi jako
przykadowi jej praktycznego zastosowania:

304

MACROMEDIA FLASH MX 2004 ACTIONSCRIPT


Oficjalny podrcznik

var car:Object = new Object();


car.color = "red";
car.make = "BMW";
car.doors = 2;
var result:String;
for (var i:String in car) {
result += i + ": " + car[i] + newline;
}

Na pocztku utworzony zostaje obiekt o nazwie car. Kolejne trzy wiersze przyporzdkowuj mu
waciwoci (ktre mona traktowa jako zmienne znajdujce si wewntrz obiektu) oraz odpowiadajce im wartoci. Nastpnie uyta zostaje ptla for...in, powodujca kolejne przyporzdkowywanie wszystkich waciwoci zmiennej i. Jej warto zostaje uyta w akcji znajdujcej si wewntrz ptli. Pod koniec, w zmiennej result jest przechowywany tekst zawierajcy nazwy
wszystkich waciwoci wraz z ich wartociami.
W czasie pierwszej iteracji ptli zmiennej i przyporzdkowana zostaje warto doors (poniewa
jest ona nazw ostatniej zdefiniowanej waciwoci). Wyraenie ustalajce warto przechowywan
w zmiennej result wyglda nastpujco:
result = result + "doors" + ": " + 2 + newline;

Po pierwszym wykonaniu ptli zmienna result bdzie zawieraa cig znakw:


"doors: 2"

W wyraeniu przyporzdkowujcym warto zmiennej result zmienna i odnosi si do nazwy


waciwoci (takiej jak doors, make lub color). Uycie sformuowania car[i] (tzn. umieszczenie
i w nawiasach kwadratowych) oznacza to samo, co napisanie car.doors i stanowi referencj do
wartoci zmiennej.

LEKCJA 9.
Automatyzacja skryptw za pomoc ptli

305

Gdy ptla zostaje zakoczona, zmienna result bdzie zawieraa nastpujcy cig znakw:
"doors: 2
make: BMW
color: red"

Poniewa obiekt car posiada trzy waciwoci, ptla for...in uyta w tym skrypcie wykona automatycznie jedynie trzy iteracje.
Gdy tworzysz waciwo obiektu, zostaje ona zapisana w tablicy przyporzdkowujcej. W przypadku zwykej tablicy referencje do zawartych w niej obiektw mog zosta utworzone za pomoc
liczby. W tablicy przyporzdkowujcej referencja nastpuje przez nazw. Opisana w tym podrozdziale ptla for...in wykorzystuje tablic przyporzdkowujc zawierajc wszystkie referencje
zawarte w okrelonej listwie czasowej lub obiekcie.
Ten typ ptli moe zosta uyty w wielu przypadkach, np. do odnalezienia informacji, takiej jak:
 nazwa i warto kadej zmiennej listwy czasowej lub obiektu,
 nazwa kadego obiektu umieszczonego na listwie czasowej lub w innym obiekcie,
 nazwa i warto kadego atrybutu dokumentu napisanego w jzyku XML.

Pisanie i rozumienie warunkw ptli


W dalszej czci tej lekcji skupimy si na ptli loop. Zawarte w niej akcje s wykonywane po kolei,
dopki warunek uyty do jej utworzenia pozostaje prawdziwy, np.:
var i:Number = 0;
while (i<10) {
// wykonaj te akcje
}

Warunkiem ptli jest i < 10. Oznacza to, e dopki warto zmiennej i jest mniejsza od 10, wyraenie jest prawdziwe i akcje umieszczone wewntrz ptli zostaj wykonane. Powyszej instrukcji
brakuje jednak najwaniejszego elementu. Nie posiada ona adnego sposobu pozwalajcego na
zmian wartoci wyraenia na faszyw. Bez niego ptla bdzie wykonywana w nieskoczono, co
w rzeczywistoci moe spowodowa zawieszenie si aplikacji. Program Flash nie moe zrobi nic
innego a do momentu, gdy ptla zostanie zakoczona. Aby unikn takiej sytuacji, warto
zmiennej i musi zosta zwikszona i ostatecznie osign 10, co sprawi, e warunek ptli bdzie
faszywy i zostanie ona zatrzymana.
Aby zwikszy warto zmiennej, moesz uy operatora ++. Oto przykad:
var i: Number = 0;
while (i < 10) {
// wykonaj te akcje
++i
}

306

MACROMEDIA FLASH MX 2004 ACTIONSCRIPT


Oficjalny podrcznik

Zwikszanie wartoci zmiennej i powoduje, e ptla wykona 10 iteracji. Warto ta pocztkowo jest
rwna 0. Jednak przy kadym powtrzeniu ptli jej warto jest powikszana o 1. Przy dziesitej
iteracji i = 10, co oznacza, e warunek i < 10 nie jest ju prawdziwy i ptla zostaje zatrzymana.
Oto krtszy zapis instrukcji wykonujcej to samo zadanie:
var i:Number = 0;
while (++i < 10) {
// wykonaj te akcje
}

Powysza ptla zostaje wykonana 9 razy. Zmiennej i jest pocztkowo przyporzdkowywana warto 0. Jednak przy kadej iteracji (wcznie z pierwsz) zostaje ona powikszona o 1 wewntrz instrukcji warunkowej zawartej w samej ptli. Przy dziesitym powtrzeniu i = 10, co oznacza, e
warunek i < 10 nie jest ju prawdziwy i ptla zostaje zakoczona.

W ptli moesz rwnie uy operatora --. Sposb jego wykorzystania wyglda mniej wicej tak:
var i:Number = 10;
while (--i > 0) {
// wykonaj te akcje
}

Moliwe jest te napisanie tego skryptu za pomoc ptli for:


for (var i:Number = 10; i>0; --i) {
//wykonaj te akcje
}

LEKCJA 9.
Automatyzacja skryptw za pomoc ptli

307

Warunek ptli nie musi zalee od powikszanej lub pomniejszanej wartoci. Moe nim by dowolne wyraenie logiczne lub wynik wywoania funkcji zwracajcej prawd lub fasz, jak w nastpujcym przykadzie:
while (someFunction()) {
//wykonaj te akcje
}

W poniszym wiczeniu utworzysz rozwijan list, uywajc ptli while.


1. Otwrz plik pictureShow1.fla, znajdujcy si w folderze Lekcja09\Assets.

Gwna listwa czasowa zawiera trzy warstwy: Background (to), Dynamic Elements (elementy aktywne)
i Actions (akcje). Wewntrz warstwy Actions znajduje si cay kod napisany w jzyku ActionScript.
Oczywicie warstwa Background zawiera grafik umieszczon w tle projektu. W warstwie
Dynamic Elements umieszczono cztery instancje klipu filmowego. Trzy ponad scen, w nich
znajduj si rysunki, oraz jedn, o nazwie dropDownList_mc, umieszczon na scenie i zawierajc
przycisk o nazwie menu_btn, a take jeszcze jeden klip, ktry nazywa si item_mc. Instancja
item_mc powstaa z dwch elementw: pola tekstowego o nazwie itemName_txt oraz przycisku
widocznego jako pprzezroczyste biae pole o nazwie list_btn. Instancja itemName_txt odgrywa
w tym wiczeniu wan rol, poniewa zostanie ona powielona w procesie tworzenia menu.

2. Otwrz panel Actions, zaznacz klatk warstwy Actions i dodaj nastpujce dwa wiersze skryptu:
var buttonNames:Array = ["Paris", "New York", "London"];
dropDownList_mc.item_mc._visible = false;

Pierwsza z powyszych akcji tworzy tablic o nazwie buttonNames, zawierajc nazwy


pojawiajce si w rozwijanej licie. Druga sprawia, e klip filmowy item_mc staje si
niewidoczny (poniewa bdzie uywany tylko jako szablon do tworzenia duplikatw).
3. Pod skryptem umieszczonym w punkcie 2. dodaj nastpujc funkcj:
function populateList() {
var spacing:Number = dropDownList_mc.item_mc._height + 2;
var numberOfButtons:Number = buttonNames.length;
}

Powysza funkcja powiela klip filmowy item_mc, umieszcza jego duplikaty pod przyciskiem
Menu, a nastpnie zmienia tekst wywietlany na ich instancjach.
308

MACROMEDIA FLASH MX 2004 ACTIONSCRIPT


Oficjalny podrcznik

Poniewa generuje ona list opcji, musimy wzi pod uwag odstp w pionie midzy przyciskami.
W pierwszej akcji funkcja tworzy zmienn o nazwie spacing. Jej warto zostaje okrelona
przez dodanie liczby 2 do wysokoci klipu item_mc. Ptla wykorzystuje j do ustawienia
odstpu midzy grnymi krawdziami powielonych instancji.

Warto zmiennej numberOfButtons jest okrelana przez dugo tablicy buttonNames


(tzn. liczb zawartych w niej elementw). Ptla while (dodana w nastpnym punkcie),
uyta do tworzenia listy, wykorzystuje j do okrelenia liczby iteracji. Poniewa dugo
tablicy buttonNames jest aktualnie rwna 3 (zawiera ona trzy nazwy miast), ptla zostanie
wykonana trzy razy, przy kadym powtrzeniu tworzc nowy przycisk listy. Jeli w tablicy
umiecimy kolejn nazw miasta, warto waciwoci length (dugo) bdzie wynosia 4,
co oznacza, e ptla automatycznie si dopasuje i utworzy cztery przyciski.
4. Dodaj do funkcji populateList() nastpujcy skrypt, zaraz za ostatnim wierszem kodu:
var i:Number = -1;
while (++i < numberOfButtons) {
var name:String = "item" +i;
dropDownList_mc.item_mc.duplicateMovieClip(name, i);
dropDownList_mc[name].itemName_txt.text = buttonNames[i];
dropDownList_mc[name]._x = 0;
dropDownList_mc[name]._y = i * spacing;
dropDownList_mc[name].pictureID = i + 1;
dropDownList_mc[name].list_btn.onRelease = function() {
itemClicked(this._parent.pictureID);
};
}

Wanie napisae ptl while, ktra powiela instancj klipu filmowego item_mc dla potrzeb
rozwijanej listy, umieszcza duplikaty w odpowiednich miejscach i nadaje im nazwy.
Przed definicj ptli skrypt utworzy zmienn lokaln o nazwie i oraz przyporzdkowa jej
warto 1.
Litera i jest czsto uywana jako nazwa zmiennej wykorzystywanej w ptli.
Kolejny wiersz skryptu zaczyna si od ptli while i definiuje warunek decydujcy o tym,
czy ma ona zosta wykonana. Mwi: Dopki warto zmiennej i jest mniejsza od wartoci
zmiennej numberOfButtons, kontynuuj przegldanie tablicy. Na pocztku ptli zmienna
i posiada warto 0, mimo i pocztkowo jest jej przyporzdkowywana warto 1, operator ++
powoduje jej zwikszenie o 1 przed kad iteracj (take przed pierwsz). Poniewa zmienna
LEKCJA 9.
Automatyzacja skryptw za pomoc ptli

309

numberOfButtons posiada warto 3 (co opisalimy w punkcie 3.), za i jest przy kadej

iteracji zwikszana o 1, warunek ptli okae si faszywy po jej trzech wykonaniach.


Pierwsza akcja skryptu tworzy zmienn o nazwie name, ktrej warto zaley od aktualnej
wartoci zmiennej i. Poniewa jest ona powikszana przy kadej iteracji, w pierwszym
wykonaniu ptli zmiennej name zostaje przyporzdkowana warto item0, w drugiej
item1 itd. Kolejny wiersz uywa metody duplicateMovieClip() do utworzenia nowej
instancji klipu filmowego item_mc. Jej dwa parametry s rozdzielone przecinkiem. Pierwszy
przyporzdkowuje tworzonemu duplikatowi nazw instancji, za kolejny jego pozycj.
Jako nazwy uywamy wartoci zmiennej name, za jako pozycji wartoci zmiennej i.
W nastpnych czterech akcjach umieszczone w ptli wyraenie dropDownList_mc[name]
jest odniesieniem do nazwy utworzonego duplikatu. Jak ju wspominalimy w lekcji 6.,
Tworzenie i przetwarzanie danych, taka skadnia umoliwia w jzyku ActionScript
tworzenie referencji do nazwy zmiennej. W pierwszej iteracji ptli zmiennej name zostaje
przyporzdkowana warto item0. W tej sytuacji opisywane wiersze skryptu mona przepisa
w nastpujcy sposb:
dropDownList_mc.item0.itemName_txt.text = buttonNames[i];
dropDownList_mc.item0._x = 0;
dropDownList_mc.item0._y = i * spacing;
dropDownList_mc.item0.pictureID = i + 1;

W kadej iteracji warto zmiennej name zostaje zaktualizowana i wykorzystywana do


nazwania utworzonego duplikatu. Powysze akcje korzystaj z referencji do jego instancji.
Kady duplikat zawiera dwa elementy umieszczone w oryginalnej instancji klipu item_mc
biay przycisk o nazwie list_btn oraz pole tekstowe, noszce nazw itemName_txt. Trzeci
wiersz ptli
dropDownList_mc[name].itemName_txt.text = buttonNames[i];

przyporzdkowuje warto waciwoci itemName_txt.text (oznaczajcej tekst wywietlany na


przycisku), znajdujcej si w duplikacie. Warto ta zostaje ustalona przez uycie aktualnej
wartoci zmiennej i w referencji do cigu znakw znajdujcego si w tablicy buttonNames,
utworzonej w punkcie 2. W pierwszej iteracji ptli wartoci i jest 0, co oznacza, e waciwoci
itemName_txt.text zostanie przyporzdkowana warto przechowywana w polu buttonNames[0],
czyli w pierwszym elemencie tablicy. Jest ni tekst Paris.
Kolejne dwa wiersze skryptu umieszczaj kopi instancji na scenie. Jak wida w skrypcie,
kady z duplikatw posiada t sam wsprzdn x, wynoszc 0. Wsprzdna y jest ustalana
dynamicznie. Zostaje okrelona przez pomnoenie zmiennej i przez warto odstpu
midzy duplikatami. Efektem tej akcji jest ich rwnomierne rozmieszczenie w pionie.
Po wykonaniu dwch wierszy skryptu, umieszczajcych klip w odpowiednim miejscu,
ptla tworzy wewntrz kopii instancji zmienn pictureID. Zostaje jej przyporzdkowana
warto oparta na aktualnej wartoci zmiennej i powikszonej o 1. Zostanie ona uyta
w kolejnym wiczeniu do okrelenia sposobu wywietlania zbioru rysunkw.

310

MACROMEDIA FLASH MX 2004 ACTIONSCRIPT


Oficjalny podrcznik

Na kocu ptla przyporzdkowuje znajdujcemu si w kadym z duplikatw przyciskowi


list_btn procedur obsugujc zdarzenie onRelease. W momencie puszczenia przycisku
powoduje ona wywoanie funkcji itemClicked() oraz przekazanie jej zmiennej pictureID.
Funkcja ta zostanie dodana w kolejnym wiczeniu.
Wywoanie funkcji itemClicked() wewntrz procedury obsugujcej zdarzenie onRelease
wykorzystuje referencj do zmiennej pictureID przez nastpujc instrukcj:
this._parent.pictureID;

Aby zrozumie jej skadni, naley przyjrze si ciece midzy zmienn pictureID
i przyciskiem list_btn. Zmienna ta znajduje si wewntrz duplikatu klipu filmowego,
ktry zawiera rwnie wymieniony przycisk. Nie istnieje ona jednak wewntrz klipu
(poniewa nie moe on przechowywa danych), ale wewntrz jego obiektu nadrzdnego,
ktry jest kopi instancji klipu. Tak wic aby przycisk mg skorzysta ze zmiennej,
musi powrci o jeden poziom do gry (_parent). Std wzi si powyszy wiersz kodu.
5. Dodaj po funkcji populateList() nastpujcy skrypt:
dropDownList_mc.menu_btn.onRelease = function() {
populateList();
};

Gdy pucimy przycisk menu, wywoana zostanie funkcja populateList(), co spowoduje


pojawienie si zbioru przyciskw (przez ni tworzonych).
6. Wybierz z menu polecenie Control\Test Movie. Kliknij przycisk menu, aby przetestowa

dziaanie skryptu.
Gdy klikniesz przycisk menu, wywoana zostanie funkcja populateList(), tworzc
i odpowiednio rozmieszczajc kilka kopii instancji klipu filmowego item_mc, na ktrych
nastpnie zostanie umieszczony tekst. Wszystko to dzieje si niemal natychmiast.
7. Zamknij testowany film i zapisz projekt jako pictureShow2.fla.

Korzystajc z ptli while, utworzye rozwijan list. W kolejnym wiczeniu,


definiujc reakcj na klikanie jej elementw, sprawisz, e bdzie ona dziaa.

LEKCJA 9.
Automatyzacja skryptw za pomoc ptli

311

Ptle zagniedone
Ptle s doskonaym sposobem na automatyzacj pisania skryptw. Mog one jednak robi rwnie co wicej ni powtarzanie zbioru akcji. Ptla zagniedona, czyli umieszczona wewntrz
innej ptli, moe by uyteczna przy tworzeniu sekwencji wykonujcej zbir akcji, zmieniajcej
nieco parametry, ponownie wykonujcej zbir akcji itd. Oto przykad ptli zagniedonej:
var i:Number = 0;
while (++i <= 10) {
var j:Number = 0;
while (++j <= 10) {
//wykonaj te akcje
}
}

Akcje wewntrz ptli zostan wykonane 100 razy. Zewntrzna ptla (wykorzystujca zmienn i)
wykonywana jest 10 razy. Przy kadej iteracji nastpuj dwa zjawiska zmiennej j zostaje przyporzdkowana z powrotem liczba 0, ktra pozwala na dziesiciokrotne wykonanie ptli wewntrznej.
Innymi sowy, w pierwszej iteracji ptli zewntrznej dziesiciokrotnie zostaje powtrzona wewntrzna. W drugiej ptla wewntrzna znw wykonywana jest 10 razy itd.

Ptle zagniedone s doskona metod dzielenia powtarzajcych si zada na procesy ustawione


w odpowiedniej hierarchii. Aby zrozumie t koncepcj, wyobra sobie, e piszesz list. Przedstawia
on proces oparty na zagniedonej ptli, w ktrym zaczyna si pisa w pierwszym wierszu, stawia
okoo 100 znakw, przechodzi do wiersza drugiego, stawia okoo 100 znakw itd. Jeli list zawiera
25 wierszy, skrypt wykonujcy to zadanie moe wyglda nastpujco:
var i:Number = 0;
while (++i <= 25) {
var j:Number = 0;
while (++j <= 100) {
// napisz liter
}
// przejd do nastpnego wiersza
}

Naley pamita o tym, e nie jestemy ograniczeni jedynie do umieszczenia jednej ptli wewntrz
innej. Jeli projekt tego wymaga, istnieje moliwo wykorzystania dowolnej iloci poziomw zagniedenia.
W poniszym wiczeniu uyjemy zagniedonych ptli do utworzenia siatki zoonej z rysunkw
pojawiajcych si w momencie wybrania elementu rozwijanej listy.
312

MACROMEDIA FLASH MX 2004 ACTIONSCRIPT


Oficjalny podrcznik

1. Otwrz plik pictureShow2.fla.

Na grze sceny znajduj si trzy instancje klipw filmowych: pictures1_mc, pictures2_mc


i pictures3_mc. W tym wiczeniu powielimy jeden z nich (w zalenoci od tego, ktry
z elementw listy zosta wybrany), tworzc na scenie siatk zoon z rysunkw.
2. Otwrz panel Actions, zaznacz 1. klatk warstwy Actions i dodaj na kocu kodu nastpujcy skrypt:
function itemClicked(pictureID:Number) {
var picToDuplicate:String = "pictures" + pictureID + "_mc";
var xSpacing:Number = 160;
var ySpacing:Number = 120;
var xStart:Number = 190;
var yStart:Number = 30;
}

W poprzednim wiczeniu instancje przycisku list_btn zostay zaprogramowane w sposb


pozwalajcy na wywoywanie powyszej funkcji i przekazywanie jej parametru (pictureID)
w momencie ich kliknicia. Po zakoczeniu tej operacji funkcja tworzy cztery kopie jednej
z instancji znajdujcych si na grze sceny, kreujc siatk o rozmiarach 22, a nastpnie wysya
kady z duplikatw do innej klatki, co powoduje wywietlanie na nich rnych obrazw.

Pierwszy wiersz funkcji tworzy zmienn o nazwie picToDuplicate. Zostaj jej


przyporzdkowane wartoci picture1_mc, picture2_mc lub picture3_mc, oparte na wartoci
zmiennej pictureID (rwnej 1, 2 lub 3), ktra zostaa przekazana funkcji. Te trzy cigi
znakw s nazwami instancji zawierajcych rysunki. Zostaj one uyte w dalszej czci
funkcji do okrelenia, ktra z nich ma zosta wywietlona.
Zmienna xSpacing okrela rozmiar przestrzeni midzy lewymi krawdziami klipw
filmowych znajdujcych si w tym samym wierszu. Zmienna ySpacing okrela rozmiar
przestrzeni midzy klipami umieszczonymi w tej samej kolumnie. Wartoci tych zmiennych
s dobierane dowolnie i zale gwnie od podanej iloci miejsca midzy klipami.
LEKCJA 9.
Automatyzacja skryptw za pomoc ptli

313

Kolejne dwie zmienne, xStart i yStart, przedstawiaj pocztkowe wsprzdne pierwszej


kopii klipu wzgldem sceny. Pozycja kadego kolejnego duplikatu zostaje okrelona
wzgldem tego punktu.
3. Dodaj pod definicj funkcji itemClicked() nastpujcy skrypt:
var v:Number = 0;
var i:Number = -1;
while (++i < 2) {
var j:Number = -1;
while (++j < 2) {
++v;
var name:String = "pictures" + v;
_root[picToDuplicate].duplicateMovieClip(name, v);
_root[name]._x = xstart + i * xSpacing;
_root[name]._y = yStart + k * ySpacing;
_root[name].gotoAndStop(v);
}
}

Powyszy skrypt zawiera ptl zagniedon jest ni fragment funkcji tworzcy siatk
klipw filmowych o wymiarach 22. Pojedyncza ptla mogaby utworzy jedynie jedn
kolumn. Za to zagniedenie wewntrz niej drugiej ptli pozwala na umieszczanie dwch
instancji w kadej kolumnie, przesunicie jej wsprzdnych i wstawienie kolejnych dwch
(opiszemy to za chwil). Przyjrzyjmy si, w jaki sposb funkcjonuje ten proces.
Ptla zewntrzna, zaczynajca si w trzecim wierszu skryptu, zwiksza warto zmiennej i o 1
(++i), ustawiajc jej warto pocztkow rwn 0. Warunek ptli mwi: Dopki i jest mniejsze
od 2, wykonaj nastpujce akcje. Poniewa 0 < 2, wykonane zostaj akcje umieszczone
wewntrz ptli. Pierwsza z nich przyporzdkowuje zmiennej j warto 1. Zostaje ona
wykorzystana w ptli wewntrznej, w ktrej z definicji zostaje zwikszona o 1 (++j). Nastpnie
pojawia si warunek: Dopki j jest mniejsze od 2, kontynuuj wykonywanie nastpujcych
akcji. W dalszej czci a do momentu, gdy stanie si on faszywy, skrypt wykonuje jedynie
akcje umieszczone w ptli wewntrznej. Podczas jej pierwszej iteracji warto zmiennej v zostaje
zwikszona o 1 (++v), w wyniku czego jest rwna 1. Jest ona wykorzystywana w kilku kolejnych
wierszach skryptu. Kopiuj one i umieszczaj w odpowiednich miejscach instancje klipu pictureID.
Operacja ta powinna by ju znana. Podczas drugiej iteracji zmienna j znw zostaje zwikszona
o 1 (co nastpuje w instrukcji warunkowej ptli), w wyniku czego zyskuje ona warto 1, ktra
jest mniejsza od 2. Powoduje to kolejne wykonanie akcji umieszczonych w ptli.
Wewntrzna ptla nie moe wykona trzeciej iteracji, poniewa skutkowaoby to ponownym
zwikszeniem wartoci zmiennej j, ktra byaby wwczas rwna 2 (warunek wyjcia z ptli
wewntrznej). W ten sposb skrypt powraca do ptli zewntrznej. W tym miejscu zmienna i
(wykorzystana w warunku ptli zewntrznej) zostaje zwikszona o 1 (++i), osigajc warto 1.
Jest ona mniejsza od 2, wic akcje umieszczone w ptli zostaj wykonane ponownie. W wyniku
tego zmiennej j zostaje ponownie przyporzdkowana warto 1 i instrukcje zawarte w ptli
wewntrznej zostaj wykonane jeszcze dwukrotnie.
Opisana koncepcja moe by dosy skomplikowana. Przyjrzyj si jej dokadnie i upewnij si,
e wszystko zrozumiae.

314

MACROMEDIA FLASH MX 2004 ACTIONSCRIPT


Oficjalny podrcznik

Aby uzyska efekt siatki o rozmiarach 22, zoonej z klipw filmowych umieszczonych
w odpowiednich odstpach, naley uy skryptu:
_root[name]._x = xStart + i * xSpacing;
_root[name]._y = yStart + j * ySpacing;

Pierwszy wiersz wykorzystuje aktualn warto zmiennej i do ustawienia odstpw midzy


klipami w poziomie, za drugi zmiennej j do ustawienia ich w pionie w momencie
powielenia klipu. Dowiedziae si ju, e w kadej iteracji ptli zewntrznej dwukrotnie
zostaje wykonana wewntrzna. Gdy zmienna i posiada warto 0, zmiennej j podczas
wykonywania wewntrznej ptli zostaj przyporzdkowane kolejno liczby 0 i 1. Nastpnie
warto zmiennej i jest zwikszana o 1, za j znw nadawane s wartoci 0 i 1. Poniewa
znamy wartoci zmiennych xStart, xSpacing, yStart i ySpacing oraz sposb zwikszania
wartoci zmiennych i oraz j w ptli, moemy okreli pooenie kadego klipu.
Powielenie pierwszej instancji:
_x = 190 + 0 * 160; // wsprzdnej x zostaje przyporzdkowana warto 190
_y = 30 + 0 * 120; // wsprzdnej y zostaje przyporzdkowana warto 30

Naley pamita o tym, e w wyraeniach matematycznych mnoenie jest zawsze wykonywane


przed dodawaniem.
Powielenie drugiej instancji:
_x = 190 + 0 * 160; // wsprzdnej x zostaje przyporzdkowana warto 190
_y = 30 + 1 * 120; // wsprzdnej y zostaje przyporzdkowana warto 150

Powielenie trzeciej instancji:


_x = 190 + 1 * 160; // wsprzdnej x zostaje przyporzdkowana warto 350
_y = 30 + 0 * 120; // wsprzdnej y zostaje przyporzdkowana warto 30

Powielenie czwartej instancji:


_x = 190 + 1 * 160; // wsprzdnej x zostaje przyporzdkowana warto 350
_y = 30 + 1 * 120; // wsprzdnej y zostaje przyporzdkowana warto 150

(patrz pierwszy rysunek na nastpnej stronie)

LEKCJA 9.
Automatyzacja skryptw za pomoc ptli

315

4. W ostatnim wierszu definicji funkcji itemClicked() dodaj nastpujc akcj:


removeButtons();

Powysza akcja wywouje funkcj o nazwie removeButtons(), ktra powoduje usunicie


przyciskw z rozwijanej listy po klikniciu przycisku i utworzeniu siatki. Za chwil j
napiszemy.

316

MACROMEDIA FLASH MX 2004 ACTIONSCRIPT


Oficjalny podrcznik

5. Dodaj na kocu kodu nastpujcy skrypt:


function removeButtons() {
var numberOfButtons:Number = buttonNames.length;
var i:Number = -1;
while (++i<numberOfButtons) {
var name:String = "item" + i;
dropDownList_mc[name].removeMovieClip();
}
}

Ta funkcja uywa prostej ptli while do kolejnego usuwania wszystkich przyciskw


(ktre tak naprawd s duplikatami instancji klipw filmowych item0, item1 i item2)
tworzcych rozwijan list. Dziaa ona podobnie jak funkcja, ktrej uywalimy do ich
tworzenia. Przyjrzyjmy si jej bliej.
Warto zmiennej numberOfButtons, ktra zostaa rwnie uyta w funkcji populateList(),
pochodzi od waciwoci length tablicy buttonNames. Poniewa zawiera ona trzy elementy,
ptla wykonuje trzy iteracje. W kadej z nich zmiennej name przyporzdkowuje si aktualn
warto zmiennej i. Nastpnie zostaje uyta metoda removeMovieClip(), powodujca usunicie
duplikatw instancji klipw filmowych, czyli pozycji listy wywietlanej pod przyciskiem Menu.
W referencji do nich wykorzystana zostaje zmienna name.
6. Wybierz z menu polecenie Control\Test Movie, aby przetestowa projekt.

Kliknij przycisk Menu, by wywietli list. Klikanie jej elementw powoduje tworzenie siatki
zoonej z obrazkw w oparciu o warto przekazywanej do funkcji itemClicked() zmiennej
pictureID. Zauwa te, e funkcja removeButtons() usuwa list.
7. Zamknij testowany film i zapisz projekt jako pictureShow3.fla.

W tym wiczeniu uye zagniedonych ptli do utworzenia na ekranie siatki zoonej


z obrazkw. Moge w tym celu przeciga ich instancje z biblioteki i umieszcza w odpowiednich
miejscach za pomoc myszy. Jednak uycie ptli pozwolio na zautomatyzowanie tego procesu.
Dziki temu po niewielkich modyfikacjach skrypt, ktry napisae, moe zbudowa siatk
dowolnej wielkoci nawet tak du jak 100100. Wykorzystywanie zmiennych w ten
sposb nie tylko pomaga w automatyzacji procesu, ktry normalnie jest wykonywany
rcznie. Pozwala te na skalowanie projektu w zalenoci od warunkw zaistniaych
w momencie jego uruchomienia.

Wyjtki w ptlach
Oglnie rzecz biorc, ptle wykonuj iteracje a do momentu, gdy warunek, ktrego uywaj, nie
jest ju prawdziwy. Aby zmieni to zachowanie, mona skorzysta z dwch akcji continue
i break.
Instrukcja continue pozwala na zatrzymanie aktualnej iteracji (tzn., e po jej uruchomieniu nie
zostaj ju wykonane adne akcje w obrbie iteracji) i przejcie do nastpnej, np.:

LEKCJA 9.
Automatyzacja skryptw za pomoc ptli

317

var total:Number = 0;
var i:Number = 0;
while (++i <= 20) {
if (i == 10) {
continue;
}
total += i;
}

Instrukcja while w powyszym skrypcie tworzy ptl, w ktrej warto zmiennej i jest kolejno
zwikszana od 1 do 20. W kadej iteracji zostaje ona dodana do zmiennej total a do momentu, gdy zmienna i osignie warto 10. W tym momencie wykonuje si akcja continue oznaczajca, e w tej iteracji nie zostanie uruchomiona ju adna instrukcja i ptla przeskakuje do kolejnej.
To powoduje wygenerowanie nastpujcego zbioru liczb:
1 2 3 4 5 6 7 8 9 11 12 13 14 15 16 17 18 19 20

Zauwa, e nieobecna jest liczba 10, co oznacza, e w czasie dziesitego powtrzenia ptli nie zostaa wykonana adna akcja.
Akcja break jest uywana do opuszczania ptli, jeli nawet jej warunek jest cigle prawdziwy, np.:
var total:Nunber = 0;
var i:Number = 0;
while (++i <= 20) {
total += i;
if (total >= 10) {
break;
}
}

Powyszy skrypt w kadej iteracji zwiksza warto zmiennej total o 1. Gdy osignie ona liczb 10
lub wiksz, wykonywana jest akcja break i ptla while zostaje zatrzymana, mimo e powinna ona
wykona 20 powtrze.
W poniszym wiczeniu wykorzystamy instrukcje continue i break do budowy prostego mechanizmu wyszukujcego.
1. Otwrz plik phoneNumberSearch1.fla, znajdujcy si w folderze Lekcja09\Assets.

Ten plik zawiera dwie warstwy: Actions i Search Assets (zasoby wyszukiwarki). Na pierwszej
z nich jest umieszczona procedura wyszukujca, za na drugiej pola tekstowe, przycisk
i grafika potrzebne do utworzenia tego projektu (patrz pierwszy rysunek na nastpnej stronie).
W tym wiczeniu opracujemy prost aplikacj pozwalajc na odnajdywanie numeru
telefonu osoby, ktrej imi zostaje wpisane przez uytkownika. Na ekranie znajduj si dwa
pola tekstowe: name_txt uywane do wpisywania imienia oraz result_txt wywietlajce
wyniki wyszukiwania. Nad obrazkiem przycisku Search znajduje si niewidoczna instancja
przycisku o nazwie search_btn. Jest ona uywana do wywoywania funkcji wyszukujcej.
2. Otwrz panel Actions, zaznacz 1. klatk warstwy Actions i umie w niej nastpujcy skrypt:
var info:Aray = [["John", "919-555-5698"], ["Kelly", "232-555-3333"],
["Ross", "434-555-5655"]];
318

MACROMEDIA FLASH MX 2004 ACTIONSCRIPT


Oficjalny podrcznik

Ten skrypt tworzy dwuwymiarow tablic o nazwie info, zawierajc trzy elementy,
z ktrych kady znajduje si na osobnej podtablicy. Pierwszym elementem kadej podtablicy
jest imi, za drugim numer telefonu.

Aby dosta si do pierwszego imienia zawartego w tablicy, naley uy sformuowania


info[0][0], za do pierwszego numeru telefonu info[0][1], co odpowiada imieniu
i numerowi telefonu Johna. Ta skadnia w skrypcie, ktry piszemy, odgrywa do istotn rol.
3. Dodaj pod tablic info nastpujc definicj funkcji:
function search () {
var matchFound:Boolean = false;
var i:Number = -1;
while (++i < info.length) {
}
}

Zacze definiowa funkcj, ktrej zadaniem jest wyszukiwanie okrelonego numeru telefonu
w tablicy info. Jej pierwsza akcja tworzy zmienn o nazwie matchFound i przyporzdkowuje
jej warto pocztkow false (wkrtce zobaczysz, w jaki sposb zostaje ona wykorzystana).
Ptla while zostaje wykonana raz dla kadego elementu tablicy.
LEKCJA 9.
Automatyzacja skryptw za pomoc ptli

319

4. Umie w ptli while, zawartej w funkcji search(), nastpujcy skrypt:


if (info[i][0].toLowerCase() != name_txt.text.toLowerCase()) {
continue;
}
result_txt.text = info[i][1];
matchFound = true;
break;

W kadej iteracji ptli instrukcja if sprawdza, czy nastpia rozbieno midzy imieniem
wpisanym przez uytkownika (w ktrym wszystkie litery s zamieniane na mae) w polu
tekstowym name_txt i tym, ktre znajduje si w tablicy (ktrego litery rwnie s zamieniane
na mae). W tym celu wykorzystana zostaje zmienna i.
Gdy nastpi brak zgodnoci midzy imionami, wykonana zostaje akcja continue i skrypt
przechodzi do kolejnej ptli. Dziki wykorzystaniu metody toLowerCase() do zmiany
wszystkich liter na mae procedura wyszukiwania nie rozrnia maych i wielkich liter.
Jeli imi znajdujce si w tablicy pasuje do zawartoci pola tekstowego name_txt, akcja
continue nie zostaje wykonana i instrukcje umieszczone po komendzie if zostaj
uruchomione. Pierwsza z nich wykorzystuje warto zmiennej i do przyporzdkowania
waciwoci result_txt.text odpowiedniego numeru telefonu. Nastpnie zmiennej matchFound
zostaje nadana warto true i wykonana akcja break, powodujca zatrzymanie ptli.
Aby lepiej zrozumie, jak dziaa powyszy skrypt, wyobramy sobie, e kto wpisa w polu
tekstowym name_txt imi Kelly. Jego pozycja w tablicy jest nastpujca:
info[1][0]

W pierwszej iteracji ptli zmienna i posiada warto 0, co oznacza, e zawarta w ptli


instrukcja if wyglda nastpujco:
if (info[0][0].toLowerCase() != name_txt.text.toLowerCase()) {
continue;
}

Powyszy kod sprawdza, czy cig znakw john (imi umieszczone jako element info[0][0]
po zmianie wszystkich liter na mae) jest rwny sowu kelly (wpisanemu w polu tekstowym
name_txt po zmianie wszystkich liter na mae). Poniewa warunek ten jest prawdziwy,
wykonana zostaje akcja continue i nastpuje przejcie do kolejnej ptli. W kadej iteracji
warto zmiennej i zostaje zwikszona o 1, wic nastpna instrukcja if wyglda nastpujco:
if (info[1][0].toLowerCase() != name_txt.text.toLowerCase()) {
continue;
}

Sprawdza ona, czy cig znakw kelly (imi umieszczone jako element info[1][0] po zmianie
wszystkich liter na mae) jest rwny sowu kelly (wpisanemu w polu tekstowym name_txt
po zmianie wszystkich liter na mae). Poniewa w tym przypadku wystpuje rwno,
akcja continue zostaje pominita i wykonywane s kolejne trzy instrukcje. Pierwsza z nich
przyporzdkowuje waciwoci result_txt.text element info[i][1]. Zmienna i posiada warto
1, wic elementem tym jest info[1][1] numer telefonu Kelly. Zostaje on wywietlony.
Nastpnie zmiennej matchFound zostaje przyporzdkowana warto true i akcja break
powoduje wyjcie z ptli.
320

MACROMEDIA FLASH MX 2004 ACTIONSCRIPT


Oficjalny podrcznik

Akcja break nie jest w tym przypadku konieczna, jednak pozwala na skrcenie czasu wyszukiwania. Pomyl, ile czasu mona zaoszczdzi, stosujc j, aby zapobiec wykonywaniu niepotrzebnych iteracji ptli, gdy tablica posiada 10 000 elementw.
5. Umie jako ostatni akcj funkcji search() nastpujc instrukcj if:
if (!matchFound) {
result_txt.text = "No Match";
}

Ta instrukcja, niebdca czci ptli, sprawdza, czy zmienna matchFound po zakoczeniu


ptli nadal posiada warto false (ktra zostaa jej przyporzdkowana na samym pocztku).
Jeli tak, akcja w instrukcji if przyporzdkowuje wartoci result_txt.text cig znakw "No
Match". Wyraenie !matchFound jest skrcon wersj komendy matchFound == false.
6. Dodaj na kocu kodu po funkcji search() nastpujcy skrypt:
search_btn.onRelease = function() {
search();
};

Powyszy skrypt wie procedur obsugujc zdarzenie onRelease z przyciskiem search_btn.


Gdy ten zostanie przycinity i puszczony, nastpi wywoanie funkcji search().
7. Wybierz z menu polecenie Control\Test Movie. Wpisz w polu name imi John, Kelly lub Ross

i kliknij przycisk Search. Nastpnie wpisz dowolne inne imi i kliknij ponownie.
Gdy imi znajduje si w tablicy info, powinien pojawi si numer telefonu. Jeli jest ono
nieprawidowe, wywietlony zostaje tekst "No Match".
8. Zamknij testowany film i zapisz projekt jako phoneNumberSearch2.fla.

W tym wiczeniu uye wyjtkw continue i break do napisania procedury wyszukujcej.


W praktyce instrukcja break jest uywana znacznie czciej ni continue. Jest tak dlatego,
e programici czsto wol uywa instrukcji warunkowej if do pominicia akcji w ptli.

LEKCJA 9.
Automatyzacja skryptw za pomoc ptli

321

Podsumowanie
W czasie tej lekcji:
 Odkrye, jak uyteczne s ptle,
 Poznae trzy typy ptli, dostpne w jzyku ActionScript,
 Uye ptli while na kilka rnych sposobw,
 Utworzye i wykorzystae ptl zagniedon,
 Uye wyjtkw continue i break.

322

MACROMEDIA FLASH MX 2004 ACTIONSCRIPT


Oficjalny podrcznik

You might also like