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


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

0x08 graphic

Części składowe języka HTML


0x08 graphic
Informacje, które przechowujesz w zmiennych, modyfikujesz w wyrażeniach i sprawdzasz przy pomocy wyrażeń warunkowych, często muszą być dalej przetwarzane z użyciem rachunków matematycznych, takich jak potęgowanie czy obliczanie sinusa i cosinusa. Flash wykonuje podobne obliczenia, korzystając z obiektu matematycznego (Math), umożliwiającego tworzenie formuł działania interakcji pomiędzy obiektami w twoim filmie i odbiorcą, a także wzorów geometrycznych do kształtowania grafiki. Dla przykładu: posługując się obiektem matematycznym, możesz zaprojektować prawidłową trajektorię kolizji obiektów, zasymulować efekt oddziaływania sił grawitacji w samouczku do lekcji fizyki, obliczać rachunek prawdopodobieństwa w grze karcianej czy też generować liczby losowe, pozwalające wprowadzić do filmu nieprzewidywalne elementy. Większość takich informacji, którymi manipulujesz, musi być przechowywana w tablicach, jeśli chcesz uzyskać większą kontrolę nad danymi i efektywność ich wykorzystania. Tablice mogą być używane do porządkowania danych, np. w listach zakupów, tabelach koloru lub zapiskach sportowych.

Jeśli informacja, której potrzebujesz, jest uzależniona od czasu lub daty, możesz skorzystać z obiektu daty (Date) do uzyskania danych na temat bieżącego roku, miesiąca, a nawet milisekundy. Dzięki temu łatwo dołączysz do swojego filmu zegar i timer, uzyskując możliwość przesyłania do serwera informacji czasowej wraz z profilem odbiorcy.

Wykonywanie wszystkich tych procesów związanych z przetwarzaniem danych znacznie ułatwia użycie funkcji. Nauczysz się, jak budować funkcje łączące oddzielne wyrażenia i obiekty w taki sposób, aby zwiększyć ich pierwotne możliwości. Wystarczy wspomnieć tu choćby o zaprojektowaniu funkcji automatycznie dołączającej do filmu dźwięk, a następnie odtwarzającej go i ustawiającej poziom głośności lub panoramę w oparciu o podane parametry. Możliwe jest także tworzenie funkcji pozwalającej kształtować własne obiekty. Rozwijaj możliwości predefiniowanych obiektów Flasha, przygotowując sterujące nimi własne metody i właściwości. Rozdział 11. pomoże ci zrozumieć, jak posługiwać się takimi złożonymi, ale jednocześnie elastycznymi danymi. Dowiesz się również o sposobach integrowania różnych obiektów, z którymi zapoznałeś się dotychczas.

0x08 graphic
Wykonywanie obliczeń
za pomocą obiektu matematycznego

Obiekt matematyczny pozwala na wykorzystanie funkcji trygonometrycznych, takich jak sinus, cosinus i tangens, funkcji logarytmicznych, funkcji zaokrąglania wartości liczbowych, czy wreszcie stałych matematycznych, np. Pi (3.141592) lub e (2.718281). Metody i właściwości obiektu matematycznego przedstawia tabela 11.1. Podobnie jak w przypadku obiektu Key, tak i tu nie jest potrzebne tworzenie klonu obiektu przed użyciem jego metod lub właściwości. Podobnie wszystkie właściwości obiektu matematycznego są wartościami tylko do odczytu i zapisuje się je wielkimi literami. Każda metoda jest poprzedzona wprowadzeniem obiektu Math. Na przykład, w celu obliczenia kwadratu liczby 10, napiszesz:

mojaOdpowiedz = Math.sqrt (10);

a wynik obliczenia zostanie podstawiony do zmiennej mojaOdpowiedz. Jeśli zamierzasz wykorzystać stałą, posłuż się składnią:

mojObwod = Math.PI * 2 * mojPromien;

Stała matematyczna Pi jest mnożona przez 2 i przez wartość zmiennej mojPromien, a wynik obliczenia jest podstawiany do zmiennej mojObwod.

Tabela 11.1. Metody i właściwości obiektu matematycznego

Metoda lub właściwość Opis

abs(number)

Oblicza wartość bezwzględną (z pominięciem znaku).Wyrażenie Math.abs(-4) zwraca wartość 4.

acos(number)

Oblicza wartość cosinusa łuku

asin(number)

Oblicza wartość sinusa łuku.

atan(number)

Oblicza wartość tangensa łuku.

atan2(y, x)

Oblicza wartość kąta (w radianach) między osią x i punktem na osi y.

ceil(number)

Zaokrągla liczbę w górę do najbliższej liczby całkowitej. Wyrażenie Math.ceil (2.34) zwraca wartość 3.

cos(number)

Oblicza wartość cosinusa kąta podanego w radianach.

exp(number)

Oblicza wartość wykładnika potęgi stałej Eulera (e).

floor(number)

Zaokrągla liczbę w dół do najbliższej liczby całkowitej. Wyrażenie Math.floor (2.34) zwraca wartość 2.

log(number)

Oblicza wartość logarytmu naturalnego.

max(x, y)

Zwraca większą z dwóch porównywanych wartości. Wyrażenie Math.max (2, 7) zwraca wartość 7.

min(x, y)

Zwraca mniejszą z dwóch porównywanych wartości. Wyrażenie Math.max (2, 7) zwraca wartość 2.

pow(base, exponent)

Oblicza wartość wykładnika potęgi danej liczby.

random()

Zwraca liczbę losową z zakresu 0,0 do 1,0.

0x08 graphic
round(number)

Zaokrągla liczbę do najbliższej wartości. Gdy część ułamkowa wartości jest mniejsza od 0,5, to funkcja zaokrągla w gół, gdy natomiast część ułamkowa wynosi 0,5 i więcej, to funkcja zaokrągla w górę. Wyrażenie Math.round (2.34) zwraca wartość 2.

sin(number)

Oblicza wartość sinusa kąta podanego w radianach.

sqrt(number)

Oblicza wartość kwadratu potęgi.

tan(number)

Oblicza wartość tangensa kąta podanego w radianach.

E

Stała Eulera; podstawa logarytmów naturalnych.

LN2

Logarytm naturalny liczby 2.

LOG2E

Logarytm Eulera podstawy równej 2.

LN10

Logarytm naturalny liczby 10.

LOG10E

Logarytm Eulera podstawy równej 10.

PI

Obwód koła podzielony przez jego średnicę.

SQRT1_2

Kwadrat potęgi liczby ½.

SQRT2

Kwadrat potęgi liczby 2.

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
Obliczanie wartości kątowych za pomocą
obiektu matematycznego

Kąt zachowywany pomiędzy obiektem i sceną lub pomiędzy dwoma obiektami jest użyteczną informacją w tworzeniu interakcji w grach, jak też w przypadku dynamicznych animacji i interfejsów budowanych od początku do końca za pomocą języka ActionScript. Przykładowo, tworząc pokrętło regulujące poziom głośności dźwięku, musisz obliczyć kąt pomiędzy kierunkiem, w którym użytkownik przeciąga pokrętło i osią pionową lub poziomą, a następnie odpowiednio zmienić obrót pokrętła i samą głośność dźwięku. Zanim jednak przejdziesz do obliczania wartości kątowych, dobrze byłoby przypomnieć sobie poznane w szkole średniej podstawowe zasady trygonometryczne, rządzące obliczaniem sinusa, cosinusa i tangensa.

Mnemoniczna nazwa SOH CAH TOA pomaga zachować poprawność obliczania funkcji trygonometrycznych. Symbole te są akronimami wyrażeń: Sine = Opposite over Hypotenuse (sinus = przyprostokątna naprzeciwległa do przeciwprostokątnej), Cosine = Adjacent over Hypotenuse (cosinus = przyprostokątna przyległa do przeciwprostokątnej) i Tangent = Opposite over Adjacent (tangens = przyprostokątna naprzeciwległa do przyprostokątnej przyległej) (rys. 11.1). Znajomość długości dwóch dowolnych boków trójkąta prostokątnego wystarcza do obliczenia pozostałych dwóch kątów. Zwykle będziesz miał do czynienia z długościami przyprostokątnych, jako że to one właśnie reprezentują współrzędne
x i y punktu (rys. 11.2). Znając współrzędne x, y, możesz obliczyć kąt (theta) za pomocą poniższych wzorów matematycznych:

Tangens kąta = przyprostokątna naprzeciwległa/ przyprostokątna przyległa

lub

Tangens kąta = y/x

lub

Kąt = tangens łuku (y/x)

0x01 graphic

Rys. 11.1. Kąt (theta) trójkąta prostokątnego jest definiowany przez sinus, cosinus, tangens i długość trzech boków

0x01 graphic

Rys. 11.2. Punkt na scenie tworzy trójkąt prostokątny z bokami x (przyprostokątna przyległa) oraz y (przyprostokątna naprzeciwległa)

0x08 graphic

We Flashu można powyższe wyrażenia zapisać przy pomocy obiektu matematycznego w następujący sposób:

mojKat = Math.atan(this._y/this._x);

Warto dodać, że jest dostępna jeszcze łatwiejsza metoda zdefiniowania współrzędnych x, y, bez potrzeby wykonywania dzielenia. Metoda atan2 przyjmuje współrzędne x, y jako dwa argumenty, więc wyrażenie może wyglądać następująco:

mojKat = Math.atan2(this._y, this._x)

Niestety, metody trygonometryczne obiektu matematycznego wymagają - i zwracają - wartości w radianach, które opisują kąt w rozumieniu liczby stałej Pi, co jest wygodniejsze matematycznie, ale już nie tak praktyczne w momencie, gdy chcesz użyć wartości do zmodyfikowania właściwości _rotation klipu filmowego. Można jednak przekształcić wartość kątową w radianach na stopnie - i odwrotnie - za pomocą poniższych wzorów:

Radiany = Math.PI/180 * liczba_ stopni;

Stopnie = liczba_radianów * 180/ Math.PI;

Poniższe ćwiczenia demonstrują sposób obliczenia kątów przeciąganego klipu filmowego i wyświetlenia wartości w stopniach w bloku dynamicznego tekstu.

W celu obliczenia kąta
tworzonego względem sceny:

  1. Utwórz symbol klipu filmowego i umieść jego klon na scenie. Nazwij go, korzystając z pola Name palety Instance.

  2. Utwórz blok dynamicznego tekstu, w sposób opisany w rozdziale 10. Na palecie Text Options wybierz opcję Single Line i przypisz do bloku tekstowego nazwę zmiennej (Variable).

  3. Zaznacz klon klipu filmowego i otwórz paletę akcji.

  1. 0x08 graphic
    Wybierz Actions/onClipEvent. Zaznacz zdarzenie Load.

  2. Wybierz Actions/startDrag. W polu Target wpisz this. Zaznacz pole Expression. Zaznacz też pola Constrain to rectangle Lock mouse to center. Wpisz 0 w polu L, 0 w polu T, szerokość sceny w polu R i wysokość sceny w polu B (rys. 11.3).

W rezultacie punkt środkowy klipu filmowego będzie podążał za wskaźnikiem myszy, a sam klip zostanie osadzony w obramowaniu wyznaczonym przez rozmiary sceny.

  1. Wybierz Actions/onClipEvent. Zaznacz zdarzenie enterFrame.

  2. Wybierz Actions/set variable. W polu Variable wpisz nazwę zmiennej, która będzie przechowywać wartość kąta w radianach. Umieść kursor w polu Value i wybierz Object/Math/atan2. Zaznacz pole Expression (rys. 11.4).

  3. W polu Value, w miejsce argumentu y wpisz this._y, a w miejsce argumentu x wpisz this._x (rys. 11.5).

Flash obliczy tangens łuku współrzędnej y położenia wskaźnika, podzielonej przez współrzędną x i zwróci wynik, będący wartością w radianach.

  1. Wybierz Actions/set variable. W polu Variable wprowadź pełną ścieżkę dostępu do bloku dynamicznego tekstu na głównej listwie czasowej.

  1. W polu Value wprowadź wyrażenie, które mnoży wartość zmiennej przechowującej kąt w radianach przez 180 i dzieli wynik przez stałą Pi:

myRadians * 180/Math.PI;

Zaznacz pole Expression i dowiąż łańcuch znakowy "degrees" na końcu wyrażenia.

Wartość kąta zostanie przekształcona z radianów na stopnie i przypisana do zmiennej dynamicznego tekstu (rys. 11.6).

0x01 graphic

Rys. 11.3. Ta akcja startDrag sprawia, że klip filmowy podąża za wskaźnikiem myszy, będąc obramowanym prostokątem o wymiarach 300 x 300 pikseli

0x01 graphic

Rys. 11.4. Metoda Math.atan2 w polu Value wymaga podania argumentów y oraz x

0x01 graphic

Rys. 11.5. Metoda Math.atan2 oblicza kąt, jaki klip filmowy tworzy z punktem wyjściowym (lewy górny róg sceny)

0x01 graphic

Rys. 11.6. Blok dynamicznego tekstu o nazwie myDegrees wyświetla wartość kąta w stopniach

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

Rys. 11.7. Klip filmowy tworzy kąt o wartości ok. 65 stopni poniżej osi x

0x01 graphic

Rys. 11.8. Różnica pomiędzy współrzędną y pozycji przeciąganego klipu filmowego i klipem filmowym myReferencePoint jest parametrem y dla metody Math.atan2. Różnica pomiędzy współrzędną x pozycji przeciąganego klipu filmowego i klipem filmowym myReferencePoint jest parametrem x dla metody Math.atan2

  1. Przetestuj film.

Klip filmowy podąża za wskaźnikiem myszy przesuwanym po scenie. Flash oblicza kąt, jaki klip filmowy tworzy z osią głównej listwy czasowej i wyświetla wartość tego kąta (w stopniach) w bloku dynamicznego tekstu (rys. 11.7).

W celu obliczenia kąta
tworzonego względem innego punktu:

  1. Kontynuując poprzednie ćwiczenie, utwórz kolejny symbol klipu filmowego i umieść jego klon na scenie. Nazwij go, korzystając z pola Name palety Instance.

  1. Zaznacz klon pierwszego klipu filmowego (ten przeciągany) i otwórz paletę akcji.

  2. Zaznacz wyrażenie obliczające kąt za pomocą metody atan2. Zmień wyrażenie w następujący sposób:

Math.atan2((this._y-_root.myReferencePoint._y), (this._x-_root.myReferencePoint. _x));

gdzie myReferencePoint (punkt odniesienia) jest nazwą drugiego klipu filmowego, który nie będzie przeciągany.

Odejmując współrzędne y oraz x punktu odniesienia od pozycji przeciąganego klipu filmowego, Flash oblicza odległości y i x pomiędzy dwoma punktami (rys. 11.8).

  1. Przetestuj film.

Za przesuwanym przez użytkownika wskaźnikiem będzie podążał klip filmowy. Flash oblicza kąt pomiędzy przeciąganym klipem filmowym i klipem stacjonarnym, a następnie wyświetla wartość tego kąta (w stopniach) w bloku dynamicznego tekstu.

0x08 graphic
Jak dotąd, wartości obliczanych kątów posiadały wiele miejsc po przecinku. Często jednak zachodzi potrzeba zaokrąglenia tych wartości do najbliższej liczby całkowitej, żeby można było użyć ich jako parametrów metod i właściwości. Używaj metod Math.round do zaokrąglania wartości do najbliższej liczby całkowitej, Math.ceil do zaokrąglania wartości do najbliższej liczby całkowitej większej lub równej wskazanej wartości oraz metody Math.floor do zaokrąglania wartości do najbliższej liczby całkowitej mniejszej lub równej wskazanej wartości.

W celu zaokrąglenia
do liczby całkowitej:

  1. Kontynuując poprzednie ćwiczenie, zaznacz przeciągany klip filmowy i otwórz paletę akcji.

  1. Zaznacz wyrażenie przekształcające wartość w radianach na wartość w kątach.

  2. Umieść kursor w polu Value na początku wyrażenia i wpisz metodę Math.round. Użyj nawiasów do zgrupowania wyrażenia dokonującego przekształcenia z radianów na stopnie (rys. 11.9).

Flash przekształci wartość kąta podaną w radianach na stopnie, a potem przypisze tej wartości metodę Math.round, ostatecznie zwracając najbliższą wartości liczbę całkowitą.

Możesz wykorzystać metody obliczające wartości kątów i zaokrąglające te wartości do utworzenia przeciąganego, obrotowego pokrętła. Celem jest tu obliczenie kąta pomiędzy pozycją wskaźnika myszy i punktem środkowym pokrętła. Potem wystarczy przypisać do tego kąta właściwość _rotation.

W celu utworzenia
obrotowego pokrętła:

  1. Utwórz symbol klipu filmowego o kształcie pokrętła. Utwórz symbol przycisku i umieść jego klon wewnątrz symbolu klipu filmowego.

0x01 graphic

Rys. 11.9. Wartość wyrażenia w nawiasach jest zaokrąglana do najbliższej liczby całkowitej i wyświetlana w bloku dynamicznego tekstu o nazwie myDegrees

0x08 graphic
0x01 graphic

Rys. 11.10. Przypisz zmiennej pressing wartość true dla wciśniętego przycisku

0x01 graphic

Rys. 11.11. Przypisz zmiennej pressing wartość false dla przycisku zwolnionego, także poza jego obszarem aktywnym

0x01 graphic

Rys. 11.12. Zmienna myRadians przechowuje obliczony kąt pomiędzy wskaźnikiem myszy i klipem filmowym

  1. Zaznacz klon przycisku umieszczonego w klipie filmowym i otwórz paletę akcji.

  2. Wybierz Actions/on. Zaznacz zdarzenie Press i usuń zaznaczenie zdarzenia Release.

  3. Wybierz Actions/set variable. W polu Variable wpisz nazwę zmiennej pressing. W polu Value wpisz true. Zaznacz pole wyboru Expression obok pola Value (rys. 11.10).

  4. Wybierz Actions/on. Zaznacz zdarzenia Release i Release Outside.

  5. Wybierz Actions/set variable. W polu Variable wpisz nazwę zmiennej pressing. W polu Value wpisz false. Zaznacz pole wyboru Expression obok pola Value (rys. 11.11).

Klon przycisku odnotowuje zdarzenia zarówno jego wciśnięcia, jak i zwolnienia.

  1. Wróć do głównej listwy czasowej i umieść klon twojego klipu filmowego (tego, który zawiera przycisk) na scenie.

  2. Zaznacz klon klipu filmowego i otwórz paletę akcji.

  3. Wybierz Actions/onClipEvent. Zaznacz zdarzenie enterFrame.

  4. Wybierz Actions/if. W polu Condition wpisz pressing == true.

  5. Wybierz Actions/set variable. W polu Variable podaj nazwę zmiennej. W polu Value wpisz:

Math.atan2((_root._ymouse-this._y), (_root._xmouse-this._x));

Zaznacz pole wyboru Expression obok pola Value.

Flash obliczy kąt pomiędzy pozycją wskaźnika myszy i punktem środkowym klipu filmowego (rys. 11.12).

  1. 0x08 graphic
    0x08 graphic
    Wybierz Actions/set variable. W polu Variable wpisz nazwę zmiennej. W polu Value wprowadź wyrażenie umożliwiające konwersję radianów na stopnie i zaokrąglające wynik do najbliższej liczby całkowitej. Zaznacz pole wyboru Expression obok pola Value (rys. 11.13).

  2. Wybierz Actions/setProperty. Z menu rozwijanego Property wybierz Rotation. W polu Target wpisz this. Zaznacz pole Expression. W polu Value wpisz nazwę zmiennej przechowującej wartość kąta w stopniach i dodaj 90. Zaznacz pole Expression.

Stopień obrotu klipu filmowego jest przypisywany do obliczonego kąta. Wartość 90 dodaje się w celu skompensowania różnicy pomiędzy obliczonym kątem i właściwością obrotu klipu filmowego. Wartość 0 dla właściwości _rotation odpowiada pozycji „na godzinie dwunastej” klipu filmowego, ale jednocześnie pozycji „na godzinie trzeciej” obliczonego kąta, tak więc dodanie 90 wyrównuje te wartości (rys. 11.14).

  1. Przetestuj film.

Kiedy użytkownik kliknie przycisk na pokrętle, będzie mógł obracać pokrętłem wokół jego punktu środkowego. Pokrętło przestanie się obracać po zwolnieniu przycisku.

0x01 graphic

Rys. 11.13. Wartość kąta jest przekształcana z radianów na stopnie, zaokrąglana do najbliższej liczby całkowitej i przypisywana do zmiennej myDegrees

0x01 graphic

Rys. 11.14. Obrót klipu filmowego jest ustawiony na podstawie wartości zmiennej myDegrees + 90 stopni, w celu zniwelowania różnicy pomiędzy obliczonym kątem (myDegrees) i właściwością obrotu

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

Rys. 11.15. Wartości x oraz y dla tego samochodu, przebywającego określoną odległość, są definiowane przez sinus i cosinus jego kąta

0x01 graphic

Rys. 11.16. Obrót klipu filmowego zaczyna się na osi pionowej i zmierza w kierunku ruchu wskazówek zegara (z lewej). Wartości sinusa i cosinusa kąta zaczynają się na osi poziomej i rosną w kierunku przeciwnym do ruchu wskazówek zegara (z prawej)

Używanie funkcji sinus
i cosinus
do wyznaczania ruchu ukierunkowanego

Jeśli chcesz kontrolować dystans przebyty na scenie przez obiekt w oparciu o kąt, możesz użyć funkcji trygonometrycznych sinusa i cosinusa, które pomogą ci wykonać obliczenia. Załóżmy, że masz zamiar stworzyć grę wyścigową z samochodem poruszanym przez użytkownika wokół ścieżki. Samochód podróżowałby z określoną prędkością i w kierunku, w którym skierowany jest jego przód. Jeśli jest skierowany do góry, samochód pojedzie do przodu. Jeśli jest skierowany w prawo, samochód pojedzie w prawo. Jeśli jest skierowany pod kątem 75 stopni, samochód również pojedzie w odpowiednim dla tego położenia kierunku. Obliczenie odległości, jaką ma przebyć samochód w kierunku poziomym i pionowym, wymaga użycia metod Math.sin i Math.cos obiektu matematycznego. Nowa pozycja samochodu jest określana przez boki x oraz y trójkąta tworzonego przez kąt ustawienia samochodu. Kiedy samochód jest skierowany do góry, wartość y wynosi 1 i wartość x równa się 0. Jeśli skierować samochód na prawo, to wartość y wynosi 0 i wartość x równa jest 1. W przypadku, gdy samochód jest ustawiony w jakimś kierunku pośrednim, sinus i cosinus kąta pozwolą ci obliczyć stosunek x do y (rys. 11.15). Sinus kąta określa wartość bezwzględną y, a cosinus - wartość bezwzględną x. Warto zauważyć, że, sinus i cosinus bazują na kątach rozpoczynających się od wartości 0 stopni na osi poziomej. Natomiast właściwość obrotu (_rotation) jest oparta na kątach rozpoczynających się od wartości 0 stopni na osi pionowej. Stąd konieczne jest użycie cosinusa w przypadku wartości y i sinusa dla wartości x (rys. 11.16).

mojSamochod._y = mojSamochod_y - Math.cos(kat);

mojSamochod._x = mojSamochod_x + Math.sin(kat);

0x08 graphic
W poniższym ćwiczeniu utworzysz klip filmowy, którego stopień obrotu będzie kontrolowany przez użytkownika. Klip filmowy ma tutaj stałą prędkość, będzie więc zmierzał w kierunku, w jakim go ustawiono - podobnie jak samochód, który jedzie tak, jak sterujesz kierownicą.

W celu
utworzenia sterowanego obiektu
przemieszczającego się
ruchem kierunkowym:

  1. Utwórz symbol klipu filmowego, umieść jego klon na scenie i nadaj mu nazwę.

  1. Zaznacz klon klipu filmowego i otwórz paletę akcji.

  2. Wybierz Actions/onClipEvent. Zaznacz zdarzenie Key Down.

  3. Wybierz Actions/if. W polu Condition wpisz:

Key.isDown (Key.LEFT);

Flash sprawdzi, czy wciśnięto klawisz strzałki w lewo.

  1. Wybierz Actions/evaluate. W polu Expression wpisz myRotation jako nazwę zmiennej obrotu klipu filmowego, następnie operator -= i na końcu liczbę 10. Flash odejmie 10 od bieżącej wartości zmiennej myRotation, jeśli wciśnięty zostanie klawisz strzałki w lewo (rys. 11.17).

  2. Wybierz Actions/else. W polu Condition wpisz:

Key.isDown (Key.RIGHT);

Flash sprawdzi, czy wciśnięto klawisz strzałki w prawo.

  1. Wybierz Actions/evaluate. W polu Expression wpisz myRotation, następnie operator += i na końcu liczbę 10.

Flash doda 10 do bieżącej wartości zmiennej myRotation, jeśli wciśnięty zostanie klawisz strzałki w prawo (rys. 11.18).

0x01 graphic

Rys. 11.17. Zmienna myRotation zwiększa swoją wartość po naciśnięciu klawisza strzałki w lewo

0x01 graphic

Rys. 11.18. Zmienna myRotation zwiększa swoją wartość po naciśnięciu klawisza strzałki w prawo

0x08 graphic
0x01 graphic

Rys. 11.19. Cosinus kąta obrotu klipu filmowego jest po obliczeniu przypisywany do zmiennej ychange

0x01 graphic

Rys. 11.20. Sinus kąta obrotu klipu filmowego jest po obliczeniu przypisywany do zmiennej xchange

  1. Wybierz Actions/onClipEvent. Zaznacz zdarzenie enterFrame.

  2. Wybierz Actions/set variable. W polu Variable wpisz nazwę zmiennej ychange. Umieść wskaźnik myszy w polu Value i wybierz Objects/Math/cos. W polu Value pojawi się metoda Math.cos z podświetlonym argumentem.

  3. W miejsce podświetlonego argumentu wstaw wyrażenie przekształcające wartość zmiennej myRotation z radianów na stopnie. Pomnóż całe wyrażenie przez 3 i zaznacz pole wyboru Expression obok pola Value (rys. 11.19).

Zmienna ychange reprezentuje wartość bezwzględną boku trójkąta y. Pomnożenie przez 3 zwiększa tę wartość, dzięki czemu klip filmowy porusza się nieco szybciej w kierunku y.

  1. Wybierz Actions/set variable. W polu Variable wpisz nazwę zmiennej xchange. Umieść wskaźnik w polu Value i wybierz Objects/Math/cos. W polu Value pojawi się metoda Math.sin z podświetlonym argumentem.

  2. W miejsce podświetlonego argumentu wstaw wyrażenie przekształcające wartość zmiennej myRotation z radianów na stopnie. Pomnóż całe wyrażenie przez 3 i zaznacz pole wyboru Expression obok pola Value (rys. 11.20).

Zmienna xchange reprezentuje wartość bezwzględną boku trójkąta x. Pomnożenie przez 3 zwiększa tę wartość, dzięki czemu klip filmowy porusza się nieco szybciej w kierunku x.

  1. 0x08 graphic
    Wybierz Actions/setProperty. Z menu rozwijanego Property wybierz Y Position. W polu Target wpisz this. W polu Value wpisz:

this._y - ychange;

Zaznacz obydwa pola wyboru Expression.

  1. Wybierz Actions/setProperty. Z menu rozwijanego Property wybierz X Position. W polu Target wpisz this. W polu Value wpisz:

this._x + xchange;

Zaznacz obydwa pola wyboru Expression.

  1. Wybierz Actions/setProperty. Z menu rozwijanego Property wybierz Rotation. W polu Target wpisz this. W polu Value wpisz nazwę zmiennej myRotation. Zaznacz obydwa pola wyboru Expression (rys. 11.21).

  2. Przetestuj film.

Kiedy użytkownik naciśnie klawisz strzałki w lewo lub strzałki, zmieni się stopień obrotu klipu filmowego. Zmienią się też wartości x oraz y, obliczone na podstawie kąta klipu filmowego. Klip filmowy będzie się poruszał w kierunku, w jakim skierowany jest jego „nos” (tutaj - przód samochodu) (rys. 11.22).

0x01 graphic

Rys. 11.21. Ostatnie trzy wyrażenia setProperty widoczne w oknie skryptu modyfikują pozycje x i y w zmiennych xchange oraz ychange; zmieniają też stopień obrotu klipu filmowego na podstawie zmiennej myRotation

0x01 graphic

Rys. 11.22. Kiedy klip filmowy samochodu obraca się, wartości x i y są obliczane na podstawie sinusa oraz cosinusa kąta, a w rezultacie definiowana jest nowa pozycja samochodu

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

Rys. 11.23. Ten trójkąt prostokątny ma boki oznaczone jako a, b i c

Obliczanie odległości
za pomocą
obiektu matematycznego

Dzięki wykorzystaniu właściwości twierdzenia Pitagorasa, Flash umożliwia obliczenie odległości pomiędzy dwoma obiektami. Technika ta może być użyteczna w tworzeniu niespotykanych interakcji, zachodzących między elementami interfejsu - np. grafiką, przyciskami lub dźwiękami, reagującymi w zależności od ich odległości w stosunku do wskaźnika myszy. Możliwe jest nawet projektowanie gier z interakcją bazującą na odległości między obiektami i graczem. Przykładowo, gra, w której gracz używa siatki do złapania złotej rybki pływającej po akwarium, może wykorzystywać odległość pomiędzy złotą rybką i siatką w celu zasymulowania zachowania rybki. Być może im bliżej znajduje się siatka, tym szybciej rybka będzie uciekać.

Odległość pomiędzy dwoma dowolnymi punktami jest opisywana równaniem:

a2 + b2 = c2

lub

c = pierwiastek kwadratowy (a2 + b2)

Zmienne a i b oznaczają długości boków trójkąta prostokątnego, natomiast c jest długością przeciwprostokątnej (rys. 11.23). Używając metod Flasha, Math.sqrt oraz Math.pow, odległość między punktami na przeciwprostokątnej można obliczyć za pomocą wyrażenia:

c = Math.sqrt ((Math.pow (a, 2)) + (Math.pow (b, 2)));

0x08 graphic
W celu obliczenia odległości
pomiędzy wskaźnikiem myszy
i dowolnym punktem:

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

  1. Zaznacz klon klipu filmowego i otwórz paletę akcji.

  2. Wybierz Actions/onClipEvent. Zaznacz zdarzenie Mouse move.

  3. Wybierz Actions/set variable. W polu Variable wpisz xDistance. W polu Value wpisz:

_root._xmouse - this._x

Zaznacz pole wyboru Expression obok pola Value.

Odległość pomiędzy współrzędną x położenia wskaźnika myszy i współrzędną x położenia klipu filmowego zostanie przypisana do zmiennej xDistance (rys. 11.24).

  1. Wybierz Actions/set variable. W polu Variable wpisz yDistance. W polu Value wpisz:

_root._ymouse - this._y

Zaznacz pole wyboru Expression obok pola Value.

Odległość pomiędzy współrzędną y położenia wskaźnika myszy i współrzędną y położenia klipu filmowego zostanie przypisana do zmiennej yDistance (rys. 11.25).

  1. Wybierz Actions/set variable. W polu Variable wpisz nazwę zmiennej myDistance. Umieść wskaźnik w polu Value i wybierz Objects/Math/sqrt.

W polu Value pojawi się metoda Math.sqrt z podświetlonym argumentem.

0x01 graphic

Rys. 11.24. Różnica pomiędzy współrzędną x położenia wskaźnika myszy i współrzędną x położenia klipu filmowego stanowi odległość między nimi na osi x

0x01 graphic

Rys. 11.25. Różnica pomiędzy współrzędną y położenia wskaźnika myszy i współrzędną y położenia klipu filmowego stanowi odległość między nimi na osi y

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

Rys. 11.26. Odległość między dwoma punktami jest obliczana na podstawie wartości zmiennych xDistance i yDistance

0x01 graphic

Rys. 11.27. Blok dynamicznego tekstu myDisplay pokazuje wartość całkowitą zmiennej myDistance

  1. W miejsce podświetlonego argumentu wstaw nowy, wybierając Objects/Math/pow i wpisując xDistance oraz 2 dla metody Math.pow. Dodaj kolejną metodę Math.pow, z argumentami yDistance i 2 (rys. 11.26).

Flash obliczy kwadrat wartości zmiennej xDistance i doda ją do kwadratu wartości zmiennej yDistance. Następnie obliczy kwadrat wartości tej sumy.

  1. Wybierz Actions/set variable. Przypisz wartość zmiennej myDistance do bloku dynamicznego tekstu na scenie (rys. 11.27).

  2. Przetestuj film.

Kiedy wskaźnik przemieszcza się po obszarze klipu filmowego, Flash oblicza odległość między nimi w pikselach.

0x08 graphic
Generowanie liczb losowych

Gdybyś potrzebował włączyć do swojego filmu Flasha jakieś elementy przypadkowości, czy to dla uatrakcyjnienia projektu, czy też na potrzeby mechaniki gry, możesz w tym celu skorzystać z metody obiektu matematycznego o nazwie Math.random. Metoda ta pozwala generować liczby z zakresu 0 do 1, z uwzględnieniem maksymalnie 15 miejsc po przecinku. Przykładowe wartości zwracane przez tę metodę mogą wyglądać następująco:

0.242343544598273

0.043628738493829

0.7567833408654

Liczbę losową można modyfikować, mnożąc jej wartość lub dodając do niej inną wartość i w efekcie otrzymując określony zakres liczb. Przykładowo, jeśli potrzebujesz liczb losowych z zakresu 1 do 10, pomnóż wartość zwracaną przez metodę Math.random przez 9, a następnie dodaj 1, jak w wyrażeniu:

Math.random () * 9 + 1;

Jeśli chodzi ci o liczbę całkowitą, użyj metody Math.round, która zaokrągli wartość do najbliższej liczby całkowitej.

W celu wygenerowania liczby losowej:

  1. Utwórz symbol przycisku i umieść jego klon na scenie. Zaznacz klon i otwórz paletę akcji.

  1. Wybierz Actions/set variable.

  2. W polu Variable wpisz nazwę zmiennej. Umieść wskaźnik myszy w polu Value i wybierz Objects/Math/random. Zaznacz pole wyboru Expression.

W polu Variable pojawi się metoda Math.random (rys. 11.28).

  1. Utwórz na scenie blok dynamicznego tekstu, o tej samej nazwie zmiennej, jakiej użyłeś w przypadku akcji przypisanych do klonu przycisku. Po kliknięciu przycisku, wygenerowana zostanie nowa liczba losowa z zakresu 0 do 1. Zobaczysz ją w bloku dynamicznego tekstu.

0x01 graphic

Rys. 11.28. Liczba losowa z zakresu 0 do 1 jest przypisywana do zmiennej myRandomNumber (moja liczba losowa)

0x08 graphic
0x01 graphic

Rys. 11.29. Zmienna myRandomX jest przypisywana do liczby z zakresu 1 do 300

0x01 graphic

Rys. 11.30. Współrzędna x położenia klipu filmowego otrzymuje zaokrągloną wartość zmiennej myRandomX

Wykorzystaj losowo generowane liczby do nadania twojemu filmowi nieprzewidywalnych, animowanych elementów. Wrogie statki kosmiczne w grze zręcznościowej mogą atakować z któregokolwiek miejsca na ekranie. Możesz zmusić Flasha do losowego rozdawania kart z talii - tak, że każda sterta będzie inna niż pozostałe. Tymczasem na potrzeby testu dobrze byłoby wymieszać czasem kolejność pojawiania się pytań. Poniższe ćwiczenie demonstruje sposób, w jaki liczby losowe mogą modyfikować wartości właściwości, zmieniając właściwości x oraz y klipu filmowego:

W celu użycia liczb losowych
jako wartości właściwości:

  1. Stwórz symbol klipu filmowego i umieść jego klon na scenie. Nadaj mu nazwę przy pomocy pola Name palety Instance.

  1. Zaznacz klon klipu filmowego i otwórz paletę akcji.

  2. Wybierz Actions/onClipEvent. Zaznacz zdarzenie enterFrame.

  3. Wybierz Actions/set variable. W polu Variable wpisz nazwę zmiennej. W polu Value wpisz:

Math.random () * 299 + 1;

Zaznacz pole Expression.

Flash wygeneruje liczbę losową z zakresu 1 do 300 (rys. 11.29).

  1. Ponownie wybierz Actions/set variable. Przypisz drugą zmienną do liczby losowej z zakresu 1 do 300.

  2. Wybierz Actions/setProperty. W menu rozwijanym Property zaznacz X Position. W polu Target wpisz this. W polu Value, nadaj metodę Math.round pierwszej z wygenerowanych liczb losowych. Zaznacz obydwa pola wyboru Expression (rys. 11.30).

Współrzędna położenia x klipu filmowego zostanie przypisana do pierwszej wygenerowanej losowo liczby.

  1. 0x08 graphic
    0x08 graphic
    0x08 graphic
    Wybierz Actions/setProperty. W menu rozwijanym Property zaznacz Y Position. W polu Target wpisz this. W polu Value, nadaj metodę Math.round drugiej z wygenerowanych liczb losowych. Zaznacz obydwa pola wyboru Expression.

Współrzędna położenia y klipu filmowego zostanie przypisana do pierwszej wygenerowanej losowo liczby (rys. 11.31).

  1. Ustaw rozmiar sceny na 300×300. Przetestuj film. Współrzędne położenia klipu filmowego zmieniają się losowo i w efekcie klip pojawia się w różnych punktach sceny.

Wskazówka

  • Metoda Math.random zastępuje akcję random, używaną we wcześniejszych wersjach Flasha. Chociaż akcja ta wciąż działa, to jednak należy do grupy funkcji odrzuconych, więc do generowania liczb losowych postaraj się raczej używać obiektu matematycznego.

0x01 graphic

Rys. 11.31. Współrzędna y położenia klipu filmowego otrzymuje zaokrągloną wartość zmiennej myRandomY. Klip filmowy zmienia teraz swoją pozycję na scenie w sposób losowy (u góry)

0x08 graphic
0x01 graphic

Rys. 11.32. Tablica przypomina dwukolumnową tabelę, przy czym jedna z kolumn zawiera indeksy, a drugą odpowiadające im wartości

Porządkowanie informacji
za pomocą tablic

Kiedy masz do czynienia z wieloma fragmentami powiązanych informacji przeznaczonych do przechowywania, może zajść potrzeba skorzystania z obiektu tablicowego (Array) do odpowiedniego ułożenia tych informacji. Tablice są, podobnie jak zmienne, pojemnikami na dane, tyle że - w odróżnieniu od zmiennych - przechowują te dane w określonej sekwencji, nazywanej indeksem (index). Pierwszy indeks ma zawsze wartość 0, a kolejne indeksy oznaczane są sekwencyjnie, tak więc każdy fragment danych odpowiada jednemu indeksowi, tak jak to zilustrowano w dwukolumnowej tabeli na rys. 11.32. Skoro każdy fragment danych jest ułożony numerycznie, informacje mogą być odczytywane i modyfikowane w łatwy, a co ważniejsze, automatyczny sposób, po prostu przez odwołanie do indeksu. Załóżmy np., że tworzysz obcojęzyczny samouczek i pragniesz mieć możliwość sprawdzania zawartości wprowadzonego przez użytkownika tekstu w poszukiwaniu ważnych słów. Mógłbyś w takiej sytuacji przechowywać te słowa w tablicach, gdzie indeks 0 wskazywałby pierwsze słowo, indeks 1 drugie, itd. Używając wyrażenia do utworzenia pętli, możesz automatycznie sprawdzać wprowadzany tekst pod kątem każdej z danych przechowywanych w tablicy.

Indeksy tablic podaje się w nawiasach kwadratowych, jak w wyrażeniu:

mojaTablica[4]

Nawiasy kwadratowe nazywają się tutaj operatorami dostępu do tablic. Powyższe wyrażenie daje dostęp do danych w indeksie 4 tablicy o nazwie mojaTablica. Liczba danych określa długość tablicy, więc tablica na rys. 11.32 ma długość 6. Tablica przypomina taką sekwencję uporządkowanych zmiennych.

0x08 graphic
Na przykład, zmienne mojeWyniki0, mojeWyniki1, mojeWyniki2 i mojeWyniki3 mogą tworzyć razem pojedynczą tablicę o nazwie mojeWyniki i długości 4, z indeksami pomiędzy 0 i 3. Jako że ostatecznie masz do czynienia z jednym obiektem tablicowym zamiast czterech osobnych zmiennych, używanie tablic znacznie ułatwia zarządzanie danymi.

Dane przechowywane w tablicach mogą być mieszane. Tak więc możliwe jest przypisanie do indeksu 0 liczby, łańcucha znakowego do indeksu 1 i wartości logicznej do indeksu 2. I podobnie, jak w przypadku zmiennych, możesz w dowolnej chwili zmieniać zawartość każdego z indeksów tablicy. Długość tablicy też nie jest ściśle określona, dzięki czemu tablice mogą odpowiednio zwiększać lub zmniejszać pojemność stosownie do potrzeb.

Na stworzenie tablicy składają się dwie czynności. Pierwsza to przygotowanie klonu nowej tablicy z obiektu tablicowego za pomocą funkcji konstruktora. Oto przykład:

mojaZmienna = new Array ();

Druga czynność to wypełnienie tablicy danymi. Jednym ze sposobów wypełnienia tablicy jest przypisanie danej do każdego indeksu w osobnym wyrażeniu:

mojaTablica [0] = "Russel";

mojaTablica [1] = "Rebecca";

mojaTablica [2] = "Elissa";

mojaTablica [3] = "Marjorie";

Drugi sposób polega na podstawieniu danych za pomocą funkcji konstruktora:

MojaTablica = new Array ("Russel", "Rebecca", "Elissa", "Marjorie");

Powyższa metoda jest poręczniejsza w wypełnianiu tablic, ale musisz pamiętać o wprowadzaniu danych w sekwencji.

0x08 graphic
0x01 graphic

Rys. 11.33. Utworzono klon nowego obiektu o nazwie myArray (moja tablica)

0x01 graphic

Rys. 11.34. Ta tablica zawiera trzy wpisy

W celu utworzenia tablicy:

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

  1. Wybierz Actions/set variable.

  2. W polu Variable wpisz nazwę twojej tablicy. Umieść kursor w polu Value i wybierz Objects/Array/new Array. Zaznacz pole wyboru Expression obok pola Value.

W polu Value pojawi się funkcja konstruktora new Array. Flash utworzy klon nowej tablicy (rys. 11.33).

  1. Wybierz Actions/set variable.

  2. W polu Variable wpisz nazwę twojej nowej tablicy, a następnie indeks w nawiasach kwadratowych. W polu Value wprowadź dane, które mają być przechowywane w tablicy pod tym indeksem (rys. 11.34).

  3. Kontynuuj korzystanie z polecenia Actions/set variable w celu przypisania kolejnych danych do tablicy.

Wskazówka

  • Możesz predefiniować długość nowej tablicy, umieszczając liczbę w nawiasach funkcji konstruktora. Przykładowo, wyrażenie:

mojaTablica = new Array (4)

utworzy nową tablicę o długości czterech wpisów. Nawet jeśli nie wypełnisz wszystkich pozycji tablicy, mojaTablica i tak będzie miała długość 4.

0x08 graphic
Jako że dane zawarte w tablicach są indeksowane numerycznie, świetnie nadają się do wykorzystania w zapętlonych akcjach. Korzystając z akcji tego typu, np. while, do while i for, możesz sprawić, że Flash prześledzi wartość każdego indeksu oraz odczyta lub przypisze nowe dane szybko i automatycznie. Przykładowo, żeby ustalić średnią punktów kilku graczy w tablicy bez zapętlającej się akcji, musiałbyś zsumować wszystkie zdobyte przez nich punkty i podzielić otrzymaną wartość przez liczbę graczy, jak w wyrażeniu:

mojaSuma = mojePunkty [0] + mojePunkty [1] + mojePunkty [2] + ... ;

mojaSrednia = mojaSuma/mojePunkty.length;

Właściwość length definiuje liczbę pozycji w tablicy.

Jednak używając zapętlonej akcji, mógłbyś obliczyć wartość mojaSuma następująco:

For (i=0; i<mojePunkty.length; i++) {

mojaSuma = mojaSuma + mojePunkty[i];

};

mojaSrednia = mojaSuma/mojePunkty.length;

Flash zaczyna w indeksie 0 i dodaje każdy zindeksowany wpis w tablicy do zmiennej mojaSuma, dopóki nie osiągnie końca tablicy.

W celu przetwarzania danych
w tablicy w pętli:

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

  1. Wybierz Actions/set variable i zdefiniuj nową tablicę o nazwie myScores (moje punkty), tak jak robiłeś to w poprzednim ćwiczeniu.

  2. Wybierz Actions/set variable i wypełnij tablicę myScores liczbami reprezentującymi punkty (rys. 11.35).

0x01 graphic

Rys. 11.35. Ta tablica, nazwana myScores, ma cztery wpisy

0x08 graphic
0x01 graphic

Rys. 11.36. Ta akcja for będzie wykonana tyle razy, ile jest wpisów w tablicy myScore

0x01 graphic

Rys. 11.37. Zmienna mySum dodaje wartość każdego z wpisów w tablicy

0x01 graphic

Rys. 11.38. Poza pętlą for, zmienna myAverage oblicza średnią wartość wpisów w tablicy

  1. Utwórz symbol przycisku i umieść jego klon na scenie. Zaznacz klon przycisku i otwórz paletę akcji.

  2. Wybierz Actions/for. W polu Init wpisz i=0. W polu Condition wprowadź i<myScores.length. W polu Next wpisz i++.

Flash zaczyna od zmiennej licznika i ustawionej na wartość 0. Następnie zwiększa wartość zmiennej, dodając 1 aż do momentu, kiedy zmienna osiągnie długość tablicy o nazwie myScores (rys. 11.36).

  1. Wybierz Actions/set variable. W polu Variable wpisz mySum. W polu Value wpisz mySum + myScores[i]. Zaznacz pole wyboru Expression obok pola Value.

Przy każdym indeksie tablicy myScore Flash dodaje wartość w tym indeksie do zmiennej mySum. Kiedy wartość zmiennej osiągnie wartość myScores.length, Flash opuści pętlę for i zaprzestanie dodawania kolejnych wartości indeksu. Tak więc na końcu dodawane jest wyrażenie myScores [myScores.length1], odpowiadające ostatniemu indeksowi tablicy (rys. 11.37).

  1. Zaznacz klamrę zamykającą wyrażenia for. Wybierz Actions/set variable.

Następne wyrażenie pojawi się za klamrą zamykającą wyrażenie for.

  1. W polu Variable wpisz myAverage. W polu Value wpisz wyrażenie mySum/ myScores.length. Zaznacz pole wyboru Expression obok pola Value (rys. 11.38).

  2. Utwórz na scenie blok dynamicznego tekstu o nazwie myAverage.

  3. Przetestuj film.

Po kliknięciu umieszczonego na scenie przycisku - Flash wykona pętlę, dodając wszystkie wpisy tablicy myScores i dzieląc otrzymaną sumę przez liczbę wpisów. Średnia wyświetlana jest w bloku dynamicznego tekstu, widocznym na scenie.

0x08 graphic
Metody obiektu tablicowego pozwalają sortować, usuwać, dodawać dane zgromadzone w tablicy i manipulować . Listę metod obiektu tablicowego przedstawia tabela 11.2. Bardzo pomocne jest rozważanie metod w parach. Przykładowo, shift oraz unshift to metody modyfikujące początek tablicy; push i pop modyfikują koniec tablicy; wreszcie slice i spice pozwalają modyfikować środek tablicy.

Tabela 11.2. Metody obiektu tablicowego

Metoda Opis

concat(array1,...,arrayN)

Wiąże wskazane wartości (tablice) i zwraca nową tablicę.

join(separator)

Wiąże elementy tablicy, wstawia pomiędzy elementy separator (dowolny znak) i zwraca łańcuch znakowy.

pop()

Usuwa ostatni element w tablicy i zwraca wartość tego elementu.

push(value)

Dodaje elementy do końca tablicy i zwraca nową długość.

shift()

Usuwa pierwszy element w tablicy i zwraca wartość tego elementu.

unshift(value)

Dodaje elementy do początku tablicy i zwraca nową długość.

slice(indexA, indexB)

Zwraca nową tablicę zaczynającą się od indexA i kończącą się na (indexB-1).

splice(index, count, elem1,..., elemN)

Wstawia lub usuwa elementy. Ustaw count to 0 w celu wstawienia wskazanych wartości zaczynając o indeksu. Ustaw count>0 w celu usunięcia danej liczby elementów, zaczynając od indeksu (i łącznie z tym indeksem).

reverse()

Odwraca kolejność elementów w tablicy.

sort()

Sortuje tablicę, używając operatora <. Liczby sortowane są w porządku rosnącym, łańcuchy znakowe w porządku alfabetycznym.

toString()

Zwraca łańcuch znakowy z każdym elementem powiązanym i oddzielonym przecinkiem.

Tabela 11.2. Metody obiektu tablicowego (ciąg dalszy)

Poniżej przedstawiono przykłady działania niektórych metod:

Wyrażenie Wartość tablicy myArray

myArray = new Array (2, 4, 6, 8)

2, 4, 6, 8

myArray.pop()

2, 4, 6

myArray.push(1, 3)

2, 4, 6, 1, 3

myArray.shift()

4, 6, 1, 3

myArray.unshift(5, 7)

5, 7, 4, 6, 1, 3

myArray.splice(2, 0, 8, 9)

5, 7, 8, 9, 4, 6, 1, 3,

myArray.splice(3, 2)

5, 7, 8, 6, 1, 3,

myArray.reverse()

3, 1, 6, 8, 7, 5

myArray.sort()

1, 3, 5, 6, 7, 8

0x08 graphic

Wskazówki

  • Należy pamiętać, które metody obiektu tablicowego modyfikują bieżącą tablicę, a które zwracają nową tablicę. Metody concat, join, slice i toString zwracają nowe tablice lub łańcuchy znakowe i wymagają przypisania ich wartości do zmiennych. Przykładowo, mojaNowaTablica = mojaTablica. concat(8) umieszcza 8 na końcu tablicy mojaTablica i przypisuje końcową postać tej tablicy do mojaNowaTablica.

  • Zwróć także uwagę na to, że niektóre metody modyfikują tablicę, jak również zwracają specyficzną wartość. To nie jest to samo. Przykładowo, wyrażenie mojaTablica.pop() modyfikuje tablicę mojaTablica, usuwając ostatni element, a ponadto zwraca wartość tego ostatniego elementu. Rozważ przykład:

mojaTablica = new Array (2, 4, 6, 8);

mojeUsuniecie = mojaTablica.pop();

Wartość mojeUsuniecie to 8, a wartością tablicy mojaTablica jest teraz 2, 4, 6.

0x08 graphic
Wprowadzanie
wskazań daty i pomiaru czasu

Obiekt daty (Date) umożliwia odczytanie informacji o dacie i czasie lokalnym oraz uniwersalnym (GMT) na podstawie zegara systemowego w komputerze użytkownika. Za pomocą obiektu daty uzyskasz takie informacje, jak rok, miesiąc, dzień, dzień tygodnia, godzina, minuta sekunda i milisekunda. Użyj obiektu i jego metod do wprowadzenia do filmu zegara lub też do uzyskiwania informacji o określonych datach z przeszłości. Możesz, na przykład, przygotować obiekt daty dla dnia twoich urodzin, podając miesiąc, dzień i rok. Później, za pomocą metod obiektu daty, będziesz mógł określić dzień tygodnia, w którym przyszedłeś na świat.

Żeby móc użyć obiektu daty, trzeba najpierw utworzyć jego klon, posługując się przy tym funkcją konstruktora new Date. Potem można już wywoływać metody obiektu i uzyskiwać pożądane informacje. Powszechnie używane metody, służące do uzyskiwania informacji o dacie i czasie, przedstawia tabela 11.3.

W celu utworzenia zegara:

  1. Utwórz na scenie blok dynamicznego tekstu i nadaj mu nazwę zmiennej.

  1. Zaznacz blok dynamicznego tekstu i wybierz Insert/Convert to Symbol. Przydziel dla symbolu nazwę i wybierz opcję Movie Clip w typie Behavior. Kliknij OK.

Twój blok dynamicznego tekstu zostanie umieszczony w symbolu klipu filmowego, którego klon pozostanie na scenie.

  1. Zaznacz klon klipu filmowego i otwórz paletę akcji.

  2. Wybierz Actions/onClipEvent. Zaznacz zdarzenie enterFrame.

Tabela 11.3. Metody obiektu daty

Metoda Opis

getDate()

Zwraca dzień miesiąca, w postaci liczby z zakresu 1 do 31.

getDay()

Zwraca dzień tygodnia, w postaci liczby z zakresu 0 (niedziela) do 6 (sobota).

getFullYear()

Zwraca rok, w postaci czterocyfrowej liczby.

getHours()

Zwraca godzinę w ciągu dnia, w postaci liczby z zakresu 0 do 23.

getMiliseconds()

Zawraca milisekundy.

getMinutes()

Zwraca minuty, w postaci liczby z zakresu 0 do 59.

getMonth()

Zwraca miesiąc, w postaci liczby z zakresu 0 (styczeń) do 11 (grudzień).

getSeconds()

Zwraca sekundy, w postaci liczby z zakresu 0 do 59.

0x08 graphic
0x01 graphic

Rys. 11.39. Argumenty funkcji konstruktora new Date podaje się opcjonalnie

0x01 graphic

Rys. 11.40. Bieżące wskazania godzinowe są przypisywane do zmiennej currentHour

0x01 graphic

Rys. 11.41. Wskazania godzinowe, minutowe i sekundowe są przypisane do różnych zmiennych

  • Wybierz Actions/set variable. W polu Variable wpisz nazwę nowego obiektu daty. Umieść kursor w polu Value i wybierz Objects/Date/new Date. Zaznacz pole wyboru Expression obok pola Value.

W polu Value pojawi się funkcja konstruktora new Date z podświetlonymi argumentami (rys. 11.39).

  1. Usuń wszystkie podświetlone argumenty funkcji konstruktora new Date. Nie podając argumentów dla obiektu daty, utworzysz w efekcie obiekt podstawowy, odczytujący bieżącą datę i czas. Jeśli określisz argumenty, będziesz mógł przygotować obiekt odnoszący się do specyficznej daty lub czasu.

  2. Wybierz Actions/set variable. W polu Variable wpisz currentHour. W polu Value podaj nazwę twojego obiektu daty. Mając kursor w polu Value, wybierz Objects/Date/getHours. Zaznacz pole Expression.

Metoda getHours pojawi się za nazwą obiektu daty. Flash odczyta bieżące wskazania godziny i podstawi zwróconą wartość do zmiennej o nazwie currentHour (aktualna godzina) (rys. 11.40).

  1. Powtórz czynności poprzedniego kroku w celu uzyskania bieżących wskazań minutowych (metoda getMinutes) i sekundowych (metoda getSeconds) oraz przypisania zwróconych wartości do zmiennych (rys. 11.41).

  2. Wybierz Actions/if. W polu Condition wpisz:

currentHour > 12

  1. 0x08 graphic
    0x08 graphic
    0x08 graphic
    Wybierz Actions/set variable. W polu Variable wpisz currentHour. W polu Value wpisz:

CurrentHour-12; (rys. 11.42).

  1. Wybierz Actions/else if. W polu Condition wpisz:

CurrentHour == 0

  1. Wybierz Actions/set variable. W polu Variable wpisz currentHour. W polu Value wpisz 12. Zaznacz pole wyboru Expression obok pola Value (rys. 11.43).

  2. Zaznacz nawias zamykający wyrażenia else i wybierz Actions/set variable. W polu Variable wpisz nazwę bloku dynamicznego tekstu. W polu Value powiąż nazwy zmiennych odpowiadających wskazaniom godzin, minut i sekund, nie zapominając o odstępach pomiędzy kolejnymi argumentami. Zaznacz pole wyboru Expression obok pola Value (rys. 11.44).

  3. Przetestuj film.

Blok dynamicznego tekstu będzie wyświetlał bieżący czas (godzinę, minutę i sekundę) w formacie 12-godzinnym.

Wskazówka

  • Zauważ, że minuty i sekundy o wartościach mniejszych niż 10 są wyświetlane jako pojedyncze cyfry - 1,2, itd. w miejsce 01, 02, itd. Możesz to zmienić, dodając wyrażenie warunkowe sprawdzające bieżące wskazania minutowe i sekundowe, a następnie dodające na początek - jeśli trzeba - cyfrę 0.

0x01 graphic

Rys. 11.42. Wartością zwracaną przez metodę getHours jest liczba z zakresu 0 do 23. W celu dokonania konwersji na wskazania w formacie 12-godzinnym, odejmij 12 od wartości większej niż 12

0x01 graphic

Rys. 11.43. Ponieważ na naszych zegarach nie ma godziny „0”, Flash może przypisać 12 do każdego wskazania godzinowego o wartości 0

0x01 graphic

Rys. 11.44. Blok dynamicznego tekstu (u góry) wyświetla powiązane wartości

0x08 graphic
0x01 graphic

Rys. 11.45. Tablica daysofWeek (dni tygodnia) zawiera łańcuchy znakowe przedstawiające nazwy dni tygodnia

Wartości zwracane przez metody getMonth i getDays obiektu daty są liczbami, nie łańcuchami znakowymi. Metoda getMonth zwraca wartości od 0 do 11 (0 = styczeń), a metoda getDays zwraca wartości od 0 do 6 (0 = niedziela). W celu przypisania do tych wartości nazw miesięcy i dni tygodnia, można utworzyć tablice przechowujące tego typu informacje. Przykładowo, tablica przechowująca nazwy dni tygodnia może być przygotowana za pomocą następujących wyrażeń:

daysofWeek = new Array ();

daysofWeek[0] = "Niedziela";

daysofWeek[1] = "Poniedziałek";

daysofWeek[2] = "Wtorek";

daysofWeek[3] = "Środa";

daysofWeek[4] = "Czwartek";

daysofWeek[5] = "Piątek";

daysofWeek[6] = "Sobota";

W celu utworzenia kalendarza:

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

  1. Wybierz Actions/set variable. W polu Variable wpisz nazwę nowej tablicy, która będzie przechowywać nazwy dni tygodnia. W polu Value wprowadź funkcję konstruktora new Array. Zaznacz pole wyboru Expression obok pola Value.

  2. W sekwencji wyrażeń, przypisz do każdego indeksu nowej tablicy łańcuch znakowy, reprezentujący nazwę kolejnego dnia tygodnia (rys. 11.45).

  3. Wybierz Actions/set variable. W polu Variable wpisz nazwę drugiej tablicy, która będzie przechowywać nazwy miesięcy. W polu Value wprowadź funkcję konstruktora new Array. Zaznacz pole wyboru Expression obok pola Value.

  1. 0x08 graphic
    W sekwencji wyrażeń, przypisz do każdego indeksu nowej tablicy łańcuch znakowy, reprezentujący nazwę kolejnego miesiąca (rys. 11.46).

  2. Utwórz na scenie blok dynamicznego tekstu i nadaj mu nazwę zmiennej.

  3. Zaznacz blok dynamicznego tekstu i wybierz Insert/Convert to Symbol. Wybierz nazwę dla symbolu i zaznacz opcję Movie Clip w typie Behavior. Kliknij OK.

Twój blok dynamicznego tekstu zostanie umieszczony w symbolu klipu filmowego, którego klon pozostanie na scenie.

  1. Zaznacz klon klipu filmowego i otwórz paletę akcji.

  2. Wybierz Actions/onClipEvent. Zaznacz zdarzenie Load.

  3. Wybierz Actions/set variable. W polu Variable wpisz nazwę twojego nowego obiektu daty. W polu Value wprowadź funkcję konstruktora new Date bez żadnych argumentów. Zaznacz pole Expression.

  4. W sekwencji wyrażeń wywołaj metody getFullYear, getMonth, getDate i getDay oraz przypisz ich wartości do nowych zmiennych (rys. 11.47).

  5. Wybierz Actions/set variable. W polu Variable wpisz nazwę bloku dynamicznego tekstu. W polu Value wprowadź ścieżkę dostępu do tablicy przechowującej nazwy dni tygodnia. Dołącz jako jej indeks zmienną zawierającą wartość zwróconą przez metodę getDay (rys. 11.48).

0x01 graphic

Rys. 11.46. Tablica daysofMonth (dni miesiąca) zawiera łańcuchy znakowe przedstawiające nazwy miesięcy

0x01 graphic

Rys. 11.47. Bieżące wskazania roku, miesiąca, daty i dnia tygodnia są przypisywane do nowych zmiennych

0x01 graphic

Rys. 11.48. Wartość zmiennej currentDay (aktualny dzień) to liczba z zakresu 0 do 6. Wyrażenie w polu Value odczytuje właściwy łańcuch znakowy z tablicy, odpowiadający nazwie aktualnego dnia

0x08 graphic
0x08 graphic

0x01 graphic

Rys. 11.49. Informacje o dniu tygodnia, miesiącu, dacie i roku są powiązane i wyświetlane w bloku tekstowym myDisplay (u góry)

  1. Dowiąż tablicę zawierającą nazwy dni miesiąca. Jako jej indeks, umieść zmienną zawierającą wartość zwróconą przez metodę getMonth. Dowiąż też pozostałe zmienne, przechowujące aktualną datę i rok (rys. 11.49).

  2. Przetestuj film.

Flash poda dzień, miesiąc, datę i rok, odczytane na podstawie zegara systemowego. Nazwy dni tygodnia i miesięcy są odczytywane z tablic, które zainicjowałeś w pierwszym ujęciu kluczowym, a końcowa informacja pojawia się w bloku dynamicznego tekstu.

Jeszcze innym sposobem na wprowadzenie do filmu elementu pomiaru czasu jest użycie funkcji Flasha o nazwie getTimer. Funkcja ta zwraca liczbę milisekund, które upłynęły od momentu rozpoczęcia odtwarzania filmu Flasha. Możesz porównać wartość zwróconą przez metodę getTimer jednego punktu w czasie do wartości zwróconej innego punktu, a otrzymana różnica będzie czasem, który upłynął pomiędzy tymi dwoma punktami. Wykorzystaj tę funkcję do tworzenia timerów w grach i innych zdarzeniach występujących w filmie Flasha. Przykładowo, można mierzyć czas potrzebny użytkownikowi na udzielenie poprawnych odpowiedzi w teście czy też wyznaczyć pewien limit czasowy na ukończenie testu. Można też nagradzać gracza większą ilością punktów, jeśli ukończy misję w wyznaczonym czasie.

Jako że getTimer jest funkcją, a nie obiektem, nie potrzebujesz używać funkcji konstruktora w celu utworzenia jego klonu i dzięki temu łatwo się tą funkcją posługiwać.

W celu utworzenia timera:

  1. Utwórz na scenie blok dynamicznego tekstu i nadaj mu nazwę zmiennej.

  1. Zaznacz blok dynamicznego tekstu i wybierz Insert/Convert to Symbol. Podaj nazwę dla symbolu i zaznacz opcję Movie Clip w typie Behavior. Kliknij OK.

0x08 graphic
Twój blok dynamicznego tekstu zostanie umieszczony w symbolu klipu filmowego, którego klon pozostanie na scenie.

  1. Zaznacz klon klipu filmowego i nadaj mu nazwę za pomocą pola Name palety Instance. Otwórz paletę akcji.

  2. Wybierz Actions/onClipEvent. Zaznacz zdarzenie Key down.

  3. Wybierz Actions/set variable. W polu Variable wpisz startTime. Umieść kursor w polu Value i wybierz Functions/ getTimer.

W polu Value pojawi się funkcja getTimer. Zaznacz pole Expression (rys. 11.50).

  1. Wybierz Actions/onClipEvent. Zaznacz zdarzenie enterFrame.

  2. Wybierz Actions/set variable. W polu Variable wpisz currentTime. Umieść kursor w polu Value i wybierz Functions/ getTimer.

W polu Value pojawi się funkcja getTimer. Zaznacz pole Expression (rys. 11.51).

  1. Wybierz Actions/set variable. W polu Variable wpisz elapsedTime. W polu Value wpisz:

Math.round ((currentTime-startTime)/1000);

Zaznacz pole wyboru Expression obok pola Value.

Flash obliczy różnicę pomiędzy aktualnym czasem (zmienna currentTime) a momentem, w którym naciśnięto klawisz na klawiaturze. Wynik dzielony jest przez 1000 w celu uzyskania wartości w sekundach, a następnie zaokrąglany do najbliższej wartości całkowitej (rys. 11.52).

0x01 graphic

Rys. 11.50. Po wczytaniu tego filmu, funkcja getTimer odczytuje czas, który minął od jego rozpoczęcia odtwarzania. Czas ten jest podstawiany do zmiennej startTime (czas rozpoczęcia)

0x01 graphic

Rys. 11.51. Funkcja getTimer nieustannie odczytuje czas mijający od uruchomienia filmu Flasha i podstawia go do zmiennej currentTime (aktualny czas)

0x01 graphic

Rys. 11.52. Zmienna elapsedTime reprezentuje ilość czasu, który upłynął pomiędzy dwoma punktami w czasie, zapisanymi w zmiennych startTime i currentTime

0x08 graphic
0x08 graphic
0x01 graphic

Rys. 11.53. Wartość przechowywana w zmiennej elapsedTime jest wyświetlana w bloku tekstowym myDisplay (u góry)

  1. Wybierz Actions/set variable. Przypisz wartość zmiennej elapsedTime (czas, który upłynął) do wyświetlenia w bloku dynamicznego tekstu (rys. 11.53).

  2. Przetestuj film.

Flash będzie wyświetlał czas, który upłynął od ostatniego momentu wciśnięcia klawisza. Poeksperymentuj z różnymi manipulatorami zdarzeń w celu stworzenia stopera z przyciskami start, stop i zapętlania.

Używanie listwy czasowej jako timera

Inną, często używaną metodą tworzenia timera jest liczenie odtworzonych już ujęć na listwie czasowej. Jeśli prędkość odtwarzania filmu wynosi 12 fps (klatek na sekundę), to znaczy, że każde 12 odtworzonych klatek jest równe jednej sekundzie czasu. Możesz w tym miejscu posłużyć się właściwością _currentframe do odczytania numeru bieżącego ujęcia, ewentualnie przypisać akcje do ujęcia kluczowego odpowiadającego określonej ilości czasu, którą chcesz mierzyć. Dla przykładu: umieść wyrażenie i = i + 1 w ujęciu kluczowym 60 na listwie czasowej klipu filmowego o prędkości odtwarzania 12 fps. Co każde 5 sekund (60 klatek / 12 fps = 5 sekund) wartość zmiennej i będzie wzrastać o 1.

Mimo iż proste w wykonaniu, tworzenie timera w powyższy sposób nie jest tak użyteczne, jak używanie w tym celu funkcji getTimer lub obiektu daty. Prędkości odtwarzania nie są stałe i często mamy do czynienia z „gubieniem” klatek, jeśli wzrasta w filmie ilość grafik lub animacji. Pamiętając, że płynność odtwarzania filmu jest uzależniona od wydajności procesora w komputerze użytkownika, staraj się używać raczej funkcji getTimer lub obiektu daty, jeśli pomiar czasu jest krytycznym elementem filmu.

0x08 graphic
Tworzenie skryptów
do wielokrotnego używania

Jeśli musisz wykonywać tę samą operację na danych wiele razy, możesz zaoszczędzić czas, tworząc własne funkcje. Funkcje, które poznałeś do tej pory, jak getTimer, updateAfterEvent i getProperty, są wbudowane we Flasha. Teraz jednak, za pomocą funkcji function, będziesz mógł przygotowywać swoje własne funkcje, wykonujące specyficzne działania. Funkcje są fragmentami wielokrotnie używanych wyrażeń ActionScript, które umieszcza się razem, miesza i łączy w razie potrzeby. Na przykład w jednym z wcześniejszych ćwiczeń w tym rozdziale, obliczałeś kąt tworzony przez przeciągany klip filmowy i punkt odniesienia innego klipu filmowego. Fragment skryptu, odpowiadający za obliczenie kąta, rezyduje w obrębie przeciąganego klipu filmowego. Gdybyś miał zamiar udostępnić użytkownikowi kilka klipów filmowych do wyboru, musiałbyś w każdym z nich dołączyć ten sam kod ActionScript. Jednak dzięki funkcjom wystarczy napisać odpowiedni skrypt tylko raz i umieścić go w głównej listwie czasowej. Wówczas każdy z przeciąganych klipów filmowych mógłby wywoływać przygotowaną funkcję zawsze, kiedy zajdzie taka potrzeba.

Poniższe ćwiczenie ilustruje sposób budowania funkcji tworzącej obiekt dźwiękowy, dołączającej dźwięk, odtwarzającej go i ustawiającej poziom głośności. Dzięki konsolidacji wszystkich tych metod, będziesz mógł odtworzyć dźwięk za jednym wywołaniem pojedynczej funkcji i powtarzać tę czynność dowolną ilość razy, z praktycznie dowolnego miejsca w twoim filmie.

W celu utworzenia i wywołania funkcji dźwiękowej:

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

  1. Wybierz Actions/function (Esc + fn).

0x08 graphic
0x01 graphic

Rys. 11.54. Ta funkcja nosi nazwę playSound (odtwórz dźwięk) i nie posiada żadnych parametrów

0x01 graphic

Rys. 11.55. Utworzono klon nowego obiektu, mySound (mój dźwięk)

0x01 graphic

Rys. 11.56. Trzy metody obiektu dźwiękowego zostaną wywołane wraz z wywołaniem funkcji playSound

0x01 graphic

Rys. 11.57. Wywołana zostaje funkcja playSound

  1. W polu Name wpisz nazwę swojej funkcji. Nie podawaj żadnych parametrów.

Wyrażenie funkcji pojawi się w oknie skryptu wraz z zestawem klamer. Wszystkie wyrażenia umieszczone pomiędzy tymi klamrami staną się częścią funkcji i będą wykonywane po wywołaniu funkcji (rys. 11.54).

  1. Wybierz Actions/set variable. W polu Variable wpisz nazwę nowego obiektu dźwiękowego. W polu Value wprowadź funkcję konstruktora new Sound. Zaznacz pole wyboru Expression obok pola Value (rys. 11.55).

  2. Wybierz Actions/with. W polu Object wpisz nazwę twojego nowego obiektu dźwiękowego.

  3. Korzystając z akcji evaluate, wprowadź metody attachSound, start i setVolume wraz z odpowiednimi parametrami (rys. 11.56).

Akcja with pozwala połączyć wszystkie trzy metody z nowym obiektem dźwiękowym. Przykładowe wyrażenia mogą wyglądać tak:

mySound.attachSound ("musicID");

mySound.start (0,2);

mySound.setVolume (50);

  1. Utwórz symbol przycisku i umieść jego klon na scenie. Zaznacz przycisk i otwórz paletę akcji.

  2. Wybierz Actions/evaluate. W polu Expression wpisz nazwę swojej funkcji wraz z nawiasami.

Funkcja zostanie wywołana po zwolnieniu utworzonego przycisku (rys. 11.57).

  1. 0x08 graphic
    Zaimportuj klip dźwiękowy i wprowadź jego identyfikator w polu Identifier okna dialogowego Symbol Linkage Properties (rys. 11.58).

  2. Przetestuj film.

Twoja funkcja została zdefiniowana w pierwszym ujęciu kluczowym na głównej listwie czasowej. Kiedy użytkownik kliknie przycisk znajdujący się na scenie, Flash wywoła funkcję tworzącą nowy obiekt dźwiękowy, przyłączy ten dźwięk i rozpocznie jego odtwarzanie z ustalonym poziomem głośności.

Wskazówki

  • Funkcje, tak jak zmienne i obiekty, rezydują w określonej listwie czasowej. Kiedy wywołujesz funkcję, musisz uważać na jej ścieżkę dostępu. Przykładowo, wywołując funkcję o nazwie mojaFunkcja, zdefiniowaną na głównej listwie czasowej, użyj takiej ścieżki dostępu:

_root.mojaFunkcja. lub

_level0.mojaFunkcja.

  • Możesz deklarować zmienne nazywane zmiennymi lokalnymi, które są osadzone w konkretnej funkcji. Zmienne lokalne przestają funkcjonować wraz z końcem funkcji, do której należą, i nie będą wchodzić w konflikty ze zmiennymi zadeklarowanymi w innych warstwach filmu. Zmienne lokalne deklaruje się na palecie akcji, wybierając Actions/var. Zmienne lokalne pomogą zachować twoim funkcjom niezależność w działaniu i przechowywaniu informacji. W ten sposób możesz łatwo kopiować i wklejać funkcje z jednego projektu do drugiego, nie martwiąc się przy tym o jakiekolwiek konflikty zmiennych o powtarzających się nazwach.

0x01 graphic

Rys. 11.58. Wprowadź nazwę importowanego dźwięku w polu Identifier

0x08 graphic
0x01 graphic

Rys. 11.59. Funkcja playSound posiada parametry sndLoop i sndVolume

0x01 graphic

Rys. 11.60. Parametry funkcji playSound modyfikują metody start oraz setVolume

0x01 graphic

Rys. 11.61. Wywołana zostaje funkcja playSound, otrzymująca parametry 2 i 50. Dźwięk o nazwie musicID zostanie więc odtworzony dwukrotnie i przy głośności 50

Parametry i wartości zwracane

Kiedy definiujesz funkcję, możesz nakazać jej wykonanie określonej czynności w oparciu o podane przez ciebie parametry lub też przejść do innej funkcji w momencie wywołania. Dzięki temu funkcje są bardziej elastyczne - ich działanie zależy właściwie od kontekstu. Na przykład, w uzupełnieniu do poprzedniego ćwiczenia, mógłbyś zdefiniować funkcję akceptującą jakiś parametr odnośnie poziomu głośności. Po wywołaniu funkcji wprowadzasz ponadto wartość dla tego parametru, a funkcja dołączy tę wartość do metody setVolume.

W celu przygotowania funkcji akceptującej podawanie parametrów:

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

  1. Zaznacz wyrażenie z funkcją. W polu Parameters wpisz sndLoop i sndVolume, oddzielając te parametry przecinkami. Będą to nazwy parametrów twojej funkcji (rys. 11.59).

  2. Zaznacz metodę start twojej funkcji. W miejscu parametru loop wpisz sndLoop. Zaznacz metodę setVolume i w miejsce parametru volume wpisz sndVolume (rys. 11.60).

  3. Zaznacz klon przycisku znajdującego się na scenie.

  4. Na palecie akcji zaznacz wywołanie twojej funkcji. W nawiasach wprowadź wartości dla parametrów sndLoop i sndVolume. Oddziel te wartości przecinkami (rys. 11.61).

  5. Przetestuj film.

Właściwe wartości parametrów przekazanych do funkcji są definiowane w momencie jej wywołania. Kolejny utworzony przycisk mógłby wywoływać funkcję z odmiennymi wartościami parametrów.

0x08 graphic
Gdy będziesz przekazywał parametry do funkcji, z pewnością będziesz też chciał zobaczyć wyniki określonych obliczeń. Jeśli więc funkcja ma pokazywać wynik swoich działa, użyj akcji return. Akcję tę definiuje się w wyrażeniu funkcji, a jej działanie polega na zwracaniu wartości dowolnego wyrażenia.

W celu przygotowania funkcji zwracającej wartości:

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

  1. Wybierz Actions/function.

  2. W polu Name podaj nazwę swojej funkcji. W polu Parameters wpisz a, b, c, d (rys. 11.62).

  3. Wybierz Actions/return . W polu Value wprowadź wyrażenie obliczające średnią wartości czterech parametrów.

Funkcja ta zwraca wartość wyrażenia (rys. 11.63).

  1. Wybierz narzędzie tekstowe (Text Tool) i utwórz blok dynamicznego tekstu. Nazwij go.

  2. Utwórz symbol przycisku i umieść jego klon na scenie. Zaznacz klon i na palecie akcji wybierz Actions/set variable.

  3. W polu Variable podaj nazwę twojego bloku dynamicznego tekstu. W polu Value wpisz nazwę funkcji i cztery wartości odpowiadające jej parametrom. Oddziel wartości za pomocą przecinków. Zaznacz pole wyboru Expression obok pola Value (rys. 11.64).

Te cztery wartości są przekazywane do funkcji i przetwarzane. Zwracana wartość jest podstawiana i wyświetlana w bloku dynamicznego tekstu.

  1. Przetestuj film.

0x01 graphic

Rys. 11.62. Funkcja myAverage (moja średnia) posiada parametry a, b, c i d

0x01 graphic

Rys. 11.63. Akcja return szacuje wyrażenie i udostępnia rezultat dla wyrażenia, które tę funkcję wywołało

0x01 graphic

Rys. 11.64. Wywołana została funkcja myAverage; zwracana wartość pojawia się w bloku dynamicznego tekstu

Wskazówka

  • Akcja function zastępuje akcję call używaną w poprzednich wersjach Flasha. Chociaż akcja call wciąż działa, to jednak w jej przypadku przekazywanie parametrów i zwracanie wartości nie odbywa się tak wygodnie, jak za pomocą akcji function.

0x08 graphic

Tworzenie własnych klas
za pomocą funkcji

Funkcji można używać nie tylko do wykonywania pewnych działań, jak to pokazano w poprzednich ćwiczeniach, ale także do definiowania właściwości i metod nowych klas. Dzięki temu możliwe staje się organizowanie i przekształcanie informacji zawartych w skrypcie w sposób pozwalający na łatwiejszy dostęp i przechowywanie danych oraz zaoszczędzenie na pamięci przez konsolidowanie skryptów. Za pomocą funkcji konstruktora (operator new oraz nazwa twojej funkcji) możesz utworzyć klon obiektu własnej klasy. Rozważ na przykład poniższą funkcję:

function Scores (player1, player2) {

this.player1Score = player1;

this.player2Score = player2;

}

Powyższa funkcja definiuje klasę o nazwie Scores (punkty), posiadającą właściwości player1Score (punkty gracza 1.) i player2Score (punkty gracza 2.). Klon obiektu z tej klasy tworzy się za pomocą funkcji konstruktora, jak poniżej:

MyScores = new Scores (4, 6);

To wyrażenie tworzy nowy obiekt o nazwie myScores (moje punkty) na podstawie klasy Scores. Wspomniany nowy obiekt posiada właściwości player1Score o wartości 4 oraz player2Score o wartości 6.

Gdybyś teraz chciał utworzyć metodę dla klasy Scores, pozwalającą zmieniać właściwości player1Score lub player2Score, musisz zdefiniować kolejną funkcję w następujący sposób:

function setScores (player, newScore) {

set ("this.player" + player + "Score", newScore);

}

0x08 graphic
Ta funkcja zmienia wartości player1Score lub player2Score w zależności od parametrów, jakie zostaną jej przekazane. Tymczasem, funkcja ta nie jest jeszcze skojarzona z klasą Scores, zdefiniowaną w pierwszej funkcji. Ty jednak chciałbyś, żeby funkcja należała do klasy Scores, dzięki czemu dowolny nowy obiekt z tej klasy będzie miał dostęp do tej funkcji, nazwanej setScores. Możesz skojarzyć funkcję setScores z klasą Scores, używając w tym celu jej właściwości prototype (prototyp). Właściwość ta oddziałuje na wszystkie nowe obiekty utworzone na podstawie klasy Scores, co oznacza, że obiekty te dziedziczą funkcję setScores. Właściwość protoype klasy Scores przypisuje się do funkcji setScores następującym wyrażeniem:

Scores.prototype.setScoresMethod = setScores;

W celu wywołania tej metody z poziomu twojego obiektu, musiałbyś posłużyć się następującym wyrażeniem:

mScores.setScoresMethod (2,3);

Funkcje umożliwiające tworzenie własnych klas, właściwości i metod to potężne i elastyczne narzędzie, pozwalające wykroczyć daleko poza standardowe klasy udostępniane przez Flasha.

W celu utworzenia własnej klasy:

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

  1. Wybierz Actions/function. W polu Name wpisz nazwę Scores. W polu Parameters podaj nazwy parametrów player1 i player2, oddzielone przecinkami (rys. 11.65).

  2. Wybierz Actions/set variable. Przypisz nazwy właściwości do parametrów.

Funkcja ta definiuje klasę o nazwie Scores, posiadającą dwie właściwości (rys. 11.66).

0x01 graphic

Rys. 11.65. Funkcja o nazwie Scores posiada parametry this.player1 i this.player2

0x01 graphic

Rys. 11.66. Klasa Scores zawiera dwie właściwości, nazwane player1Score i player2Score

0x08 graphic
0x01 graphic

Rys. 11.67. Funkcja o nazwie setScores posiada parametry player i newScore

0x01 graphic

Rys. 11.68. Funkcja o nazwie setScores przypisuje wartość newScore do właściwości this.player1Score, jeśli parametr player = 1, lub do this.player2Score, jeśli player = 2

0x01 graphic

Rys. 11.69. Właściwość prototype klasy Scores jest przypisana do funkcji o nazwie setScores. Wszystkie klony klasy Scores dziedziczą metodę setScores, którą można wywołać za pomocą wyrażenia: instanceName.setScoresMethod (player, newScore)

W celu zdefiniowania metody
nowo utworzonej klasy:

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

  1. Zaznacz klamrę zamykającą funkcji. Następna akcja, którą dodasz, pojawi się poza tą funkcją.

  2. Wybierz Actions/function. W polu Name wpisz setScores. W polu Parameters wprowadź nazwy parametrów player i newScore, oddzielone przecinkami (rys. 11.67).

  3. Wybierz Actions/set variable. Używając akcji set variable, przypisz odpowiednią nazwę właściwości (czyli dowiąż parametr player) do parametru newScore.

Ta funkcja przypisuje nową wartość do właściwości this.player1Score lub this.player2Score (rys. 11.68).

  1. Zaznacz klamrę zamykającą drugiej funkcji. Następna akcja, którą dodasz, pojawi się poza tą funkcją.

  2. Wybierz Actions/set variable. W polu Variable wpisz:

Scores.prototype.setScoresMethod

W polu Value wpisz setScores.

Zaznacz pole Expression.

Druga funkcja, setScores, została przyłączona do funkcji pierwszej, o nazwie Scores. Wszystkie nowe klony klasy Scores dziedziczą funkcję setScores, którą wywołuje się za pomocą metody setScoresMethod (rys. 11.69).

0x08 graphic
W celu przygotowania klonu obiektu
nowo utworzonej klasy:

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

  1. Zaznacz ostatnie wyrażenie widoczne w oknie skryptu.

  2. Wybierz Actions/set variable. W polu Variable wpisz nazwę twojego nowego obiektu. W polu Value wpisz new Scores(), a następnie dwie numeryczne wartości (w nawiasach), oddzielone przecinkami. Zaznacz pole wyboru Expression obok pola Value (rys. 11.70).

Na podstawie klasy Scores zostanie utworzony klon nowego obiektu, z właściwościami zdefiniowanymi za pomocą wartości przekazanych do funkcji. Ten nowy obiekt dziedziczy metodę setScoresMethod.

W celu wywołania metody
nowo utworzonej klasy:

  1. Kontynuując poprzednie ćwiczenie, przeciągnij na scenę kolejny klon symbolu przycisku. Zaznacz przycisk i otwórz paletę akcji.

  1. Wybierz Actions/evaluate. W polu Expression wpisz nazwę twojego obiektu, kropkę i wyrażenie setScoreMethod(). W nawiasach umieść wartości parametrów metody, oddzielając je przecinkami (rys. 11.71).

Kliknięcie utworzonego przycisku wywołuje metodę setScoreMethod i zmieniają się właściwości twojego obiektu.

Kompletny skrypt tworzący nową klasę i metodę pokazano na rys. 11.72.

0x01 graphic

Rys. 11.70. Klon obiektu firstGame (pierwsza gra) został utworzony na podstawie klasy Scores. Posiada on właściwości player1Score=4 oraz player2Score=6

0x01 graphic

Rys. 11.71. Po wciśnięciu tego przycisku obiekt firstGame wywołuje metodę setScoresMethod. Jego właściwość player2Score ma wartość 8

0x01 graphic

Rys. 11.72. Oto kompletny skrypt przypisany do pierwszego ujęcia listwy czasowej (u góry) w celu utworzenia nowej klasy, przyłączenia metody i przygotowania klonu nowego obiektu. Skrypt przypisany do przycisku (u dołu) wywołuje dla nowego obiektu metodę setScoresMethod

Rozdział 11.

382

381

Manipulowanie danymi

11

Manipulowanie danymi

Adjacent (przyprostokątna przyległa)

Opposite (przyprostokątna naprzeciwległa)

Hypotenuse (przeciwprostokątna)

Zmienna myRadians

Sinus kąta = przyprostokątna naprzeciwległa/przeciwprostokątna

Przeciągany klip filmowy

y

x

1

Odległość

Cosinus kąta = przyprostokątna przyległa/przeciwprostokątna

Tangens kąta = przyprostokątna naprzeciwległa/przyprostokątna przyległa

y

Oś x

Oś y

x

Blok dynamicznego tekstu myDegrees

Klip filmowy myreferencePoint

Przeciągany klip filmowy (this)

Kąt

Używanie funkcji sinus i cosinus

myDegrees = 0

a

b

c

Zmienna myDistance

Blok dynamicznego tekstu myDisplay

Klip filmowy

Blok dynamicznego tekstu myDisplay

Blok dynamicznego tekstu myDisplay

Blok dynamicznego tekstu myDisplay

Manipulowanie danymi

Obliczanie wartości kątowych

Obliczanie wartości kątowych

Obliczanie wartości kątowych

this_rotation = 0

Używanie funkcji sinus i cosinus

Obliczanie odległości

Obliczanie odległości

Generowanie liczb losowych

Porządkowanie informacji

Porządkowanie informacji

Porządkowanie informacji

Porządkowanie informacji

Wskazania daty i pomiaru czasu

Wskazania daty i pomiaru czasu

Wskazania daty i pomiaru czasu

Wskazania daty i pomiaru czasu

Tworzenie skryptów

Tworzenie skryptów

Tworzenie klas za pomocą funkcji

Tworzenie klas za pomocą funkcji

Wykonywanie obliczeń

Obliczanie wartości kątowych

Obliczanie wartości kątowych

Obliczanie wartości kątowych

Używanie funkcji sinus i cosinus

Używanie funkcji sinus i cosinus

Obliczanie odległości

Generowanie liczb losowych

Generowanie liczb losowych

Porządkowanie informacji

Porządkowanie informacji

Porządkowanie informacji

Wskazania daty i pomiaru czasu

Wskazania daty i pomiaru czasu

Wskazania daty i pomiaru czasu

Wskazania daty i pomiaru czasu

Tworzenie skryptów

Tworzenie skryptów

Tworzenie skryptów

Tworzenie klas za pomocą funkcji

Tworzenie klas za pomocą funkcji

Wykonywanie obliczeń

Obliczanie wartości kątowych



Wyszukiwarka

Podobne podstrony:
rB-04, Księgozbiór, Studia, Informatyka
r00-04, Księgozbiór, Studia, Informatyka
r04-04, Księgozbiór, Studia, Informatyka
Podz-04, Księgozbiór, Studia, Informatyka
rA-04, Księgozbiór, Studia, Informatyka
r05-04, Księgozbiór, Studia, Informatyka
r09-04, Księgozbiór, Studia, Informatyka
r08-04, Księgozbiór, Studia, Informatyka
r12-t, Księgozbiór, Studia, Informatyka
Metalurgia wyklad 04, Księgozbiór, Studia, Metalurgia
Informatyka-wyklady, Księgozbiór, Studia, Informatyka

więcej podobnych podstron