r09-04, Księgozbiór, Studia, Informatyka


Część 5.

Przetwarzanie informacji

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic

Części składowe języka HTML


0x08 graphic
Kiedy w filmie Flasha wyświetlana jest grafika, animacja i odtwarzane są dźwięki, wiele rzeczy dzieje się „za kulisami” - rzeczy, których odbiorca filmu nie dostrzega. Dokument Flasha może przetwarzać niezliczoną ilość informacji, np. liczbę żyć, które pozostały jeszcze graczowi, nazwę użytkownika i hasło, czy też artykuły, które klient umieścił w wirtualnym koszyku. Określanie i przechowywanie takich informacji wymaga zastosowania zmiennych, które stanowią niejako pojemniki na dane. Zmienne są kluczowym elementem każdego filmu Flasha z mocno rozbudowaną interaktywnością, jako że umożliwiają tworzenie scenariuszy działań w oparciu o zmieniające się informacje. Zmienne można modyfikować, a następnie używać ich w wyrażeniach - formułach łączących zmienne z innymi zmiennymi i wartościami - i sprawdzać informacje, ustalając warunki, w celu określenia dalszego zachowania filmu Flasha. Takie właśnie sprawdzanie wykonuje się przy pomocy wyrażeń warunkowych, kontrolujących przepływ informacji. Wyrażenia warunkowe szacują napływające dane, a potem nakazują Flashowi wykonanie działania określonego na podstawie otrzymanej informacji. Wyobraźmy sobie sytuacją, w której wyrażeń warunkowych możesz użyć choćby do odbicia piłki w przypadku wystąpienia jej kolizji ze ścianą czy też do zwiększenia szybkości poruszania się piłki, jeśli czas gry przekroczy jedną minutę.

Niniejszy rozdział opowiada o zarządzaniu danymi za pomocą zmiennych, wyrażeń i warunków. Zetknąłeś się już częściowo z tym tematem we wcześniejszych rozdziałach, teraz jednak omówimy go bardziej szczegółowo. Zrozumienie zasad wprowadzania, modyfikowania i szacowania danych pomoże ci prawdziwie „reżyserować” twoje filmy i dynamicznie zmieniać poszczególne jego elementy: grafikę, animację i dźwięk.

0x08 graphic
Deklarowanie danych

Zmienne służą do przechowywania informacji. Zmienne możesz tworzyć, zmieniać ich zawartość i odrzucać w dowolnej chwili. Proces podstawiania informacji do zmiennej po raz pierwszy nazywa się deklarowaniem zmiennej. Deklarowanie i przekształcanie zmiennej odbywa się przy udziale akcji set variable. Zmienne deklarowałeś już wcześniej, tylko nie nazywaliśmy tak tego procesu. Kiedy tworzysz nowe obiekty za pomocą akcji set variable, jak w wyrażeniu mójKolor = nowy Kolor (mójKlipFilmowy), jednocześnie deklarujesz zmienną (tutaj mójKolor). W tym akurat przypadku zmienna przechowuje obiekt koloru, ale ogólnie może przechowywać dowolny typ informacji, np. liczbę, litery, wartość — prawda lub fałsz, a nawet odwołanie do innej zmiennej. Różne typy informacji przechowywanych w zmiennych noszą nazwę typów danych.

Zmienne i typy danych

Przykładami typowych zmiennych mogą być: wynik gracza (zmienna liczbowa), obiekt dźwiękowy (zmienna łańcucha danych), stan włączony lub wyłączony przycisku wyboru (radio button) (zmienna boole'owska). Typ danych przechowywanych w zmiennej można łatwo zmienić. Zmienna zadeklarowana pierwotnie jako zmienna liczbowa może zostać zmieniona w dowolnej chwili odtwarzania filmu na zmienną łańcucha danych przez wprowadzenie nowej akcji set variable. Jednak lepiej jest utrzymywać stały typ zadeklarowanych zmiennych, dzięki czemu w czasie manipulowania nimi nie zostaniesz zaskoczony niespodziewanymi rezultatami (jak np. mnożenie łańcucha znaków przez inny łańcuch znaków). Różne typy danych przechowywanych w zmiennych przedstawia tabela 9.1.

Nazwy zmiennych powinny opisywać rodzaj przechowywanych w nich informacji. Na przykład, punktyGracza prędkośćPojazdu są zupełnie poprawnymi nazwami zmiennych i z pewnością przyprawią cię o mniejszy ból głowy, niż coś w rodzaju xyz lub mojaZmienna. Zwykle zapisuje się nazwy zmiennych bez spacji pomiędzy wyrazami, za to z wielką literą rozpoczynającą każdy kolejny wyraz za wyjątkiem pierwszego.

Tabela 9.1. Typy danych do przechowywania w zmiennych

Typ danych Opis Przykład

Liczba

Wartość liczbowa.

mójWynik = 24

Łańcuch znakowy

Sekwencja znaków, liczb lub symboli. Łańcuch zawsze zapisuje się w cudzysłowie.

twójEmail = "johndoe@domena.com"

Typ boole'owski

Wartość typu prawda (true) lub fałsz (false). Nie stosuje się cudzysłowu. Zamiast prawda można pisać 1, a w miejsce słowa fałsz podstawiać 0.

przyciskOpcji = true

Obiekt

Nazwa obiektu utworzonego za pomocą funkcji konstruktora.

mójKolor = nowy Kolor(mójFilm)

0x08 graphic
0x01 graphic

Rys. 9.1. Zmienne można deklarować do przechowywania różnych typów informacji. Liczba (u góry) wymaga zaznaczenia pola wyboru Expression obok pola Value. W przypadku łańcucha znakowego (u dołu) pole wyboru Expression obok pola Value pozostawia się niezaznaczone

W celu zadeklarowania zmiennej:

  1. Zaznacz pierwsze ujęcie kluczowe na głównej listwie czasowej i otwórz paletę akcji.

  2. Wybierz Actions/set variable (Esc + sv).

  3. W polu Variable palety akcji wpisz nazwę zmiennej. Pole Expression pozostaw niezaznaczone.

  4. W polu Value wprowadź informację, którą ma przechowywać zmienna. Może to być liczba, nowy obiekt, łańcuch znaków lub wartość boole'owska. Pole Expression pozostaw niezaznaczone, jeśli użyłeś łańcucha znakowego jako typu zmiennej (rys. 9.1).

Wskazówki

  • Istnieją pewne słowa, których nie możesz używać w nazwach zmiennych, ponieważ są zarezerwowane dla specjalnych funkcji lub słów kluczowych języka ActionScript. Jeśli użyjesz tych słów jako zmiennych, Flash będzie je mylił właśnie ze słowami kluczowymi lub funkcjami, którym normalnie odpowiadają. Wśród nich znajdują się następujące słowa: break, for, new, var, continue, function, return, void, delete, if, this, while, else, in, typeof, with, true i false.

  • Dobrze jest deklarować zmienne w pierwszym ujęciu na listwie czasowej. W ten sposób trzymasz je wszystkie w jednym miejscu i łatwo możesz przejść do edycji ich wartości.

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
Często będzie zachodzić potrzeba podstawienia do zmiennej określonej właściwości obiektu i przechowania jej na później. Przykładowo, mógłbyś chcieć zachować współrzędne x i y klipu filmowego, żeby po przeciągnięciu klipu przez użytkownika w nowe miejsce, Flash mógł przywrócić jego pierwotną pozycję. W celu wywołania takiej właściwości można posłużyć się ścieżką dostępu do niej (używając składni z kropką) lub też funkcją getProperty.

W celu
przypisania właściwości do zmiennej
przez podanie ścieżki dostępu:

  1. Zaznacz pierwsze ujęcie kluczowe na listwie czasowej i otwórz paletę akcji.

  1. Wybierz Actions/set variable.

  2. W polu Variable palety akcji wpisz nazwę swojej zmiennej. Pole Expression pozostaw niezaznaczone.

  3. W polu Value wprowadź ścieżkę dostępu do wybranej właściwości, oddzielając kolejne poziomy kropką. Zaznacz pole Expression (rys. 9.2).

W celu
przypisania właściwości do zmiennej
przez zastosowanie
funkcji getProperty:

  1. Zaznacz pierwsze ujęcie kluczowe na listwie czasowej i otwórz paletę akcji. Wybierz Actions/set variable.

  1. W polu Variable palety akcji wpisz nazwę swojej zmiennej.

  2. W polu Value wybierz Functions/ getProperty.

W polu Value pojawi się akcja getProperty wraz z argumentami target oraz property (rys. 9.3).

0x01 graphic

Rys. 9.2. Użyj składni z kropką do podstawienia właściwości obiektu do zmiennej. Tutaj zmiennej myXPosition odpowiada współrzędna x obiektu myMovieClip w głównej listwie czasowej. Obecnie zmienna ta przechowuje wartość 100

0x01 graphic

Rys. 9.3. Akcja getProperty wymaga podania argumentów target i property

0x08 graphic
0x01 graphic

Rys. 9.4. Argumentem target jest ścieżka _root.myMovieClip, a właściwość to współrzędna x klipu filmowego myMovieClip. Wartość ta przypisana jest zmiennej myXPosition

  1. W miejsce argumentu target wpisz ścieżkę dostępu, a w miejsce argumentu property - wybraną właściwość. Zaznacz pole Expression (rys. 9.4).

Wskazówka

  • Kiedy przypisujesz zmiennej właściwość lub odwołanie do innej zmiennej, Flash określa aktualną wartość i podstawia ją do zmiennej. Jeśli taka właściwość lub odwołanie do zmiennej zmienia swoją wartość, wartość twojej zmiennej pozostanie taka sama jak na początku, aż do momentu przypisania jej wartości na nowo. Oto przykład:

xPosition = _xmouse

Po zadeklarowaniu tej zmiennej, o nazwie xPosition w pierwszym ujęciu twojego filmu, przechowuje ona wartość współrzędnej x położenia wskaźnika myszy. W czasie przesuwania wskaźnika po ekranie właściwość _xmouse oczywiście ulega zmianie, jednak wartość zmiennej xPosition pozostaje taka, jak w momencie deklaracji (czyli wykonania akcji wyrażenia set variable). Żeby zmienna mogła przyjmować nowe wartości, trzeba umieścić ją w pętli, tak jak zdarzenia klipu filmowego EnterFrame lub Mouse move.

0x08 graphic
Łańcuchy znakowe i wyrażenia

Kiedy używasz akcji set variable do podstawienia informacji do zmiennej, masz możliwość zaznaczenia opcji Expression w bloku edycji parametrów dla pól Variable oraz Value (rys. 9.5). Zaznaczenie tej opcji dla pola Value powoduje usunięcie znaku cudzysłowu otaczającego wprowadzoną informację i traktowanie jej jako wyrażenia, a nie łańcucha znakowego. Wyrażenie to linia kodu, mogąca zawierać zmienne, właściwości i obiekty, które muszą zostać oszacowane, zanim Flash będzie mógł określić ich wartość. Wyrażenie przypomina wzór matematyczny, np. a2 + b2. Wartość wyrażenia musi zostać obliczona, zanim nastąpi przypisanie jej do zmiennej (rys. 9.6). Z drugiej strony, łańcuch znakowy jest traktowany przez Flasha po prostu jako grupa znaków. W tym przypadku wzór a2 + b2 jest tylko i wyłącznie sekwencją siedmiu znaków (przy wyliczeniu odstępów). Kiedy deklarujesz zmienną znakową, musisz pozostawić pole Expression niezaznaczone. W przypadku każdego innego typu danych pole to powinno być zaznaczane. Z kolei zaznaczenie pola Expression, widniejącego obok pola Variable, zmienia całe wyrażenie w oknie skryptu, nadając mu formę set (variable, value). Ta składnia umożliwia jednoczesne wprowadzenie wyrażenia zmiennej i jej wartości. Na przykład, wybierając dla zmiennych nazwy player1, player2 i player3, możesz je szybko utworzyć za pomocą wyrażenia "player" + counter, gdzie counter jest również zmienną, przechowującą liczbę (rys. 9.7). Ten rodzaj wyrażenia zostanie omówiony w dalszej części rozdziału.

0x01 graphic

Rys. 9.5. Dla pól Variable oraz Value w bloku edycji parametrów są dostępne pola wyboru Expression

0x01 graphic

Rys. 9.6. Przykłady wyrażeń. Nazwy zmienne stoją po lewej stronie znaku równości, wyrażenia po prawej

0x01 graphic

Rys. 9.7. Akcja set action (dostępna tylko przy wykorzystaniu akcji set variable) pozwala użyć wyrażenia dla nazwy zmiennej

Tabela 9.2. Najczęściej spotykane sekwencje opuszczania znaku0x08 graphic

Wskazówka

  • Skoro znak cudzysłowu zawsze otacza domyślny łańcuch znakowy, to jak wprowadzić cudzysłów dla właściwego, wprowadzonego przez ciebie łańcucha znaków? Robi się to, wpisując odwrócony ukośnik (\) przed cudzysłowem. Nazywa się to opuszczaniem znaku. Na przykład, łańcuch znakowy „The line, \”Call me Shane\” is from a 1953 movie Western” odczytuje się jako: The line, ”Call me Shane” is from a 1953 movie Western. Kilka najczęściej używanych sekwencji opuszczania znaków specjalnych przedstawia tabela 9.2.

Sekwencja Znak

\b

Backspace

\r

Return

\t

Tab

\"

Cudzysłów

\'

Pojedynczy cudzysłów

\\

Odwrócony ukośnik

0x08 graphic
Posługiwanie się zmiennymi
i wyrażeniami

Zmiennych i wyrażeń używa się w skrypcie jako znaków-wypełniaczy dla parametrów. Niemal w każdej akcji, wymagającej określenia parametrów, możesz zamiast nich podstawiać zmienne lub wyrażenia. Na przykład podstawowa akcja gotoAndStop umożliwia ci wprowadzenie w polu Frame wyrażenia zamiast numeru ujęcia. Wyrażeniem może być zmienna o nazwie mojaKarta, przechowująca liczbę z zakresu 1 do 52. Klatki na listwie czasowej o numerach 1 do 52 mogłyby wtedy zawierać grafiki 52 kart do gry, a zmiana zmiennej w akcji gotoAndStop mogłaby powodować wyświetlanie różnych kart. W przypadku akcji getURL, pole URL może zawierać wyrażenie zamiast właściwego adresu internetowego. Przykładowo, wyrażenie może stanowić łańcuch znakowy połączony ze zmienną, jak w ”http://”+twojaWitryna Sieciowa. Zmiana zmiennej o nazwie twojaWitrynaSieciowa będzie powodować wczytywanie różnych adresów URL przez akcję getURL. Wartości dla właściwości obiektów oraz ścieżki dostępu do obiektów mogą być zastępowane wyrażeniami w akcji setProperty (rys. 9.8).

Innym powszechnym sposobem użycia zmiennej jest prosty licznik. Zamiast zajmować miejsce parametru, zmienna w tym przypadku przechowuje numer określonego typu zdarzenia, potrzebny do późniejszego przywołania i sprawdzenia. Wynik punktowy gracza może być przechowywany w zmiennej, dzięki czemu Flash określi, czy gracz osiągnął ilość punktów potrzebną do ukończenia gry.

0x01 graphic

Rys. 9.8. Przykłady podstawiania zmiennych i wyrażeń w polach określania parametrów akcji: zmienna frameNumber w akcji gotoAndPlay (u góry), zmienne myURL oraz myWindowName w akcji getURL (w środku) i zmienne MovieClipName oraz myRotation w akcji setProperty (u dołu)

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x01 graphic

Rys. 9.9. Zmiennej frameNumber przypisano wartość 5

0x01 graphic

Rys. 9.10. Po wybraniu Expression z menu rozwijanego Type możesz podstawić zmienną frameNumber w polu Frame

0x01 graphic

Rys. 9.11. Kiedy użytkownik zwolni przycisk umieszczony w dolnej warstwie, Flash odczyta na podstawie zmiennej (frameNumber) numer ujęcia, do którego ma przeskoczyć - tutaj jest to klatka 5

W celu wprowadzenia zmiennej
do pola określania parametru:

  1. W pierwszym ujęciu kluczowym głównej listwy czasowej wybierz Actions/set variable. W polu Variable palety akcji wpisz nazwę swojej zmiennej. W polu Value wpisz liczbę. Zaznacz pole wyboru Expression dla pola Value (rys. 9.9).

  1. Utwórz symbol przycisku i umieść jego klon na scenie.

  2. Zaznacz przycisk i na palecie akcji wybierz Basic Actions/Go To (rys. 9.10).

  3. W bloku edycji parametrów, w menu rozwijanym Type zaznacz Expression. W polu Frame wpisz nazwę zmiennej zadeklarowanej w głównej listwie czasowej (rys. 9.10).

  4. Udostępnij dodatkowe ujęcia, które mogłyby być odtwarzane. Przetestuj film (rys. 9.11).

Twoja zmienna przechowuje liczbę. W momencie wykonywania akcji gotoAndPlay Flash używa tej liczby jako oznaczenia ujęcia, które ma odtworzyć.

Wskazówka

  • W powyższym ćwiczeniu, kiedy deklarujesz zmienną w postaci łańcucha znakowego, możesz sprawić, żeby akcja gotoAndPlay powodowała przeskok do ujęcia oznaczonego etykietą, zamiast numerem. Przypisz np. łańcuch znaków „Konkluzja” do zmiennej mojaEtykietaUjęcia. Używając teraz nazwy mojaEtykietaUjęcia jako parametru akcji gotoAndPlay, spowodujesz, że Flash przeskoczy do ujęcia z etykietą Konkluzja. Utwórz wiele etykiet, np. Tytuł, Wstęp, czy Treść. Podstawiając te nazwy do zmiennej mojaEtykietaUjęcia, sprawisz, że akcja gotoAndPlay będzie odtwarzać różne ujęcia filmu.

0x08 graphic
0x08 graphic
0x08 graphic
Zakres działania zmiennych

Każda deklarowana zmienna należy do określonej listwy czasowej. Właściwość ta nazywana jest zakresem działania zmiennej. Jeśli zadeklarujesz zmienną z poziomu głównej listwy czasowej, to właśnie ta zmienna będzie ograniczona zakresem działania do głównej listwy czasowej. Jeśli zadeklarujesz zmienną z poziomu klipu filmowego, to będzie ono ograniczona zakresem działania do tego właśnie klipu filmowego. Zakres działania zmiennej to niejako jej dom. Zmienne „egzystują” w określonych listwach czasowych, więc jeśli chcesz użyć informacji przechowywanej w którejś ze zmiennych, musisz najpierw podać do niej ścieżkę dostępu. Mamy tutaj sytuację podobną do określania ścieżek do klipów filmowych. Żeby uzyskać dostęp do klipu filmowego lub zmiennej, trzeba je zidentyfikować za pomocą ścieżki dostępu. Konstruując ścieżki dostępu dla zmiennych, możesz używać terminów określania względności _root, this oraz _parent.

W kolejnym ćwiczeniu utworzysz menu rozwijane wczytujące witrynę sieciową za pomocą akcji getURL. Adres URL dla tej akcji będzie przechowywany w zmiennej zadeklarowanej i osadzonej w głównej listwie czasowej. Jako że akcja getURL rezyduje w klipie filmowym menu rozwijanego, zarówno zmienna, jak i akcja korzystająca z tej zmiennej mają różne zakresy działania. Użyjesz więc ścieżki dostępu do zidentyfikowania zmiennej w głównej listwie czasowej z poziomu listwy czasowej klipu filmowego.

W celu zidentyfikowania zmiennej
o innym zakresie działania:

  1. Utwórz klip filmowy będący menu rozwijanym, jak to opisano w rozdziale 4. Przeciągnij klon tego klipu filmowego z biblioteki na scenę (rys. 9.12).

  1. Nazwij klip filmowy przy pomocy palety Instance.

0x01 graphic

Rys. 9.12. Klip filmowy w formie menu rozwijanego posiada dwa stany - zwinięte (collapsed) i rozwinięte (expanded) - które mogą się zmieniać

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x01 graphic

Rys. 9.13. Zadeklaruj zmienną myURL będącą adresem witryny wydawnictwa Peachpit Press

0x01 graphic

Rys. 9.14. Dla ostatniego przycisku w menu rozwijanym przypisz w polu URL akcję _root.myURL. Jako że akcja ta jest przypisywana wewnątrz klipu filmowego menu rozwijanego, wpisanie _root jest niezbędne do zidentyfikowania zmiennej myURL, zadeklarowanej przecież w głównej listwie czasowej

  1. Zaznacz pierwsze ujęcie kluczowe na głównej listwie czasowej i otwórz paletę akcji.

  2. Wybierz Actions/set variable.

  3. W polu Variable wpisz nazwę. W polu Value wpisz adres internetowy. Obydwa pola wyboru Expression pozostaw niezaznaczone (rys. 9.13).

Ta zmienna została zadeklarowana w głównej listwie czasowej i przechowuje dane w postaci łańcucha znakowego.

  1. Przejdź do trybu edycji symbolu twojego klipu filmowego. Zaznacz jeden z przycisków w rozwiniętym menu.

  2. Dodaj manipulator zdarzenia on (release), wybierając Actions/getURL.

  3. W polu URL wpisz _root, następnie kropkę, a potem nazwę zmiennej zadeklarowanej w głównej listwie czasowej. Zaznacz pole Expression (rys. 9.14).

  4. Przetestuj film. Kiedy zwolnisz przycisk zawarty w klipie filmowym, Flash odczyta informację przechowywaną w zmiennej na głównej listwie czasowej. Jeśli nie zidentyfikowałeś głównej listwy czasowej w polu URL akcji getURL, Flash będzie próbował odnaleźć zmienną w obrębie klipu filmowego, co zakończy się niepowodzeniem.

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
Deklarując zmienne, można przypisać je do innej listwy czasowej niż ta, w której zostały utworzone. Żeby ustawić inny od domyślnego zakres działania zmiennej, trzeba podać ścieżkę dostępu do zmiennej w akcji set variable.

W celu przypisania zmiennej
innego zakresu działania:

  1. Kontynuując poprzednie ćwiczenie, zaznacz pierwsze ujęcie kluczowe głównej listwy czasowej i otwórz paletę akcji.

  1. W polu Variable w miejsce dotychczasowej zawartości wstaw nazwę klonu klipu filmowego, do którego ma ograniczać się zakres działania zmiennej, następnie wpisz kropkę i na końcu nazwę zmiennej (rys. 9.15).

Teraz twoja zmienna będzie osadzona w klonie klipu filmowego w miejsce głównej listwy czasowej.

  1. Przejdź do trybu edycji symbolu twojego klipu filmowego. Zaznacz jeden z przycisków w rozwiniętym menu.

  2. Zaznacz wyrażenie getURL.

  3. W polu URL dotychczasową zawartość zastąp nazwą zmiennej zadeklarowanej w głównej listwie czasowej. Zaznacz pole wyboru Expression (rys. 9.16).

  4. Przetestuj film.

Kiedy zwolnisz przycisk zawarty w klipie filmowym, Flash odczyta informację przechowywaną w zmiennej osadzonej w klipie filmowym. Ponieważ po zadeklarowaniu zmiennej ograniczono jej zakres działania do klipu filmowego, Flash potrafi ją zlokalizować i użyć przechowywanej w niej informacji jako adresu URL.

0x01 graphic

Rys. 9.15. Ścieżka dostępu menu.myURL deklaruje zmienną myURL w klipie filmowym będącym menu rozwijanym

0x01 graphic

Rys. 9.16. Ostatni przycisk w rozwijanym menu wymaga podania tylko nazwy zmiennej myURL, jako że zmienna ta jest osadzona właśnie w klipie filmowym menu rozwijanego

0x08 graphic

Wczytywanie zmiennych
z zewnątrz

Tak naprawdę, to zmiennych wcale nie trzeba deklarować wewnątrz filmu. Flash pozwala na przechowywanie ich w dokumentach tekstowych, w każdej chwili możliwych do wczytania. W ten sposób możesz łatwo edytować zmienne w obrębie takiego dokumentu tekstowego, a w rezultacie zmieniać cały film bez używania narzędzi Flasha. Dla przykładu, tworząc quiz działający w oparciu o zmienne w postaci pytań i odpowiedzi, przechowuj owe zmienne w dokumentach tekstowych. Kiedy później będziesz chciał wymienić pytania, wystarczy, że dokonasz edycji samego dokumentu. Ponadto zmienne w dokumentach tekstowych mogą być generowane automatycznie przy pomocy skryptów serwerowych, bazujących na danych dostarczanych z zewnątrz. Flash może wtedy odczytywać zmienne z dokumentu tekstowego tylko z ostatnio wprowadzanymi przez użytkownika wartościami. Taki zewnętrzny dokument tekstowy może przechowywać dowolną ilość zmiennych, ale musi być zapisany w formacie MIME - standardowym formacie wykorzystywanym w skryptach CGI. Zmienne zapisywane są w następujący sposób:

zmienna1=wartość1&zmienna2=

wartość2&zmienna3=wartość3

gdzie pary zmienna — wartość oddzielane są pojedynczym znakiem &.

Zmienne mogą być wczytywane do określonego poziomu lub do wskazanego klipu filmowego. W obu przypadkach musisz jednak pamiętać o ich zakresach działania, jeśli masz zamiar odczytywać wartości tych zmiennych.

0x08 graphic
W celu wczytania zmiennych umieszczonych w pliku tekstowym:

  1. Uruchom prosty edytor tekstowy i otwórz nowy dokument. Możesz posłużyć się np. windowsowym Notatnikiem.

  1. Zapisz swoje zmienne i ich wartości w standardowym formacie MIME (rys. 9.17).

  2. Zapisz utworzony dokument tekstowy w tej samej lokalizacji, w której zapisany będzie film Flasha. Nieważne, jak nazwiesz swój plik, ale najlepiej, żeby była to nazwa opisowa ze standardowym trzyliterowym rozszerzeniem.

  3. We Flashu otwórz nowy film. Zaznacz pierwsze ujęcie kluczowe w głównej listwie czasowej i otwórz paletę akcji.

  4. Wybierz Actions/loadVariables (Esc + lv).

  5. W polu URL wprowadź ścieżkę dostępu do pliku tekstowego. Ponieważ zarówno plik tekstowy, jak i plik SWF są w tym samym katalogu, wystarczy podać nazwę pliku. Pole Expression pozostaw niezaznaczone.

  6. W menu rozwijanym Location wybierz Level i nie zmieniaj wpisanej liczby 0 (rys. 9.18).

Flash wczyta zmienne z dokumentu tekstowego do poziomu 0 lub do głównej listwy czasowej.

  1. Utwórz symbol klipu filmowego i umieść jego klon na scenie.

  2. Zaznacz klip filmowy. Na palecie akcji wybierz Actions/onClipEvent. Zaznacz zdarzenie Key Down w bloku edycji parametrów.

  3. Wybierz Actions/setProperty. Z menu rozwijanego Property wybierz Rotation.

0x01 graphic

Rys. 9.17. Dwie zmienne i ich wartości, zapisane w formacie MIME. W tym przykładzie, zmienne są zapisane w dokumencie tekstowym o nazwie data.txt

0x01 graphic

Rys. 9.18. Akcja LoadVariablesNum wczytuje zmienne z pliku data.txt do poziomu 0

0x08 graphic
0x01 graphic

Rys. 9.19. Wartość zmiennej myRotation z pliku tekstowego jest wykorzystywana do określenia stopnia obrotu klipu filmowego

0x01 graphic

Rys. 9.20. Dwie dodatkowe akcje setProperty zmieniają skalę klipu filmowego, używając w tym celu zmiennej mySize z pliku tekstowego. Klip filmowy przed wystąpieniem zdarzenia keyDown (u góry z lewej) oraz po wystąpieniu zdarzenia (u góry z prawej)

  1. W polu Target bloku edycji parametrów wpisz this. W polu Value wprowadź ścieżkę dostępu do wczytywanej zmiennej. Jako że zmienne są wczytywane do poziomu 0, musisz wpisać _root lub _level0 przed nazwą zmiennej. Zaznacz obydwa pola Expression (rys. 9.19).

Kiedy naciśniesz klawisz, Flash użyje wczytanych zmiennych jako wartości potrzebnych do wykonania rotacji klipu filmowego.

  1. Dodaj następną akcję setProperty w celu wykorzystania drugiej wczytywanej zmiennej (rys. 9.20).

  2. Wyeksportuj film do formatu SWF i zapisz go w tej samej lokalizacji, co plik tekstowy.

Wskazówki

  • Jeśli zamierzasz wczytać zmienne z zewnątrz do klipu filmowego, postaraj się używać zawsze tej samej ścieżki dostępu do klipu. Nazwij ją np. wczytywaneZmienne, a będziesz wiedział, gdzie szukać zmiennych, jako że zostaną osadzone w tym samym miejscu.

  • Zmienne umieszczone w dokumencie tekstowym są wczytywane do Flasha jako łańcuchy znakowe, co oznacza, że nie trzeba wpisywać cudzysłowów wokół wartości znakowych.

  • Pary zmienna — wartość zapisuj w dokumentach tekstowych, pomijając wszelkie przenoszenia do następnej linii, odstępy i interpunkcję, z wyjątkiem symbolu &. Być może tobie trudniej będzie to odczytać, ale za to Flash szybciej to zrozumie.

0x08 graphic
Modyfikowanie zmiennych

Zmienne są użyteczne, ponieważ można zmieniać ich zawartość wraz z odświeżeniem informacji o statusie filmu lub użytkownika. Czasami sprowadza się to tylko do przypisania zmiennej nowej wartości. Kiedy indziej trzeba wartości zmiennych dodać, odjąć, pomnożyć lub podzielić, zmienić wartość boole'owską true na false czy też zmodyfikować łańcuch znakowy przez dodanie kilku znaków. Przykładowo, zmienna mójWynik może być zadeklarowana z wartością 0. Później, z każdym punktem zdobytym przez gracza, wartość tej zmiennej będzie rosła o 1. Przeprowadzaniem operacji polegających na modyfikowaniu informacji przechowywanych w zmiennych zajmują się operatory - symbole, które „operują” danymi.

Operator przypisania
i operatory arytmetyczne

Operator przypisania (=) to pojedynczy znak równości, który przypisuje zmiennej określoną wartość. Miałeś już okazję korzystać z tego operatora w akcjach set variable, które automatycznie wstawiają operator przypisania do informacji wprowadzanych w polach Variable oraz Value. Możesz też użyć akcji evaluate, która udostępnia puste pole Expression w bloku edycji parametrów. W polu tym wprowadzasz nazwę zmiennej, wartość i operator przypisania pomiędzy nimi (rys. 9.21). Inne powszechnie używane operatory znajdziesz w tabeli 9.3.

0x01 graphic

Rys. 9.21. Akcje set variable (u góry) oraz evaluate (u dołu) tworzą skrypty o równoważnym znaczeniu. W przypadku akcji evaluate musisz jednak sam wprowadzić operator przypisania

Tabela 9.3. Najczęściej używane operatory

Symbol Opis

+

Dodawanie.

-

Odejmowanie.

*

Mnożenie.

/

Dzielenie.

++

Zwiększa wartość o jeden. x++ jest równoważne z x = x + 1.

--

Zmniejsza wartość o jeden. x-- jest równoważne z x = x - 1.

+=

Dodaje wartość i przypisuje ją zmiennej. x += 5 jest równoważne z x = x + 5.

-=

Odejmuje wartość i przypisuje ją zmiennej. x -= 5 jest równoważne z x = x - 5.

*=

Mnoży przez wartość i przypisuje wynik zmiennej. x *= 5 jest równoważne z x = x * 5.

/=

Dzieli przez wartość i przypisuje wynik zmiennej. x /= 5 jest równoważne z x = x / 5.

0x08 graphic
0x01 graphic

Rys. 9.22. Po każdym zwolnieniu wciśniętego przycisku, przypisana do niego akcja zwiększa wartość zmiennej rotation o 10

Operatory są koniem pociągowym interaktywności Flasha. Będziesz ich często używał do przeprowadzania obliczeń w tle, dodawania wartości jednej zmiennej do innej lub zmieniania właściwości obiektu przez dodanie albo odjęcie wartości zmiennej. Poniższy przykład pokazuje proste zastosowanieoperatorów do modyfikowania zmiennej oddziałującej na grafikę filmu. Utworzysz przycisk, który zwiększa wartość zmiennej po każdym jego wciśnięciu. Wspomniana zmienna jest używana do ustawiania kąta obrotu klipu filmowego.

W celu zwiększenia wartości zmiennej
oddziałującej na właściwość
klipu filmowego:

  1. Utwórz klip filmowy i umieść jego klon na scenie. Za pomocą palety Instance nadaj mu nazwę.

  1. W pierwszym ujęciu kluczowym głównej listwy czasowej zadeklaruj zmienną rotation o wartości 0.

  2. Utwórz symbol przycisku i umieść jego klon na scenie.

  3. Zaznacz przycisk i na palecie akcji wybierz Actions/evaluate. W polu Expression wpisz rotation += 10 (rys. 9.22).

Wyrażenie to dodaje 10 do bieżącej wartości i przypisuje sumę do zmiennej o nazwie rotation.

  1. Zaznacz klip filmowy i na palecie akcji wybierz Actions/onClipEvent. W bloku edycji parametrów zaznacz zdarzenie EnterFrame.

  2. Wybierz Actions/setProperty.

  1. 0x08 graphic
    0x08 graphic
    0x08 graphic
    0x08 graphic
    0x08 graphic
    0x08 graphic
    0x08 graphic
    Z menu rozwijanego Property wybierz Rotation. W polu Target wpisz this. W polu Value wpisz _root.rotation. zaznacz obydwa pola wyboru Expression (rys. 9.23).

Zdarzenie EnterFrame sprawia, że akcja setProperty jest wykonywana nieustannie. W wyniku jej działania obrót klipu filmowego jest przypisywany do wartości zmiennej rotation, którą użytkownik może zwiększyć, zwalniając przycisk.

  1. Umieść na scenie kolejny klon przycisku. Przypisz do zmiennej rotation operator zmniejszania wartości o 1 (--), dzięki czemu wartość zmiennej będzie zmniejszać się po każdym kliknięciu przycisku. W ten sposób będziesz mógł kontrolować stopień obrotu klipu filmowego w odwrotnym kierunku (rys. 9.24).

Wskazówki

  • W celu wykonania bardziej skomplikowanych obliczeń matematycznych (np. potęgowanie, sinus, cosinus) albo manipulacji łańcuchem znakowym zmiennych lub ich wartości, musisz użyć obiektu matematycznego (Math) lub obiektu łańcucha znakowego (String). Z obiektami tymi zapoznasz się w rozdziałach 10. i 11.

  • We Flashu obowiązują zasady kolejności wykonywania działań arytmetycznych (uczyłeś się o nich na matematyce, pamiętasz?). Znaczy to, że pewne operatory mają pierwszeństwo przed innymi. Na przykład, mnożenie i dzielenie zawsze wykonuje się przed dodawaniem lub odejmowaniem (3 + 4 ∗ 2 daje zupełnie inny wynik niż 3 ∗ 4 + 2).

  • Jeśli jakaś część wyrażenia ma zostać obliczona przed innymi, zamknij odpowiednią grupę zmiennych i operatorów w nawiasach. Przykładowo, wynikiem działania ( 3 + 2 ) ∗ 4 jest wartość 20, ale w przypadku braku nawiasów, 3 + 2 ∗ 4 da wynik równy 11.

0x01 graphic

Rys. 9.23. Stopień obrotu bieżącego klipu filmowego jest nieustannie uaktualniany do wartości zmiennej rotation w głównej listwie czasowej

0x01 graphic

Rys. 9.24. Lufa tego działa to klip filmowy, którego właściwość obrotu (_rotation) zmienia się stosownie do wartości zmiennej rotation

0x08 graphic
0x01 graphic

Rys. 9.25. Klip filmowy mushroom jest powielany po każdym zwolnieniu przycisku. Nazwa nowego klonu oraz jego poziom głębokości zależą od wartości zmiennej counter

Wiązanie zmiennych
i funkcja eval

Operator dodawania (+) sumuje wartości danych liczbowych. Jednak można użyć go także do łączenia łańcuchów znakowych i zmiennych przechowujących dane znakowe. Operacja taka nazywa się wiązaniem. Wiązanie zmiennych i łańcuchów znakowych umożliwia tworzenie ścieżek dostępu i skomplikowanych wyrażeń. Na przykład, często praktykowanym sposobem nadawania nazw zduplikowanym klonom filmowym jest wiązanie zmiennej z nazwą oryginalnego klipu filmowego. Zmienna jest po prostu licznikiem dodającym wartość 1 za każdym razem, kiedy następuje powielenie klipu. Jeśli nazwą klipu filmowego jest mushroom (grzyb), a nazwą zmiennej Counter (licznik), to możesz dowiązać nową nazwę za pomocą wyrażenia:

"mushroom" + counter

a rezultatem będą kolejne nazwy, np. mushroom1, mushroom2 itp.

W celu dowiązania
łańcucha znakowego do zmiennej:

  1. Utwórz symbol klipu filmowego i umieść jego klon na scenie. Za pomocą palety Instance nadaj mu nazwę.

  1. Utwórz symbol przycisku i umieść jego klon na scenie.

  2. W pierwszym ujęciu głównej listwy czasowej użyj akcji set variable do zadeklarowania zmiennej o wartości 1.

  3. Zaznacz przycisk, otwórz paletę akcji i wybierz Actions/duplicateMovieClip.

  4. W polu Target wpisz nazwę klipu filmowego. Pole Expression pozostaw niezaznaczone. W polu New Name wpisz nazwę klipu filmowego w cudzysłowie, dalej znak +, potem nazwę zmiennej. Zaznacz pole Expression. W polu Depth wpisz nazwę zmiennej (rys. 9.25).

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
Utworzony zostanie duplikat klipu filmowego, z wartością zmiennej dowiązaną do nazwy klipu filmowego. Duplikat klipu jest umieszczany na poziomie głębokości odpowiadającym wartości zmiennej.

  1. Wybierz Actions.setProperty. Z menu rozwijanego Property wybierz X Position.

  2. W polu Target wpisz nazwę klipu filmowego w cudzysłowie, znak + i nazwę zmiennej. zaznacz pole wyboru Expression. W polu Value wpisz nazwę zmiennej, znak *, i liczbę 20. Zaznacz pole Expression (rys. 9.26).

Akcja setProperty umieści duplikat klipu filmowego w nowym miejscu, według współrzędnej x określonej na podstawie wartości zmiennej. Dzięki temu będziesz mógł dostrzec duplikat.

  1. Wybierz Actions/evaluate. W polu Expression wpisz nazwę zmiennej, a dalej znak ++ (rys. 9.27).

Za każdym razem, kiedy zwalniasz przycisk i tworzysz duplikat klipu filmowego, twoja zmienna zwiększa wartość o 1. Stąd nowe duplikaty zawsze otrzymują unikalne nazwy, oparte na wiązaniu łańcucha znakowego (nazwy klipu) i zmiennej oraz indywidualne poziomy głębokości i współrzędną x położenia na scenie (rys. 9.28).

0x01 graphic

Rys. 9.26. Duplikat klipu mushroom wędruje w nowe miejsce

0x01 graphic

Rys. 9.27. Zmienna counter zwiększa swoją wartość o 1

0x01 graphic

Rys. 9.28. Powielone tańczące grzybki otrzymują nazwy utworzone w rezultacie wiązania łańcucha znakowego „mushroom” ze zmienną counter

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x01 graphic

Rys. 9.29. Metoda stop jest dołączana do każdego nowego duplikatu klipu filmowego mushroom

0x01 graphic

Rys. 9.30. Przerwane zostaje odtwarzanie każdego nowego duplikatu klipu filmowego mushroom

Po utworzeniu nowych zmiennych lub obiektów w wyniku wiązania — możesz ich używać w innych wyrażeniach. Jednak, dla oszacowania zawartości tych wyrażeń musisz użyć funkcji eval. Funkcja ta odczytuje wyrażenie i zwraca wartość w postaci pojedynczego łańcucha znakowego. Załóżmy np., że chcesz odczytać wartość poziomu przezroczystości zduplikowanego klipu filmowego mushroom2. Mógłbyś spróbować posłużyć się takim wyrażeniem:

"mushroom" + counter + "._alpha"

jednak Flash odczyta to wyrażenie jako łańcuch znakowy i nie rozpozna, że _alpha to właściwość klipu mushroom2. Rozwiązaniem tego problemu jest zgrupowanie pierwszej części wyrażenia w postaci argumentu funkcji eval, a następnie dopisanie właściwości, jak niżej:

eval ("mushroom" + counter)._alpha

Funkcji eval możesz używać wtedy, kiedy wyrażeń wiązanych, np. w ścieżkach dostępu lub argumentach metod.

W celu użycia
funkcji eval w ścieżce dostępu:

  1. Kontynuuj poprzednie ćwiczenie. Zaznacz przycisk i otwórz paletę akcji.

  1. Dodaj nowe wyrażenie przed wyrażeniem zwiększania wartości zmiennej, wybierając najpierw Actions/evaluate.

  2. W polu Expression palety akcji wybierz Functions/eval. Pojawi się wyrażenie eval z podświetlonym argumentem zmiennej (variable).

  3. W miejsce argumentu zmiennej wpisz nazwę klipu filmowego w cudzysłowie, następnie symbol + i na końcu nazwę zmiennej.

  4. Za wyrażeniem eval wpisz kropkę, a potem metodę, która ma być wywołana (rys. 9.29).

Wyrażenie eval szacuje wiązanie, a następnie dołącza do niego metodę (rys. 9.30).

0x08 graphic
Sprawdzanie informacji
za pomocą
wyrażeń warunkowych

Zmienne oraz wyrażenia są ściśle powiązane z wyrażeniami warunkowymi. Informacje, które odczytujesz, przechowujesz w zmiennych i modyfikujesz za pomocą wyrażeń, będą naprawdę użyteczne dopiero wtedy, kiedy porównasz je z innymi fragmentami danych. Wykonanie takiego porównania to zadanie właśnie dla wyrażeń warunkowych, które ponadto umożliwiają zrealizowanie dalszych instrukcji, w zależności od otrzymanych rezultatów. Logika wyrażeń warunkowych sprowadza się w zasadzie do instrukcji: „Jeśli abc jest prawdą, to wykonaj xyz”, a we Flashu definiuje się zarówno abc (warunek), jak i xyz (konsekwencja). Wyrażenia warunkowe przypominają też trochę manipulatory zdarzeń - obydwie funkcje reagują na określone sytuacje. W przypadku manipulatorów zdarzeń, taką sytuacją jest zazwyczaj ruch myszą lub kliknięcie jej klawiszem. W wyrażeniach warunkowych natomiast sytuacją jest bieżący status zmiennej lub właściwości obiektu.

Wyrażenia warunkowe zaczynają się od instrukcji if (). Argument znajdujący się w nawiasach jest warunkiem - wyrażeniem porównującym jedną rzecz z drugą. Czy zmienna mójWynik ma większą wartość od zmiennej najlepszyWynik? Czy właściwość _droptarget mojego przeciąganego klipu filmowego jest niezgodna ze ścieżką dostępu do klipu filmowego mójŚmietnik? Czy właściwość _currentFrame głównej listwy czasowej ma wartość 10? To wszystko przykłady warunków. Jak się je konstruuje? Za pomocą operatorów porównywania, dołączanych do wyrażeń.

Tabela 9.4. Operatory porównywania0x08 graphic

Operatory porównywania

Operator porównywania szacuje wartości po obu stronach wyrażenia i zwraca wartość prawdy (true) lub fałszu (false). Operatory te wymieniono w tabeli 9.4.

Kiedy po oszacowaniu warunku okazuje się, że został spełniony (prawda), następuje wykonanie konsekwencji, określonej w nawiasach klamrowych wyrażenia if (rys. 9.31). W przypadku niespełnienia warunku (fałsz), wszystkie akcje zamknięte w klamrach są ignorowane.

W poniższym ćwiczeniu skorzystasz z pliku, który utworzyłeś w celu wykonania obrotu lufy działa, w podrozdziale „Modyfikowanie zmiennych”. Chcemy ustalić maksymalne odchylenie lufy na poziomie 90 stopni, dlatego też skonstruujemy wyrażenie warunkowe nakazujące Flashowi sprawdzać, czy wartość wychylenia (obrotu) jest większa niż 90. W przypadku spełnienia warunku, rotacja lufy zatrzyma się na poziomie 90 stopni, zapobiegając tym samym wychyleniu jej poniżej poziomej linii podstawy.

W celu wprowadzenia
wyrażenia warunkowego:

  1. Kontynuuj ćwiczenie demonstrujące wykonanie obrotu klipu filmowego z podrozdziału „Modyfikowanie zmiennych”. Zaznacz przycisk i otwórz paletę akcji.

  1. Zaraz za wyrażeniem określającym przyrost zmiennej o 10, wstaw wyrażenie warunkowe, wybierając Actions/if (Esc if).

  2. W polu Condition palety Actions wpisz nazwę zmiennej, następnie symbol > i na końcu wartość 90 (rys. 9.32). Flash będzie sprawdzał, czy zmienna ma wartość większą od 90.

Symbol Opis

==

Równe z...

<

Mniejsze niż

>

Większe niż

<=

Mniejsze lub równe

>=

Większe lub równe

!=

Nie jest równe z...

0x08 graphic

0x01 graphic

Rys. 9.31. Wtedy i tylko wtedy, gdy spełniony jest warunek określony w nawiasach, zostaną wykonane konsekwencje warunku - consequence1, consequence2 i consequence3

0x01 graphic

Rys. 9.32. Dodaj warunek do akcji przypisanych do prawego przycisku, który będzie sprawdzał wartość zmiennej rotation

  1. 0x08 graphic
    0x08 graphic
    0x08 graphic
    Wybierz Actions/set variable. W polu Variable wpisz nazwę zmiennej, a w polu Value wpisz 90. Zaznacz pole wyboru Expression (rys. 9.33).

Jeśli wartość zmiennej przekracza 90, Flash resetuje jej wartość z powrotem na 90. Dzięki temu lufa nie obróci się poniżej poziomej linii podstawy.

  1. Zaznacz drugi przycisk, zmniejszający stopień obrotu i przygotuj podobne wyrażenie warunkowe, sprawdzające, czy zmienna ma wartość mniejszą niż -90. W przypadku spełnienia warunku, wartość zmiennej powinna być resetowana do wartości -90.

Wskazówka

  • Dowolna akcja wprowadzona poza wyrażeniem warunkowym if będzie wykonywana niezależnie od tego, czy warunek określony w tym wyrażeniu został spełniony, czy nie. Rozważ następujący fragment skryptu:

if (myVariable == 10) {

myVariable = 20;

}

myVariable = 30;

Po wykonaniu tych instrukcji, zmienna myVariable będzie zawsze przyjmowała wartość 30, nawet wtedy, gdy spełniony zostanie warunek myVariable == 10. Ostatnie wyrażenie jest wykonywane niezależnie od wszystkich innych wyrażeń.

0x01 graphic

Rys. 9.33. Lufa działa nie może obrócić się o kąt powyżej 90 stopni ponieważ wyrażenie if nie pozwala zmiennej rotation przyjmować wartości większych niż 90

0x08 graphic

Wprowadzanie alternatywy do wyrażeń warunkowych

W wielu sytuacjach będzie zachodzić potrzeba wprowadzenia do wyrażenia warunkowego alternatywnego wyboru. Wyrażenie else pozwala na wykonanie konsekwencji warunku w momencie, kiedy nie jest on spełniony. Wyrażenie else było omówione w rozdziale 7., jako sposób na wykrycie upuszczonych klipów filmowych. W tamtym przykładzie wyrażenie if sprawdzało, czy klip filmowy został upuszczony w miejscu zajmowanym przez inny klip filmowy. Gdy warunek był spełniony, upuszczony klip znikał; w przypadku niespełnienia warunku, wyrażenie else odsyłało przeciągnięty klip filmowy do jego pierwotnej pozycji. Wyrażenie else odnosi się do wszystkich warunków niespełnionych w wyrażeniu if.

Wyrażenie else zawsze towarzyszy wyrażeniu if, a jego składnia wygląda następująco:

if (warunek) {

konsekwencja1;

} else {

konsekwencja2;

}

Używaj instrukcji else w przypadku istnienia możliwości wyboru pomiędzy dwiema opcjami, np. przy detekcji kolizji, sprawdzaniu prawdziwości argumentu, poprawności odpowiedzi lub hasła.

0x08 graphic
0x08 graphic
W celu wprowadzenia alternatywy
dla warunku prawda lub fałsz:

  1. Utwórz klip filmowy będący przyciskiem wyboru (radio button), jak to opisano w rozdziale 5. Klip ten powinien posiadać przyciski zmieniające stan na włączony lub wyłączony. Umieść klon klipu filmowego na scenie. Za pomocą palety Instance nadaj mu nazwę.

  1. Zaznacz klip filmowy i otwórz paletę akcji.

  2. Wybierz Actions/onClipEvent. Pozostań przy zdarzeniu Load.

  3. Wybierz Actions/set variable. W polu Variable wpisz nazwę zmiennej, a w polu Value wpisz false. Zaznacz pole wyboru Expression obok pola Value (rys. 9.34).

Po wczytaniu tego klipu filmowego, zmienna zostanie zadeklarowana z wartością false (fałsz). Zwróć uwagę, że zawartość pola Value jest wyrażeniem, dlatego też false jest odczytywane jako zmienna boole'owska, a nie znakowa.

  1. Przejdź do trybu edycji symbolu twojego klipu filmowego z przyciskiem wyboru.

  2. Zaznacz przycisk w stanie „wyłączony”. Dodaj kolejne wyrażenie poniżej akcji gotoAndStop, wybierając Actions/set variable. W polu Variable wpisz nazwę zmiennej zadeklarowanej za pomocą manipulatora zdarzenia klipu filmowego. W polu Value wpisz true. Zaznacz pole wyboru Expression obok pola Value (rys. 9.35).

Po wciśnięciu przycisku wyboru zmienna przyjmie wartość true.

0x01 graphic

Rys. 9.34. Klip filmowy będący przyciskiem wyboru deklaruje zmienną answer (odpowiedź) z wartością boole'owską false (fałsz)

0x01 graphic

Rys. 9.35. Przycisk w stanie „wyłączony” zmienia wartość zmiennej answer na true (prawda)

0x08 graphic
0x08 graphic
0x01 graphic

Rys. 9.36. Przycisk w stanie „włączony” zmienia wartość zmiennej answer na false (fałsz)

0x01 graphic

Rys. 9.37. Przycisk sprawdza zmienną answer, osadzoną w klipie filmowym przycisku wyboru. Jeśli warunek jest spełniony, inny klip filmowy, o nazwie response (odpowiedź), przeskakuje do ujęcia wyświetlającego komunikat

0x01 graphic

Rys. 9.38. Wyrażenie else sprawia, że klip filmowy response przeskakuje do innego ujęcia w przypadku, gdy zmienna answer przyjmuje wartość false

  1. Zaznacz przycisk w stanie „włączony”. Dodaj kolejne wyrażenie poniżej akcji gotoAndStop, wybierając Actions/set variable. W polu Variable wpisz nazwę zmiennej zadeklarowanej za pomocą manipulatora zdarzenia klipu filmowego. W polu Value wpisz false. Zaznacz pole wyboru Expression obok pola Value (rys. 9.36).

Ponowne kliknięcie przycisku (powodujące „wyłączenie” go) ustawia wartość zmiennej na false.

  1. Utwórz symbol przycisku i umieść jego klon na scenie.

  2. Zaznacz przycisk i na palecie akcji wybierz Actions/if.

  3. W polu Condition wprowadź ścieżkę dostępu, nazwę zmiennej oraz instrukcję sprawdzania, czy zmienna ma wartość true. Pamiętaj, że twoja zmienna jest ograniczona zakresem działania do klipu filmowego, a nie do głównej listwy czasowej.

  4. Wybierz akcję, która ma być wykonywana w przypadku prawdziwości warunku true (rys. 9.37).

  5. Wybierz Actions/else (Esc + el).

  6. Wybierz inną akcję, która ma być wykonywana w przypadku prawdziwości warunku false (rys. 9.38).

Wskazówka

  • Nie należy mylić warunku prawda lub fałsz z wartościami true i false zmiennej boole'owskiej. Akurat w powyższym przykładzie zmiennej true odpowiada spełnienie warunku prawda. Jednak możliwa jest też sytuacja odwrotna, kiedy zmiennej false odpowiada spełnienie warunku prawda.

0x08 graphic
Rozgałęzianie wyrażeń warunkowych

Jeśli masz do czynienia z kilkoma możliwymi do spełnienia warunkami oraz odpowiadającą im liczbą konsekwencji, musisz posłużyć się jeszcze bardziej rozgałęzionymi wyrażeniami warunkowymi, niż te, które są dostępne przy używaniu wyrażenia else. W przypadku np. projektowania interfejsu witryny sieciowej lub gry, wymagającej wprowadzania danych z klawiatury, będziesz chciał zapewne sprawdzać, który klawisz został wciśnięty, a następnie wymuszać wykonanie akcji odpowiadającej temu konkretnemu klawiszowi. Za pomocą dostępnej we Flashu instrukcji else if możesz konstruować takie właśnie rozbudowane wyrażenia warunkowe wraz z odpowiadającymi im konsekwencjami. Składnia wygląda następująco:

if (warunek1) {

konsekwencja1;

} else if (warunek2) {

konsekwencja2;

} else if (warunek3) {

konsekwencja3;

}

Każde z wyrażeń else if posiada swój własny warunek, który jest szacowany, a także własny zestaw konsekwencji, wykonywanych w przypadku spełnienia warunku. W następnym ćwiczeniu wykorzystujemy obiekt Key oraz rozgałęzione wyrażenie warunkowe do przesunięcia i obrócenia klipu filmowego w sposób uzależniony od rodzaju wciśniętego klawisza.

0x08 graphic
0x01 graphic

Rys. 9.39. Po wciśnięciu klawisza strzałki w górę ten klip filmowy jest obracany o 0 stopni i przesuwany o 30 pikseli w górę sceny

W celu
rozgałęzienia akcji alternatywnych
za pomocą instrukcji else if:

  1. Utwórz symbol klipu filmowego i umieść jego klon na scenie. Nadaj mu nazwę za pomocą palety Instance.

  1. Zaznacz klip filmowy i otwórz paletę akcji.

  2. Wybierz Actions/onClipEvent. Zaznacz zdarzenie EnterFrame.

  3. Wybierz Actions/if. W polu Condition wpisz Key.isDown(Key.UP).

Pierwszy warunek korzysta z metody isDown obiektu Key do sprawdzenia, czy wciśnięty został klawisz strzałki w górę.

  1. Wybierz Actions/setProperty. Z menu rozwijanego Property wybierz Rotation. W polu Target wpisz this. W polu Value wpisz 0. Zaznacz obydwa pola wyboru Expressions.

  2. Ponownie wybierz Actions/setProperty. Z menu rozwijanego Property wybierz Y Position. W polu Target wpisz this.

W polu Value wpisz this._y - 30. Te dwie akcje setProperty obracają klip filmowy w ten sposób, że jego górna krawędź jest zwrócona do góry, po czym odejmują wartość 30 pikseli od współrzędnej y jego położenia, dzięki czemu klip przesuwa się po scenie. Zaznacz obydwa pola wyboru Expression (rys. 9.39).

  1. Wybierz Actions/else if (Esc + ei). W polu Condition wpisz Key.isDown (Key.RIGHT).

  2. Wybierz dwie akcje setProperty do ustawienia obrotu klipu filmowego na wartość 90 i dodania wartości 30 do współrzędnej x jego położenia.

  3. Wybierz Actions/else if. W polu Condition wpisz Key.isDown(Key.DOWN).

  1. 0x08 graphic
    Wybierz dwie akcje setProperty do ustawienia obrotu klipu filmowego na wartość 180 i dodania wartości 30 do współrzędnej y jego położenia.

  2. Wybierz Actions/else if. W polu Condition wpisz Key.isDown(Key.LEFT).

  3. Wybierz dwie akcje setProperty do ustawienia obrotu klipu filmowego na wartość 270 i odjęcia wartości 30 do współrzędnej x jego położenia.

  4. Przetestuj film.

Ta seria wyrażeń if oraz else if sprawdza, czy użytkownik wcisnął klawisz strzałki, a jeśli tak, to przesuwa klip filmowy stosownie do wciśniętego klawisza (rys. 9.40). Stworzyłeś zaczątek gry Frogger!

Wskazówka

  • Instrukcje sprawdzania warunku użyte w powyższym ćwiczeniu nie zawierają operatora porównywania zgodności (==). Jednak w przypadku zmiennych i metod boole'owskich nie zachodzi potrzeba specjalnego przyrównywania ich do wartości true (prawda). Tak więc poniższe wyrażenia są ekwiwalentne:

if (Key.isDown(Key.LEFT))

if (Key.isDown(Key.LEFT)==true)

0x01 graphic

Rys. 9.40. Kompletny skrypt (u dołu) zawiera cztery wyrażenia warunkowe z instrukcjami if i else if, sprawdzającymi, czy wciśnięto któryś z klawiszy strzałek (góra, lewo, prawo lub dół). Stopień obrotu i pozycja klipu filmowego (żuczek na rysunku u góry) zmieniają się w zależności od tego, który z warunków został spełniony

0x08 graphic
0x01 graphic

Rys. 9.41. Operator logiczny && łączy te dwa wyrażenia, w wyniku czego do spełnienia całego warunku niezbędne jest wciśnięcie jednocześnie dwóch klawiszy - strzałka w górę i strzałka w prawo

Łączenie wyrażeń warunkowych za pomocą operatorów logicznych

Istnieje możliwość tworzenia złożonych wyrażeń warunkowych - za pomocą operatorów logicznych && (AND), || (OR) oraz ! (NOT). Operatory te łączą dwa lub więcej warunków w jednym wyrażeniu if, umożliwiając sprawdzanie bardziej skomplikowanych scenariuszy działań. Przykładem może być sprawdzanie, czy wciśnięto jednocześnie klawisze strzałki w górę oraz strzałki w prawo, z zamiarem przesunięcia klipu filmowego po skosie. Możliwe też byłoby sprawdzenie, na której spośród kilku możliwych pozycji upuszczony został przeciągany klip filmowy. Operator NOT można wykorzystać do sprawdzenia, czy zmienna zawiera ważny adres e-mail, ale jednocześnie taki, którego domena nie jest obwarowana zakazem dostępu.

Poniższe ćwiczenie bazuje na pliku, który utworzyłeś wcześniej, w celu przesuwania klipu filmowego za pomocą klawiatury. Połączysz teraz dwa warunki w jednym wyrażeniu, dzięki czemu Flash będzie mógł sprawdzić wciśniętą kombinację klawiszy i w efekcie przesunąć klip filmowy po skosie.

W celu połączenia warunków:

  1. Kontynuujemy poprzednie ćwiczenie. Zaznacz symbol klipu filmowego i otwórz paletę akcji.

  1. Zaznacz pierwsze wyrażenie if.

  2. W polu Condition, umieść wskaźnik myszy na końcu istniejącego już warunku.

  3. Wybierz Operators/&&.

  4. Wprowadź drugi warunek zaraz za podwójnym symbolem & (rys. 9.41).

Obydwa warunki pojawią się w polu Condition, oddzielone operatorem &&.

  1. 0x08 graphic
    Zmień odpowiednio akcje setProperty w celu stworzenia możliwości obracania klipu filmowego i przesuwania go po skosie (rys. 9.42).

  2. Kontynuuj dodawanie wyrażeń else if z połączonymi warunkami dla pozostałych kombinacji klawiszy, nie usuwając jednak wcześniej przygotowanych warunków ograniczających ruch klipu filmowego do płaszczyzny wyłącznie pionowej lub poziomej (rys. 9.43).

Dzięki wprowadzeniu operatora logicznego && Flash będzie sprawdzał, czy użytkownik wcisnął kombinację dwóch klawiszy.

Wskazówka

  • Możliwe jest zagnieżdżanie wyrażeń if w innych wyrażeniach if, co z kolei jest równoważne z wprowadzeniem operatora logicznego && w pojedynczym wyrażeniu if. Dla przykładu, poniższe dwa fragmenty skryptu przed ustawieniem nowej zmiennej sprawdzają, czy obydwa warunki zostały spełnione:

if (twójWiek >= 12) {

if (twójWiek <=20) {

status = "nastolatek";

}

}

if (twójWiek >= 12 && twójWiek <=20) {

status = "nastolatek";

}

0x01 graphic

Rys. 9.42. Pierwszy fragment skryptu wskazuje, że po wciśnięciu jednocześnie klawiszy strzałki w górę i strzałki w prawo żuczek wykona obrót o 45 stopni i przesunie się po skosie w kierunku prawo-góra

0x01 graphic

Rys. 9.43. Kompletny skrypt zawiera połączone warunki określające naciśnięcie kombinacji dwóch klawiszy, jak również warunki wystąpienia zdarzenia polegającego na wciśnięciu pojedynczego klawisza

0x08 graphic

Zapętlanie wyrażeń

Zapętlając wyrażenia, możesz tworzyć akcje lub grupy akcji, które będą wykonywane określoną ilość razy, lub też dopóki spełniony będzie pewien warunek. Powtarzające się akcje są często wykorzystywane do budowania tablic, specjalnej odmiany zmiennych, przechowujących dane w strukturalny, łatwo dostępny sposób. Akcja wykonywana w pętli daje pewność, że każdy fragment danych jest wprowadzany i odczytywany w prawidłowej kolejności. Więcej o tablicach dowiesz się z rozdziału 11. Generalnie jednak, zapętlających się wyrażeń używa się do automatycznego wykonywania akcji przez ilość razy określaną za pomocą zmiennej o narastającej wartości. Taka zmienna modyfikuje argumenty każdej następnej metody w pętli albo określone właściwości tworzonych obiektów. Na przykład, możesz dynamicznie generować grafikę w całości za pośrednictwem ActionScript, powielając tylko klipy filmowe za pomocą wyrażeń i akcji duplicateMovieClip. Korzystaj z zapętlających się wyrażeń, gdy zachodzi potrzeba zmiany właściwości całej serii klipów filmowych, modyfikowania złożonych ustawień dźwięku lub wprowadzania zmian do wartości grupy zmiennych.

Istnieją trzy rodzaje wyrażeń działających w pętli - akcje while, do while i for - ale wszystkie one mają to samo zastosowanie. Dwa pierwsze wykonują pętle, dopóki spełniony jest określony warunek. Trzecie wyrażenie wykonuje pętle, korzystając przy tym z wbudowanego licznika.

W celu zastosowania wyrażenia while do powielania klipów filmowych:

  1. Utwórz symbol klipu filmowego i umieść jego klon na scenie. Nadaj mu nazwę za pomocą palety Instance.

  1. Utwórz symbol przycisku i umieść jego klon na scenie.

  1. 0x08 graphic
    0x08 graphic
    0x08 graphic
    0x08 graphic
    0x08 graphic
    0x08 graphic
    0x08 graphic
    Zaznacz przycisk i otwórz paletę akcji. Wybierz Actions/set variable. W polu Variable wpisz i. W polu Value wpisz 0. Zaznacz pole wyboru obok pola Value (rys. 9.44).

Zmienna i lub j jest często używana w postaci licznika pętli.

  1. Wybierz Actions/while (Esc + wh). W polu Condition wpisz i < 361.

  2. Przypisz dowolne akcje, które mają być wykonywane, dopóki warunek pozostaje spełniony (dopóki i jest mniejsze niż 361). W tym ćwiczeniu dodajemy wyrażenie duplicateMovieClip oraz dwa wyrażenia setProperty, obracające i modyfikujące przezroczystość duplikatów (rys. 9.45).

  3. Wybierz Actions/evaluate. W polu Expression wpisz i += 30. Ewentualnie posłuż się akcją setVariable do wprowadzenia równoważnego wyrażenia, i = i + 30. Po każdym uruchomieniu pętli zmienna i zwiększa wartość o 30. Po przekroczeniu wartości 361 warunek, który wyrażenie while sprawdza przy każdym wykonaniu, przestaje być spełniony. Flash kończy wykonywanie pętli i przechodzi do kolejnego wyrażenia (rys. 9.46).

0x01 graphic

Rys. 9.44. Zadeklaruj zmienną i dla manipulatora zdarzenia on (release)

0x01 graphic

Rys. 9.45. Klip filmowy bar jest powielany, obracany i otrzymuje nową wartość poziomu przezroczystości tak długo, jak długo zmienna I ma wartość mniejszą niż 361

0x01 graphic

Rys. 9.46. Klip filmowy bar (u góry) jest podstawą wzorku (w środku) wykreślonego przez wykonywane w pętli wyrażenie (u dołu)

0x08 graphic
0x01 graphic

Rys. 9.47. Równoważne wyrażenie do while

0x01 graphic

Rys. 9.48. Równoważne wyrażenie for

0x01 graphic

Rys. 9.49. To ostrzegawcze okno dialogowe pojawia się, kiedy niespodziewanie próbujesz uruchomić nieskończoną pętlę

Wyrażenie do while

Wyrażenie while (Esc + do) jest zbliżone do wyrażenia while, tyle że warunek jest tu sprawdzany na końcu pętli, a nie na początku. Oznacza to, że akcje w pętli są wykonywane co najmniej raz. Ten sam skrypt, który utworzyliśmy w poprzednim ćwiczeniu, można zapisać za pomocą wyrażenia do while, jak pokazano na rys. 9.47.

Wyrażenie for

Wyrażenie for (Esc + fr) udostępnia wbudowany licznik i parametry do zwiększania oraz zmniejszania jego zawartości, dzięki czemu możesz uniknąć pisania oddzielnych wyrażeń. Parametry wyrażenia for to: Init, deklarujące zmienną licznika, Condition, czyli sprawdzane wyrażenie, Next, określające wartość przyrostu lub zmniejszania się zmiennej licznika. Skrypt utworzony w poprzednim ćwiczeniu można zapisać również za pomocą wyrażenia for, jak widać na rys. 9.48.

Wskazówki

  • Nie używaj zapętlających się wyrażeń do konstruowania zestawów instrukcji sprawdzających określony warunek. Takie sprawdzanie w czasie rzeczywistym powinno odbywać się z wykorzystaniem wyrażenia if w zdarzeniach klipu filmowego EnterFrame lub Mouse move. Kiedy Flash wykonuje pętlę, system pozostaje zamrożony, co oznacza, że zarówno mysz, jak i klawiatura nie reagują.

  • Upewnij się, że wartość przyrostu zmiennej podajesz w nawiasach klamrowych towarzyszących wyrażeniom while lub do while. Jeśli tego nie uczynisz, warunek nigdy nie zostanie określony i Flash zacznie wykonywać pętlę nieskończoną ilość razy. Na szczęście program ostrzega przed tym problemem w momencie, kiedy nieskończona pętla spowalnia działanie procesora (rys. 9.49).

Rozdział 9.

296

295

Kontrolowanie przepływu informacji

9

Kontrolowanie
przepływu informacji

Klip filmowy bar

Klip filmowy obrócony o 90 stopni

myMovieClip

Odtwarzanie mushroom3 zatrzymane w klatce 1.

X=100

Odtwarzanie mushroom2 zatrzymane w klatce 1.

Odtwarzanie mushroom1 zatrzymane w klatce 1.

frameNumber=5

Oryginalny klip filmowy tańczącego grzyba, nazwany mushroom

stop ( )

mushroom3 na poziomie głębokości = 3, x = 60

Akcja getURL, przypisana do przycisku wewnątrz klipu filmowego, odwołuje się do zmiennej _root.myURL

Zmienna myURL ograniczona zakresem działania do głównej listwy czasowej

Zmienna myURL osadzona w listwie czasowej klipu filmowego

Akcja getURL, przypisana do przycisku wewnątrz klipu filmowego, odwołuje się do zmiennej myURL

mushroom2 na poziomie głębokości = 2, x = 40

Oryginalny klip filmowy tańczącego grzyba, nazwany mushroom

mushroom1 na poziomie głębokości = 1, x = 20

Przycisk zwiększający wartość zmiennej

Przycisk zmniejszający wartość zmiennej

Klip filmowy obraca się w zależności od wartości zmiennej rotation

Przycisk

Duplikaty klipu filmowego bar

Kontrolowanie przepływu informacji

Deklarowanie danych

Deklarowanie danych

Deklarowanie danych

Deklarowanie danych

Deklarowanie danych

Wczytywanie zminnych z zewnątrz

Wczytywanie zminnych z zewnątrz

Modyfikowanie zmiennych

Wiązanie zmiennych i funkcja eval

Wiązanie zmiennych i funkcja eval

Sprawdzanie informacji

Wprowadzanie alternatywy

Wprowadzanie alternatywy

Rozgałęzianie wyrażeń warunkowych

Łączenie wyrażeń warunkowych

Zapętlanie wyrażeń

Zapętlanie wyrażeń

Deklarowanie danych

Deklarowanie danych

Deklarowanie danych

Deklarowanie danych

Deklarowanie danych

Deklarowanie danych

Wczytywanie zminnych z zewnątrz

Modyfikowanie zmiennych

Modyfikowanie zmiennych

Wiązanie zmiennych i funkcja eval

Sprawdzanie informacji

Sprawdzanie informacji

Wprowadzanie alternatywy

Rozgałęzianie wyrażeń warunkowych

Rozgałęzianie wyrażeń warunkowych

Łączenie wyrażeń warunkowych

Zapętlanie wyrażeń



Wyszukiwarka