Issuu on Google+


ActionScript 3.0. Szybki start Autor: Derrick Ypenburg T³umaczenie: £ukasz Schmidt ISBN: 978-83-246-2164-4 Tytu³ orygina³u: ActionScript 3.0: Visual QuickStart Guide Format: 170×230, stron: 336

Wykorzystaj mo¿liwoœci Flasha i ActionScript! • Jak rozpocz¹æ przygodê z ActionScript 3.0? • Jak kontrolowaæ oœ czasu? • Jak wykorzystaæ zasoby zewnêtrzne? ActionScript jest obiektowym jêzykiem programowania, wykorzystywanym w Adobe Flash. Obecnie stosowana sk³adnia tego jêzyka pojawi³a siê po raz pierwszy we Flashu 5. ActionScript pozwala na sterowanie aplikacj¹ oraz animacj¹, a jego mo¿liwoœci mog¹ zaskoczyæ niejednego programistê. To dziêki niemu stworzysz jeszcze bardziej interaktywne i atrakcyjne strony WWW! Ksi¹¿ka ta pozwoli Ci b³yskawicznie opanowaæ podstawy pracy z ActionScript, a po jej przeczytaniu stworzenie aplikacji na platformie Flash nie powinno stanowiæ dla Ciebie ¿adnego problemu. Dziêki niej poznasz sk³adniê ActionScript 3.0, sposób wykorzystania zmiennych, w³aœciwoœci oraz funkcji i metod. Nauczysz siê pracowaæ z obiektami wyœwietlania oraz reagowaæ na zdarzenia. Ponadto dowiesz siê, jak kontrolowaæ oœ czasu, a tak¿e u¿ywaæ pól tekstowych oraz klas Math i Date. „ActionScript 3.0. Szybki start” jest obowi¹zkow¹ pozycj¹ dla wszystkich osób chc¹cych rozpocz¹æ przygodê z ActionScript 3.0! • Sk³adnia ActionScript 3.0 • Zmienne, w³aœciwoœci, funkcje i metody • Praca z klasami i obiektami • Reagowanie na zdarzenia • Kontrolowanie osi czasu • Operacje na ³añcuchach znaków • U¿ywanie pól tekstowych • Zastosowanie klas Math i Date • Instrukcje warunkowe oraz iteracje i powtórzenia • Komunikacja zewnêtrzna z wykorzystaniem protoko³u HTTP • Wykorzystanie zasobów zewnêtrznych • Dynamiczne sterowanie animacj¹ • Praca z wideo i dŸwiêkiem Opanuj mo¿liwoœci ActionScript szybko i przyjemnie!


Spis treci Spis treci

Rozdzia 1.

Przedmowa

9

Wprowadzenie

13

Wprowadzenie do ActionScript 3

19

Jzyk ActionScript ................................................................................................. 20 Skadnia jzyka ActionScript ................................................................................ 22 Znaki przestankowe .............................................................................................. 23 Dalej o klasach i obiektach ................................................................................... 26 Pisanie kodu ActionScript .................................................................................... 30 Rozdzia 2.

Zmienne i waciwoci

35

Rozdzia 3.

Funkcje i metody

Spis treci

Co to jest zmienna? ............................................................................................... 36 Deklarowanie zmiennych i przypisywanie do nich wartoci ............................. 39 Okrelanie typ贸w danych zmiennych ..................................................................... 40 a cuchy znak贸w .................................................................................................. 42 Liczby .................................................................................................................... 44 Konwertowanie typu danych ................................................................................ 47 Instancje i waciwoci ......................................................................................... 48 Zmienne typu Boolean .......................................................................................... 51

53

Metoda a funkcja ................................................................................................... 54 Zwracanie wartoci przez funkcje ........................................................................ 63 Zakres funkcji ........................................................................................................ 66 Rozdzia 4.

Praca z klasami i obiektami

69

Definiowanie klas i obiekt贸w ............................................................................... 70 Importowanie klasy ............................................................................................... 72 Tworzenie instancji obiekt贸w .............................................................................. 74 Praca z kodem zewntrznym ................................................................................ 78 Rozdzia 5.

Listy wywietlania i obiekty wywietlania

81

Lista wywietlania ................................................................................................. 82 Klasy i obiekty wywietlania ................................................................................ 85

5


Spis treci Rozdzia 6.

Praca z obiektami wywietlania

101

Waciwoci obiektów wywietlania .................................................................... 102 Zarzdzanie gbokociami obiektów .................................................................... 109 Usuwanie obiektów wywietlania z listy wywietlania ..................................... 112 Rozdzia 7.

Komunikacja i zdarzenia

113

Model zdarze w ActionScript 3 ........................................................................ 114 Praca z funkcjami nasuchujcymi ..................................................................... 118 Przepyw zdarze ................................................................................................ 125 Podklasy klasy Event .......................................................................................... 128 Rozdzia 8.

Kontrolowanie osi czasu

129

Kontrolowanie osi czasu ..................................................................................... 130 Poruszanie si po osiach czasu za pomoc cieek adresowych .................... 136 Deklarowanie szybkoci odtwarzania w czasie wykonywania ............................ 140

Spis treci

Rozdzia 9.

Praca z acuchami znaków

143

Klasa String ......................................................................................................... 144 czenie a cuchów znaków .............................................................................. 146 Operacje na a cuchach znaków ........................................................................ 149 Rozdzia 10.

Praca z polami tekstowymi

153

Praca z polami tekstowymi ................................................................................. 154 Formatowanie pól tekstowych ........................................................................... 160 Osadzanie czcionek ............................................................................................. 166 Rozdzia 11.

Praca z klasami Math i Date

169

Klasa Math ........................................................................................................... 170 Klasa Date ........................................................................................................... 176 Strefy czasowe i czas UTC ................................................................................. 182 Rozdzia 12.

Praca z danymi za pomoc tablic i obiektów

183

Praca z tablicami (klasa Array) ............................................................................ 184 Modyfikowanie tablic .......................................................................................... 188 Klasa Object i tablice asocjacyjne ...................................................................... 193 Rozdzia 13.

Tworzenie instrukcji warunkowych

197

Instrukcje warunkowe ........................................................................................ 198 Rozdzia 14.

Iteracje i powtórzenia

207

Ptla for ................................................................................................................ 208 Tworzenie dynamicznego menu za pomoc tablicy asocjacyjnej .................... 210 Iterowanie przez waciwoci obiektu ............................................................... 215 Ptle while i do…while ...................................................................................... 218

6


Spis treci Rozdzia 15.

dania HTTP i komunikacja zewntrzna

221

Nawigowanie do URL za pomoc da HTTP ............................................... 222 Wczytywanie zewntrznej zawartoci tekstowej .............................................. 226 Obsuga bdów .................................................................................................. 234 Rozdzia 16.

Wczytywanie zasobów zewntrznych

239

Wczytywanie danych zewntrznych za pomoc klasy Loader ......................... 240 Monitorowanie postpów wczytywania ............................................................. 245 Sterowanie wczytanymi plikami SWF ............................................................... 248 Rozdzia 17.

Uywanie ksztatów, masek, trybów mieszania i filtrów

251

Klasa Shape ......................................................................................................... 252 Dynamiczne maskowanie obiektów ................................................................... 256 Tworzenie wizualnych efektów specjalnych za pomoc ActionScript ............. 260 Rozdzia 18.

Animacja sterowana dynamicznie

265

Rozdzia 19.

Praca z d wikiem

Spis treci

Klasa Timer ......................................................................................................... 266 Zdarzenie ENTER_FRAME ............................................................................. 271 Klasy Tween i Easing ......................................................................................... 273 Efekty przej (klasy z pakietu transitions) ....................................................... 280 Buforowanie obiektów wywietlania .................................................................... 282

283

Praca z dwikami osadzonymi .......................................................................... 284 Kontrolowanie odtwarzania za pomoc klasy SoundChannel .......................... 287 Wczytywanie dwików zewntrznych .......................................................... 288 Monitorowanie wczytywania dwiku za pomoc zdarze klasy Sound ...... 290 Wykorzystywanie danych ID3 plików MP3 ...................................................... 293 Kontrolowanie gonoci dwiku ...................................................................... 294 Monitorowanie postpu odtwarzania .................................................................... 295 Rozdzia 20.

Praca z wideo

299

Zastosowanie komponentu FLVPlayback ......................................................... 300 Zdarzenia FLVPlayback ..................................................................................... 306 Zaawansowane aplikacje wideo .......................................................................... 317

Skorowidz

319

7


Komunikacja i zdarzenia

7

Rozdzia 7. Komunikacja i zdarzenia [RS1] Komunikacja w ActionScript jest w peni oparta na zdarzeniach (events). Model zdarze w ActionScript 3 pozwala na cakowit enkapsulacj obiektów klas. Enkapsulacja oznacza, e obiekty klas „zajmuj si same sob” i nie dbaj o to, jak funkcjonuj inne obiekty. Po prostu robi, co do nich naley, i nie przejmuj si niczym innym. Kiedy obiekty chc porozumie si ze wiatem zewntrznym, wyzwalaj zdarzenia. Do obiektów przypisywane s funkcje nasuchujce, które czekaj na wyzwolenie zdarzenia i podejmuj odpowiednie dziaania.

Kiedy sko czysz czyta ten rozdzia, bdziesz swobodnie posugiwa si modelem i klasami zdarze .

113

Komunikacja i zdarzenia

Zdarzenia mog by wyzwalane na wiele sposobów, zalenie od klasy. Jednak proces obsugi zdarze jest w caym ActionScript API standardowy. W tym rozdziale zapoznasz si z modelem zdarze ActionScript 3 poprzez zdefiniowanie jego faz oraz prac ze zdarzeniami klas Event, MouseEvent i KeyboardEvent. Nauczysz si take korzysta

z informacji przekazywanych przez wyzwolony obiekt zdarzenia, aby uproci programowanie w ActionScript.


Rozdzia 7.

Model zdarze w ActionScript 3 Model zdarze przyjty w ActionScript 3 sprawia, e komunikacja pomidzy obiektami jest prosta i spójna. W poprzednich wersjach ActionScript modele zdarze nie byy tak przejrzyste; istniao ich kilka i naleao uy odpowiedniego dla wykorzystywanej klasy. W ActionScript 3 model zdarze jest tylko jeden.

Szczegóy procesu zdarzeniowego Istniej trzy etapy procesu zdarzeniowego: X Deklaracja funkcji nasuchujcej — deklaracja

przypisuje funkcj nasuchujc zajcia zdarzenia. X Wyzwalanie zdarzenia — kiedy wewntrz

Model zdarze w ActionScript 3

klasy zachodzi zdarzenie, zostaje ono wyzwolone przez obiekt. Wraz ze zdarzeniem przekazywane s obiekty zdarzenia. Obiekty zdarzenia zawieraj informacje o zdarzeniu (rysunek 7.1).

Rysunek 7.1. Trzy etapy procesu obsugi zdarzenia. Do jednego obiektu mona przypisa wiele funkcji nasuchujcych, poniewa obiekt moe wyzwala róne rodzaje zdarze

114


Komunikacja i zdarzenia Tabela 7.1. Waciwoci klasy Event

X Funkcja nasuchujca lub obsugujca

— funkcja, która zawiera list instrukcji (kod) wywoywanych w odpowiedzi na „usyszenie” zdarzenia.

Waciwo

Opis

bubbles

Warto typu Boolean (true/false) wskazujca, czy zdarzenie rozchodzi si podobnie do bbelka

cancelable

Warto typu Boolean, która okrela, czy zachowanie przypisane do zdarzenia moe by anulowane

currentTarget

Obiekt i funkcja nasuchujca przetwarzajca obiekt zdarzenia w danej chwili

phase

Aktualna faza przepywu zdarzenia

target

Obiekt bdcy celem zdarzenia

Klasy wyzwalajce zdarzenia

type

Typ wyzwalanego zdarzenia

Wszystkie klasy, które wyzwalaj zdarzenia, uywaj metody dispachEvent() dziedziczonej po klasie EventDispacher lub stosuj interfejs IEventDispacher. Metoda dispachEvent() jest wywoywana, kiedy wewntrz klasy dzieje si co, co klasa chce ogosi

pozostaej czci aplikacji. Informacje majce zwizek ze zdarzeniem oraz inne parametry, które naley rozesa , przekazywane s (do funkcji nasuchujcej) wraz z obiektem zdarzenia. Wyzwolenie zdarzenia rozpoczyna proces zdarzeniowy.

„ Moesz programowa zdarzenia wasne dla

klas wasnych, jednak jest to zagadnienie poza zakresem tej ksiki. Wicej na ten temat dowiesz si, wyszukujc w Pomocy Flash haso EventDispatcher class.

Klasa Event jest klas bazow dla obiektów zdarze . Kiedy zdarzenie jest wyzwalane metod klasy EventDispacher (na przykad w wyniku uycia addEventListener), obiekt zdarzenia zostaje przekazany do metody (funkcji) nasuchujcej jako parametr. Obiekt ten zawiera dane zwizane ze zdarzeniem, które zaszo. Klasa Event zawiera standardowe waciwoci, metody i stae, które s uywane przez wikszo klas. Tabela 7.1 wymienia waciwoci klasy Event, które zostaj przekazane wraz z obiektem zdarzenia. Do tych waciwoci mona uzyska dostp w funkcji obsugujcej zdarzenie. W tej ksice bdziemy zajmowa si gównie najbardziej podstawowymi waciwociami obiektów zdarze — s to waciwoci type, target oraz currentTarget.

115

Model zdarze w ActionScript 3

Wskazówka

Funkcja nasuchujca zdarzenia i obsugujca zdarzenie s jednym i tym samym — funkcj, która nasuchuje zdarzenia, a take je obsuguje. Od tej pory bd nazywa j albo funkcj nasuchujc, albo obsugujc zdarzenia, powiniene wic pamita , e jest to ta sama funkcja.


Rozdzia 7. Rejestrowanie funkcji nasuchujcej

Tabela 7.2. Typy zdarze klasy Event

Funkcje nasuchujce s przypisywane (rejestrowane) do obiektów w celu nasuchiwania zajcia wyzwalanych przez te obiekty zdarze . Obiekt bdzie wyzwala zachodzce zdarzenia niezalenie od tego, czy zostaa zarejestrowana funkcja nasuchujca, która czeka na „usyszenie” lub „odebranie” zdarzenia.

Staa

Typ zdarzenia

ADDED_TO_STAGE

Obiekt zdarzenia "addedToStage"

CHANGE

Obiekt zdarzenia "change"

COMPLETE

Obiekt zdarzenia "complete"

ENTER_FRAME

Obiekt zdarzenia "enterFrame"

FULL_SCREEN

Obiekt zdarzenia "fullScreen"

INIT

Obiekt zdarzenia "init"

REMOVED

Obiekt zdarzenia "removed"

Funkcje nasuchujce musz zosta „podczone” do obiektu, aby móc usysze jego zdarzenia.

Model zdarze w ActionScript 3

Funkcje nasuchujce s przypisywane do obiektywów, kiedy okrelone zdarzenie, wyzwalane przez obiekt, jest wane dla funkcjonalnoci aplikacji — na przykad, kiedy uytkownik klika przycisk myszy (wyzwalane jest zdarzenie mouseDown) lub kiedy ko czy si adowanie obrazu (w takim przypadku jest do zdarzenie complete). Kada funkcja nasuchujca przypisana (zarejestrowana) do obiektu nasuchuje zdarzenia okrelonego typu. Typ wyzwalanego zdarzenia reprezentowany jest przez cig znaków, który przechowuje staa klasy. Stae to waciwoci tylko do odczytu, które si nie zmieniaj i s zwyczajowo zapisywane wielkimi literami. Jak powiedzielimy ju wczeniej, referencje do waciwoci statycznych s tworzone bezporednio poprzez nazw klasy. Klasa zdarzenia powizana z obiektem zdarzenia take przechowuje stae typów zdarze . Przykadowo, typem zdarzenia MouseEvent moe by mouseDown, czyli MouseEvent. ´MOUSE_DOWN. Powodem uycia staej zdarzenia (tutaj MOUSE_DOWN) zamiast cigu znaków ("mouseDown") dla okrelenia typu zdarzenia jest umoliwienie automatycznego uzupeniania kodu w edytorze ActionScript oraz wychwycenia przez kompilator wszelkich literówek, które mog wystpi przy wpisywaniu typu zdarzenia. Tabela 7.2 pokazuje niektóre najpopularniejsze typy zdarze klasy Event i odpowiadajce im zmienne

116

REMOVED_FROM_STAGE Obiekt zdarzenia "removedFromStage" RESIZE

Obiekt zdarzenia "resize"

SOUND_COMPLETE

Obiekt zdarzenia "soundComplete"

UNLOAD

Obiekt zdarzania "unload"


Komunikacja i zdarzenia Skadnia suca do dodawania funkcji nasuchujcej do obiektu zaczyna si od nazwy obiektu, po której nastpuje metoda addEventListener(): objectName.addEventListener();

Do metody addEventListener() naley przekaza

dwa obowizkowe parametry: X Typ zdarzenia, którego bdzie nasuchiwa . X Funkcj, która bdzie funkcj obsugujc

zdarzenie. Oto przykad: objectName.addEventListener(EventClass.EVENT_TYPE, ´EventHandlerFunction);

W taki sposób naleaoby zapisa nasuchiwanie zdarzenia MouseEvent powizanego z przyciskiem: buttonName.addEventListener(MouseEvent.MOUSE_UP, ´mouseUp);

Funkcje nasuchujce

function eventHandler(evt:Event):void { }

Do waciwoci obiektu zdarzenia mona uzyska

dostp, odwoujc si do parametru przekazywanego do funkcji nasuchujcej. Wskazówka „ Uycie cigu znaków (np. "mouseDown") zamiast staej zdarzenia (MOUSE_DOWN) jest

sposobem poprawnym, ale niezalecanym.

117

Model zdarze w ActionScript 3

Funkcja nasuchujca zdarzenia (nazywana take obsugujc zdarzenie) to funkcja lub metoda, która zostaa przypisana do obiektu, aby „nasuchiwa ” zajcia zdarzenia okrelonego typu. Jest deklarowana tak, jak kada inna funkcja, jednak jako parametr takiej funkcji musisz wskaza obiekt zdarzenia:


Rozdzia 7.

Praca z funkcjami nasuchujcymi Funkcje nasuchujce s kanaami obiegu wszystkich informacji w ActionScript. Zdarzenie jest wyzwalane, funkcja nasuchujca „syszy” je i obsuguje. Kiedy mówimy „obsuguje zdarzenie”, mamy na myli, e funkcja nasuchujca otrzymuje obiekt zdarzenia jako warto parametru i przechodzi do wykonania zawartego w sobie kodu.

Klasa Event Klasa flash.events.Event obsuguje najpopularniejsze zdarzenia ActionScript API. Na przykad, zdarzenie addedToStage jest wyzwalane przez kady obiekt wywietlania, który zostanie dodany do stou montaowego w czasie wykonywania.

Jak nasuchiwa zdarzenia klasy Event?

Praca z funkcjami nasuchujcymi

1. Umie poniszy kod ActionScript w pierwszej

klatce kluczowej nowego pliku. Kod tworzy now instancj obiektu klasy Sprite i przypisuje do niej funkcj nasuchujc zdarzenia addedToStage klasy Event: var s:Sprite = new Sprite(); s.addEventListener(Event.ADDED_TO_STAGE, ´spriteAddedHandler);

2. Dodaj kolejny fragment kodu, który tworzy funkcj nasuchujc zdarzenia ADDED_TO_STAGE: function spriteAddedHandler(evt:Event):void { trace("s zosta dodany do stou montaowego."); }

118


Komunikacja i zdarzenia 3. Wpisz nastpujcy kod, który doda obiekt Sprite

jako obiekt-dziecko do stou montaowego: addChild(s);

Rysunek 7.2. Funkcja nasuchujca spriteAddedHandler() jest wykonywana po wyzwoleniu zdarzenia Event.ADDED_TO_STAGE przez obiekt Sprite, co ma miejsce po dodaniu tego obiektu do stou montaowego Listing 7.1. Rejestrowanie funkcji nasuchujcej zdarzenia REMOVED_FROM_STAGE var s:Sprite = new Sprite(); s.addEventListener(Event.ADDED_TO_STAGE, ´spriteAddedHandler); s.addEventListener(Event.REMOVED_FROM_STAGE, ´spriteRemovedHandler);

Listing 7.2. Dodawanie funkcji nasuchujcej spriteRemoveHandler() i usuwanie sprajta z listy wywietlania

Wyjcie (rysunek 7.2). Do tego samego obiektu mona doda kilka funkcji nasuchujcych (jeden obiekt bdzie wyzwala zdarzenia rónych typów do rónych funkcji nasuchujcych). Kilka obiektów mona poczy

z jedn funkcj nasuchujc (standardowa funkcja nasuchujca bdzie identyfikowa typ wyzwolonego zdarzenia oraz obiekt, z którego zdarzenie to pochodzi).

Jak nasuchiwa kilku typów zdarze klasy Event? 1. Dodaj kod wyróniony w listingu 7.1, który

zarejestruje funkcj nasuchujc zdarzenia typu REMOVED_FROM_STAGE klasy Event. 2. Dodaj kod wyróniony w listingu 7.2, który tworzy funkcj obsugujc spriteRemoveHandler i usuwa obiekt Sprite ze stou montaowego. 3. Obejrzyj dziaanie pliku. W panelu Wyjcie

powinna zosta wywietlona widomo funkcji spriteRemovedHandler() (rysunek 7.3). Powysze wiczenie pokazao, e do jednego obiektu mona przypisa kilka funkcji nasuchujcych — po jednej dla kadego typu wyzwalanego zdarzenia.

Rysunek 7.3. Funkcja nasuchujca spriteRemoveHandler() jest wywoywana, kiedy obiekt Sprite jest usuwany ze stou montaowego, co wyzwala zdarzenie REMOVED_FROM_STAGE

119

Praca z funkcjami nasuchujcymi

function spriteAddedHandler(evt:Event):void { trace("s zosta dodany do stou ´montaowego."); } function spriteRemovedHandler(evt:Event):void { trace("s zosta usunity ze stou ´montaowego."); } this.addChild(s); this.removeChild(s);

4. Obejrzyj dziaanie pliku. Wiadomo z instrukcji trace() powinna zosta wywietlona w panelu


Rozdzia 7. Praca z obiektami zdarze Referencje do obiektów klasy Event tworzone s poprzez wywoywanie obiektu Event przekazywanego jako parametr do funkcji nasuchujcej. Waciwoci przekazywane z obiektem tego rodzaju znajdziesz w tabeli 7.1.

Jak uzyska dostp do waciwoci obiektu zdarzenia? 1. Wró do pliku z poprzedniego wiczenia. 2. Zmodyfikuj kod ActionScript tak, aby wywietla

typ zdarzenia oraz cel zdarzenia (listing 7.3). 3. Obejrzyj dziaanie pliku. Waciwoci obiektu Event powinny zosta wywietlone w panelu

Listing 7.3. Wywoywanie waciwoci obiektu klasy Event i wywietlanie ich w panelu Wyjcie function spriteAddedHandler(evt:Event):void { //trace("s zosta dodany do stou ´montaowego."); trace("Obiekt klasy Event: " + evt); trace("Typ zdarzenia: " + evt.type); trace("Cel zdarzenia: " + evt.target); } function spriteRemovedHandler(evt:Event):void { //trace("s zosta usunity ze stou ´montaowego."); } this.addChild(s); this.removeChild(s);

Wyjcie (rysunek 7.4). Wskazówka

Praca z funkcjami nasuchujcymi

„ Dobrym sposobem wykorzystania waciwoci

obiektu zdarzenia jest sprawdzenie kilku typów zdarze w pojedynczej funkcji obsugujcej zamiast tworzenia osobnych funkcji dla kadego z typów nasuchiwanych zdarze . Przyjrzymy si temu bliej w kolejnym podrozdziale.

Klasa MouseEvent Niektóre obiekty bd wymagay wyzwolenia dodatkowych typów zdarze , których klasa Event nie potrafi ju obsuy . Bdziemy musieli uy

„wzbogaconego” obiektu zdarzenia. Takie wzbogacone klasy rozszerzaj klas Event, aby móc obsuy dodatkowe typy zdarze i waciwoci. Przykadem jest klasa flash.events.MouseEvent. Klasa MouseEvent jest jedn z najczciej uywanych klas zdarze w ActionScript. Bez moliwoci obsugiwania zdarze myszy interakcje z uytkownikiem byyby bardzo ograniczone. Tabela 7.3 wymienia wszystkie typy zdarze klasy MouseEvent dostpne w ActionScript API.

120

Rysunek 7.4. Wywietlanie waciwoci obiektu klasy Event Tabela 7.3. Typy zdarze klasy MouseEvent Staa

Typ zdarzenia

CLICK

Obiekt zdarzenia "click"

DOUBLE_CLICK

Obiekt zdarzenia "doubleClick"

MOUSE_DOWN

Obiekt zdarzenia "mouseDown"

MOUSE_MOVE

Obiekt zdarzenia "mouseMove"

MOUSE_OUT

Obiekt zdarzenia "mouseOut"

MOUSE_OVER

Obiekt zdarzenia "mouseOver"

MOUSE_UP

Obiekt zdarzenia "mouseUp"

MOUSE_WHEEL

Obiekt zdarzenia "mouseWheel"

ROLL_OUT

Obiekt zdarzenia "rollOut"

ROLL_OVER

Obiekt zdarzenia "rollOver"


Komunikacja i zdarzenia Listing 7.4. Dodawanie funkcji nasuchujcej zdarzenia typu MOUSE_DOWN

Jak nasuchiwa zdarze myszy? 1. Narysuj na stole montaowym prostoktny ksztat.

btnButton1.addEventListener(MouseEvent.MOUSE_ ´DOWN, mouseEventHandler); function mouseEventHandler(evt:MouseEvent):void { trace("Typ zdarzenia: " + evt.type); }

2. Zaznacz ksztat i skonwertuj go na symbol

przycisku. 3. Nadaj instancji przycisku na stole montaowym nazw btnButton1. 4. Utwórz now warstw Actions.

Listing 7.5. Obiekt wyzwala trzy zdarzenia klasy MouseEvent do tej samej funkcji nasuchujcej/obsugujcej btnButton1.addEventListener(MouseEvent.MOUSE_ ´DOWN, mouseEventHandler); btnButton1.addEventListener(MouseEvent.MOUSE_ ´UP, mouseEventHandler); btnButton1.addEventListener(MouseEvent.MOUSE_ ´OVER, mouseEventHandler); function mouseEventHandler(evt:MouseEvent): ´void { trace("Typ zdarzenia: " + evt.type); }

5. Wpisz kod z listingu 7.4, dodajcy do przycisku btnButton1 funkcj nasuchujc, która bdzie nasuchiwa zdarzenia typu MOUSE_DOWN klasy MouseEvent. 6. Obejrzyj dziaanie pliku. Wiadomo z instrukcji trace() powinna zosta wywietlona w panelu Wyjcie po klikniciu przycisku. 7. Zmodyfikuj kod ActionScript tak, aby do tej

samej funkcji nasuchujcej przypisa zdarzenia MOUSE_OVER oraz MOUSE_UP klasy MouseEvent (listing 7.5). 8. Obejrzyj dziaanie pliku. W panelu Wyjcie

Praca z funkcjami nasuchujcymi

powiniene zobaczy informacje o trzech typach zdarze (rysunek 7.5).

Rysunek 7.5. Pojedyncza funkcja obsugujca uywa waciwoci type obiektu klasy MouseEvent do wywietlania informacji o rónych zdarzeniach myszy w panelu Wyjcie

121


Rozdzia 7. Wykrywanie zdarze kilku typów za pomoc tej samej funkcji obsugujcej Zwyczajem kadego zaawansowanego programisty jest pisanie tak maej iloci kodu, jak to moliwe. Dziki temu wzrasta wydajno aplikacji, a zarzdzanie i aktualizowanie kodu staje si atwiejsze. Dobr okazj do zoptymalizowania iloci kodu jest zmniejszenie liczby funkcji obsugujcych zdarzenia. Tworzc referencje do waciwoci type obiektu zdarzenia, mona okreli typ zdarzenia i na tej podstawie wykona

odpowiednie dziaania w funkcji obsugujcej.

Jak sprawdzi wystpienie kilku typów zdarze w jednej funkcji nasuchujcej? 1. Wró do pliku z poprzedniego wiczenia. 2. Tu poniej instrukcji trace() w funkcji mouseEventHandler obsugujcej zdarzenia

dodaj kod z listingu 7.6.

Praca z funkcjami nasuchujcymi

Instrukcje warunkowe zostan omówione w rozdziale 12.

Klasa KeyboardEvent Klasa flash.events.KeyboardEvent to kolejna klasa rozszerzajca klas Event. Klasa KeyboardEvent zawiera dwa nowe zdarzenia, które dodaj funkcjonalno klawiatury do aplikacji: keyDown i keyUp. Ich stae to odpowiednio KEY_DOWN oraz KEY_UP. Aby nasuchiwa globalnie zdarze klawiatury na poziomie aplikacji, mona przypisa funkcj nasuchujc do stou montaowego: stage.addEventListener(). Taka funkcja moe nasuchiwa zdarze KEY_DOWN i KEY_UP i wywoywa

odpowiednie dla nich procedury. Aby móc wykrywa i reagowa na nacinicie klawisza, naley zadeklarowa funkcj nasuchujc zdarzenia klasy KeyboardEvent. Kombinacje klawiszy, na przykad z klawiszem Ctrl, Alt lub Shift, take mog zosta wykryte. Te waciwoci wymienia tabela 7.4.

122

Listing 7.6. Uycie instrukcji warunkowej if w celu wyboru odpowiedniego typu zdarzenia klasy MouseEvent w pojedynczej funkcji obsugujcej zdarzenie. Kiedy literalna nazwa typu zdarzenia bdzie odpowiada cigowi znaków instrukcji if, ta instrukcja zostanie wykonana function mouseEventHandler(evt:MouseEvent): ´void { trace("Typ zdarzenia: " + evt); if (evt.type == "MOUSE_DOWN") { trace("Zdarzenie mouseDown. Zrób co."); } else if (evt.type == "MOUSE_UP") { trace("Zdarzenie mouseUp. Zrób co."); } else if (evt.type == "MOUSE_OVER") { trace("Zdarzenie mouseOver. Zrób co."); } }

Tabela 7.4. Waciwoci klasy KeyboardEvent Waciwo

Opis

charCode

Kod znaku dla nacinitego lub zwolnionego klawisza

keyCode

Kod nacinitego lub zwolnionego klawisza

keyLocation

Pooenie nacinitego lub zwolnionego klawisza na klawiaturze

ctrlKey

True, jeli klawisz jest nacinity, false, jeli nie

altKey

True, jeli klawisz jest nacinity, false, jeli nie

shiftKey

True, jeli klawisz jest nacinity, false, jeli nie


Komunikacja i zdarzenia Listing 7.7. Wywietlanie kodu klawisza w panelu Wyjcie stage.addEventListener(KeyboardEvent.KEY_DOWN, ´downEventHandler); function downEventHandler(evt:KeyboardEvent): ´void { trace("Warto keyCode: " + evt.keyCode); }

Listing 7.8. Nasuchiwanie nacinicia klawisza W stage.addEventListener(KeyboardEvent.KEY_DOWN, ´downEventHandler); function downEventHandler(evt:KeyboardEvent):void { if (evt.keyCode == 87) { trace("Warto keyCode: " + ´evt.keyCode); } }

Wykrywanie rodzaju klawisza osigane jest poprzez porównanie wartoci keyCode aktualnie nacinitego klawisza ze standardowymi wartociami sucymi do identyfikacji klawiszy w ActionScript.

Jak wykrywa zdarzenia klawiatury i wartoci klawiszy? 1. Dodaj do stou montaowego kod z listingu 7.7, aby nasuchiwa zdarzenia KEY_DOWN i uy

instrukcji trace() do wywietlania wartoci waciwoci keyCode w panelu Wyjcie. 2. Obejrzyj dziaanie pliku. Nacinij klawisz W;

w panelu Wyjcie powinna zosta wywietlona wiadomo Warto keyCode: 87. 3. Umie instrukcj trace() funkcji downEventHandler() wewntrz bloku instrukcji warunkowej if, która zostanie wykonana tylko

wtedy, kiedy uytkownik nacinie klawisz W (listing 7.8). 4. Obejrzyj dziaanie pliku. Instrukcja trace()

Pen list kodów klawiszy mona znale na stronie Adobe LiveDocs: http://livedocs.adobe.com/flash/ 9.0/main/00001136.html. Wskazówka „ Ogldanie dziaania pliku bezporednio

w rodowisku Flash moe spowodowa , e nacinicia niektórych klawiszy nie bd rejestrowane przez odtwarzacz, poniewa samo rodowisko bdzie traktowa je jako wasne skróty klawiszowe i bdzie zakóca

prac odtwarzacza.

123

Praca z funkcjami nasuchujcymi

zostanie wykonana tylko wtedy, kiedy warto

keyCode bdzie odpowiadaa liczbie 87 wskazanej w instrukcji if.


Rozdzia 7. Usuwanie powizania z funkcjami nasuchujcymi Tak samo wane, jak dodawanie funkcji nasuchujcych do obiektów, jest ich usuwanie, kiedy chcemy usun obiekt ze stou montaowego lub nie musimy ju nasuchiwa zdarze tego obiektu. Mimo e obiekt nie bdzie ju potrzebny, jego powizania z funkcjami nasuchujcymi pozostan i bd dalej pochania zasoby komputera. Aby usun przypisanie funkcji nasuchujcej, uyjemy skadni zblionej do tej, która posuya do dodania tej funkcji, z wyjtkiem wywoywanej metody, któr bdzie tym razem removeEventListener(). Pierwszym krokiem przy usuwaniu funkcji nasuchujcej jest wywoanie obiektu, do którego zostaa przypisana ta funkcja. Kolejny krok to wywoanie metody removeEventListener(), a ostatnim jest wskazanie jako parametrów typu zdarzenia i funkcji nasuchujcej:

Praca z funkcjami nasuchujcymi

objectName.removeEventListener(EventClass.EVENT_TYPA, ´eventHandler);

Jak usun powizanie z funkcj nasuchujc? 1. Dodaj kod z listingu 7.9, który deklaruje funkcj nasuchujc zdarzenia MOUSE_DOWN klasy MouseEvent dla stou montaowego. 2. Za instrukcj trace() dodaj instrukcj removeEventListener(), która usunie

przypisanie funkcji nasuchujcej zdarzenia MouseEvent.MOUSE_DOWN ze stou montaowego

(listing 7.10). 3. Obejrzyj dziaanie pliku. Kliknij stó montaowy

— zobaczysz komunikat Kliknito stó montaowy. Ponownie kliknij stó montaowy. Tym razem nie zobaczysz komunikatu, poniewa powizanie z funkcj nasuchujc zdarzenia MOUSE_DOWN zostao usunite.

124

Listing 7.9. Nasuchiwanie zdarzenia MOUSE_DOWN dla stou montaowego stage.addEventListener(MouseEvent.MOUSE_DOWN, ´stageClickHandler); function stageClickHandler(evt:MouseEvent):void { trace("Kliknito stó montaowy."); }

Listing 7.10. Usuwanie funkcji nasuchujcej zdarzenia MOUSE_DOWN stage.addEventListener(MouseEvent.MOUSE_DOWN, ´stageClickHandler); function stageClickHandler(evt:MouseEvent): ´void { trace("Kliknito stó montaowy."); stage.removeEventListener(MouseEvent.MOUSE_ ´DOWN, stageClickHandler); }


Komunikacja i zdarzenia

Przepyw zdarze Przepyw zdarze to koncepcja nowa w ActionScript 3, majca zastosowanie gównie w poczeniu z obiektami MouseEvent i KeyboardEvent. Kiedy wyzwalane jest zdarzenie, na przykad z przycisku, takie jak zdarzenie klasy MouseEvent, w istocie nie jest ono wyzwalane tylko przez sam przycisk, ale take przez obiekty wywietlania-pojemniki, w których znajduje si ten przycisk (rysunek 7.6).

Rysunek 7.6. Trzy fazy przepywu zdarze

Ta zasada moe okaza si przydatna, na przykad, kiedy dysponujesz obiektem wywietlaniapojemnikiem klasy MovieClip, w którym znajduje si kilka przycisków. Zamiast przypisywa funkcje nasuchujce do kadego przycisku w pojemniku MovieClip, moesz przypisa pojedyncz funkcj nasuchujc do samego pojemnika. Nastpnie moesz sprawdza , który z przycisków w pojemniku zosta kliknity, poprzez odczytywanie waciwoci target i currentTarget obiektu MouseEvent. Przepyw zdarze dzieli si na trzy fazy: X Faza przechwytywania — zdarzenie rozpoczyna

przepyw na stole montaowym i przechodzi przez wszystkie obiekty wywietlania, a dotrze do obiektu, w którym ma powstawa (zosta

wyzwolone). wyzwalane przez obiekt docelowy. X Faza bbelkowania — jeli w chwili tworzenia obiektu zdarzenia waciwo Bubbles okrelona

zostaa jako prawdziwa, zdarzenie zaczyna porusza si jak bbelek ponownie w gór do kolejnych nadrzdnych obiektów-pojemników, a do osignicia stou montaowego. Rónica pomidzy fazami przechwytywania i bbelkowania polega na tym, e moesz pracowa

ze zdarzeniem, kiedy porusza si w dó w fazie przechwytywania lub (i) kiedy porusza si w gór po fazie osigania celu. Jeli bdziesz chcia uywa

tylko fazy przechwytywania, ustaw warto true dla dodatkowego parametru useCapture po wskazaniu obiektu zdarzenia w funkcji obsugujcej: function eventHandler (evt:EventObject, ´useCapture=true);

125

Przepyw zdarze

X Faza osigania celu — zdarzenie jest


Rozdzia 7. Domylnie wartoci useCapture jest false, a zdarzenia s obsugiwane zarówno w fazie osigania celu, jak i bbelkowania. Chcc pracowa ze zdarzeniami w rónych fazach przepywu, uyj waciwoci target i currentTarget obiektu zdarzenia. Waciwo currentTarget zawsze wskazuje na obiekt, do którego przypisano funkcj obsugujc, waciwo target natomiast na obiekt bdcy celem w biecej chwili przepywu zdarzenia. Powiedzmy, e przycisk o nazwie button1 znajduje si na licie wywietlania klipu filmowego buttonContainer, do którego przypisano funkcj o nazwie clickHandler obsugujc zdarzenie MOUSE_DOWN. Jeli wskanik myszy bdzie umieszczony nad przyciskiem button1 w chwili kliknicia klipu buttonContainer, waciwo currentTarget obiektu klasy MouseEvent zwróci buttonContainer, a waciwo target zwróci button1.

Jak pracowa z przepywem zdarze? 1. Narysuj na stole montaowym prostokt,

który bdzie móg posuy za przycisk.

Przepyw zdarze

2. Skonwertuj prostokt na symbol przycisku o nazwie Button. 3. Przecignij na stó montaowy dodatkowe dwie instancje symbolu Button. 4. Nadaj instancjom symbolu Button nazwy button1, button2 i button3. 5. Zaznacz wszystkie instancje symbolu Button

na stole montaowym i skonwertuj na symbol klipu filmowego o nazwie ButtonContainer. Wszystkie trzy instancje przycisków znajd si wewntrz instancji ButtonContainer. 6. Nadaj instancji symbolu ButtonContainer nazw buttonContainer. 7. Utwórz now warstw Actions.

126


Komunikacja i zdarzenia Listing 7.11. Wywietlanie waciwoci target i currentTarget obiektu klasy MouseEvent function buttonEventHandler(evt:MouseEvent): ´void { trace("Waciwo target:: " + ´DisplayObject(evt.target).name); trace("Waciwo currentTarget: " + ´DisplayObject(evt.currentTarget).name); }

Rysunek 7.7. Wartoci waciwoci currentTarget jest zawsze buttonContainer, poniewa funkcj nasuchujc przypisano do wanie tego obiektu. Wartoci waciwoci natomiast zmieniaj si dla kadego przycisku i s nimi obiekty docelowe pod kursorem myszy w chwili zajcia zdarzenia mouseDown, czyli kliknicia.

8. W warstwie Actions wpisz nastpujcy kod,

który doda funkcj nasuchujc do klipu buttonContainer — bdzie ni funkcja o nazwie buttonEventHandler: buttonContainer.addEventListener(MouseEvent.M OUSE_DOWN, buttonEventHandler);

9. Dodaj do skryptu kod z listingu 7.11, aby

stworzy funkcj nasuchujc i wywietli

w panelu Wyjcie waciwoci target i currentTarget obiektu klasy MouseEvent. Zauwa, e wewntrz instrukcji trace() waciwoci evt.target i currentTarget s konwertowane na obiekty DisplayObject przed wywoaniem ich waciwoci name. Zrobilimy to, poniewa waciwoci target i currentTarget to referencje bdce a cuchami znaków do nazw obiektów DisplayObject, a nie do samych obiektów. Konwersja zapobiega wywoaniu ich bezporednio jako obiektów DisplayObject. Metoda DisplayObject() nakazuje programowi traktowa waciwoci target i currentTarget jako obiekty wywietlania, które mona wywoywa i kontrolowa z kodu ActionScript. 10. Obejrzyj dziaanie pliku. Kliknij kolejne przyciski

i zobacz, jakie informacje wywietla instrukcja trace() w panelu Wyjcie (rysunek 7.7).

„ Rozrónianie pomidzy fazami bbelkowania

i przechwytywania jest uyteczne w przypadku zoonych interakcji pomidzy komponentami, gdzie pewne zdarzenia musz zosta

przechwycone, zanim osign okrelone obiekty, lub kod musi by wykonany dokadnie w fazie bbelkowania. Na tym etapie nauki nie musisz przejmowa si obiegiem zdarze , chocia wiedza na jego temat bdzie przydatna przy wykrywaniu bdów w kodzie zwizanym z obsug interaktywnoci myszy lub wszdzie, gdzie spodziewasz si, e bd jest wynikiem problemu z przepywem zdarze .

127

Przepyw zdarze

Wskazówka


Rozdzia 7.

Podklasy klasy Event W tym rozdziale om贸wilimy klasy Event, MouseEvent oraz KeyboardEvent. W nastpnych rozdziaach bdziemy pracowali z wieloma innymi podklasami klasy Event. Tabela 7.5 zawiera zestawienia popularnych podklas klasy Event. Jeli bdziesz chcia zapozna si z pen list podklas i opisem kadej z nich, wyszukaj w Pomocy Flash wyraenie Event class.

Podklasy klasy Event

Tabela 7.5. Podklasy klasy Event Klasa

Opis

ColorPickerEvent

Obiekt zdarzenia powizany z komponentem ColorPicker

FocusEvent

Obiekt zdarzenia uywany, kiedy fokus przenosi si z jednego obiektu na drugi

KeyboarEvent

Obiekt zdarzenia uywany do rozpoznawania klawiszy klawiatury

MetadataEvent

Obiekt zdarzania uywany w chwili otrzymania pakietu metadanych z FLV wideo

MotionEvent

Obiekt zdarzenia wyzwalany przez klas fl.motion.Animator

MouseEvent

Obiekt zdarzenia wyzwalany w chwili zajcia zdarzenia myszy

NetStatusEvent

Obiekt zdarzenia wyzwalany przez klasy NetConnection, Netstream i SharedObject w chwili zmiany ich statusu

ProgressEvent

Obiekt zdarzenia wyzwalany przez obiekty loader w regularnych odstpach czasu po rozpoczciu operacji wczytywania

SoundEvent

Obiekt zdarzenia wyzwalany przez obiekt Sound w chwili zmiany ustawie

TextEvent

Obiekt zdarzenia wyzwalany podczas interakcji z obiektem textField (polem tekstowym) lub zmiany jego zawartoci

TimeEvent

Obiekt zdarzenia wyzwalany przez obiekt Timer w okrelonych odstpach czasu

TweenEvent

Obiekt zdarzenia wyzwalany przez klas fl.transitions.Tween

VideoEvent

Obiekt zdarzenia wyzwalany w chwili zmiany statusu wideo

128


ActionScript 3.0. Szybki start