Części składowe języka HTML
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. |
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. |
|
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. |
|
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 Tangens kąta = przyprostokątna naprzeciwległa/ przyprostokątna przyległa lub Tangens kąta = y/x lub Kąt = tangens łuku (y/x) |
Rys. 11.1. Kąt (theta) trójkąta prostokątnego jest definiowany przez sinus, cosinus, tangens i długość trzech boków
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)
|
|
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
|
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.
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.
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). |
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
Rys. 11.4. Metoda Math.atan2 w polu Value wymaga podania argumentów y oraz x
Rys. 11.5. Metoda Math.atan2 oblicza kąt, jaki klip filmowy tworzy z punktem wyjściowym (lewy górny róg sceny)
Rys. 11.6. Blok dynamicznego tekstu o nazwie myDegrees wyświetla wartość kąta w stopniach
|
Rys. 11.7. Klip filmowy tworzy kąt o wartości ok. 65 stopni poniżej osi x
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
|
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
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).
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.
|
W celu zaokrąglenia
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
|
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
|
Rys. 11.10. Przypisz zmiennej pressing wartość true dla wciśniętego przycisku
Rys. 11.11. Przypisz zmiennej pressing wartość false dla przycisku zwolnionego, także poza jego obszarem aktywnym
Rys. 11.12. Zmienna myRadians przechowuje obliczony kąt pomiędzy wskaźnikiem myszy i klipem filmowym
|
Klon przycisku odnotowuje zdarzenia zarówno jego wciśnięcia, jak i zwolnienia.
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). |
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).
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.
|
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
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
|
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
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 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); |
W celu
Key.isDown (Key.LEFT); Flash sprawdzi, czy wciśnięto klawisz strzałki w lewo.
Key.isDown (Key.RIGHT); Flash sprawdzi, czy wciśnięto klawisz strzałki w prawo.
Flash doda 10 do bieżącej wartości zmiennej myRotation, jeśli wciśnięty zostanie klawisz strzałki w prawo (rys. 11.18).
|
Rys. 11.17. Zmienna myRotation zwiększa swoją wartość po naciśnięciu klawisza strzałki w lewo
Rys. 11.18. Zmienna myRotation zwiększa swoją wartość po naciśnięciu klawisza strzałki w prawo
|
Rys. 11.19. Cosinus kąta obrotu klipu filmowego jest po obliczeniu przypisywany do zmiennej ychange
Rys. 11.20. Sinus kąta obrotu klipu filmowego jest po obliczeniu przypisywany do zmiennej xchange
|
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.
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.
|
this._y - ychange; Zaznacz obydwa pola wyboru Expression.
this._x + xchange; Zaznacz obydwa pola wyboru Expression.
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).
|
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
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
|
Rys. 11.23. Ten trójkąt prostokątny ma boki oznaczone jako a, b i c
|
Obliczanie odległości 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)));
|
_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).
_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).
W polu Value pojawi się metoda Math.sqrt z podświetlonym argumentem.
|
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
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
|
Rys. 11.26. Odległość między dwoma punktami jest obliczana na podstawie wartości zmiennych xDistance i yDistance
Rys. 11.27. Blok dynamicznego tekstu myDisplay pokazuje wartość całkowitą zmiennej myDistance
|
Flash obliczy kwadrat wartości zmiennej xDistance i doda ją do kwadratu wartości zmiennej yDistance. Następnie obliczy kwadrat wartości tej sumy.
Kiedy wskaźnik przemieszcza się po obszarze klipu filmowego, Flash oblicza odległość między nimi w pikselach.
|
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:
W polu Variable pojawi się metoda Math.random (rys. 11.28).
|
Rys. 11.28. Liczba losowa z zakresu 0 do 1 jest przypisywana do zmiennej myRandomNumber (moja liczba losowa)
|
Rys. 11.29. Zmienna myRandomX jest przypisywana do liczby z zakresu 1 do 300
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
Math.random () * 299 + 1; Zaznacz pole Expression. Flash wygeneruje liczbę losową z zakresu 1 do 300 (rys. 11.29).
Współrzędna położenia x klipu filmowego zostanie przypisana do pierwszej wygenerowanej losowo liczby. |
Współrzędna położenia y klipu filmowego zostanie przypisana do pierwszej wygenerowanej losowo liczby (rys. 11.31).
Wskazówka
|
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)
|
Rys. 11.32. Tablica przypomina dwukolumnową tabelę, przy czym jedna z kolumn zawiera indeksy, a drugą odpowiadające im wartości
|
Porządkowanie informacji 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.
|
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. |
|
Rys. 11.33. Utworzono klon nowego obiektu o nazwie myArray (moja tablica)
Rys. 11.34. Ta tablica zawiera trzy wpisy
|
W celu utworzenia tablicy:
W polu Value pojawi się funkcja konstruktora new Array. Flash utworzy klon nowej tablicy (rys. 11.33).
Wskazówka
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.
|
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
|
Rys. 11.35. Ta tablica, nazwana myScores, ma cztery wpisy
|
Rys. 11.36. Ta akcja for będzie wykonana tyle razy, ile jest wpisów w tablicy myScore
Rys. 11.37. Zmienna mySum dodaje wartość każdego z wpisów w tablicy
Rys. 11.38. Poza pętlą for, zmienna myAverage oblicza średnią wartość wpisów w tablicy
|
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).
Przy każdym indeksie tablicy myScore Flash dodaje wartość w tym indeksie do zmiennej mySum. Kiedy wartość zmiennej i 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).
Następne wyrażenie pojawi się za klamrą zamykającą wyrażenie for.
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. |
|
|
|
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 |
|
|
||
|
Wskazówki
mojaTablica = new Array (2, 4, 6, 8); mojeUsuniecie = mojaTablica.pop(); Wartość mojeUsuniecie to 8, a wartością tablicy mojaTablica jest teraz 2, 4, 6.
|
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:
Twój blok dynamicznego tekstu zostanie umieszczony w symbolu klipu filmowego, którego klon pozostanie na scenie.
|
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. |
|
|
|
|
|
Rys. 11.39. Argumenty funkcji konstruktora new Date podaje się opcjonalnie
Rys. 11.40. Bieżące wskazania godzinowe są przypisywane do zmiennej currentHour
Rys. 11.41. Wskazania godzinowe, minutowe i sekundowe są przypisane do różnych zmiennych
|
W polu Value pojawi się funkcja konstruktora new Date z podświetlonymi argumentami (rys. 11.39).
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).
currentHour > 12
|
CurrentHour-12; (rys. 11.42).
CurrentHour == 0
Blok dynamicznego tekstu będzie wyświetlał bieżący czas (godzinę, minutę i sekundę) w formacie 12-godzinnym. Wskazówka
|
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
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
Rys. 11.44. Blok dynamicznego tekstu (u góry) wyświetla powiązane wartości
|
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:
|
Twój blok dynamicznego tekstu zostanie umieszczony w symbolu klipu filmowego, którego klon pozostanie na scenie.
|
Rys. 11.46. Tablica daysofMonth (dni miesiąca) zawiera łańcuchy znakowe przedstawiające nazwy miesięcy
Rys. 11.47. Bieżące wskazania roku, miesiąca, daty i dnia tygodnia są przypisywane do nowych zmiennych
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
|
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)
|
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:
|
W polu Value pojawi się funkcja getTimer. Zaznacz pole Expression (rys. 11.50).
W polu Value pojawi się funkcja getTimer. Zaznacz pole Expression (rys. 11.51).
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).
|
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)
Rys. 11.51. Funkcja getTimer nieustannie odczytuje czas mijający od uruchomienia filmu Flasha i podstawia go do zmiennej currentTime (aktualny czas)
Rys. 11.52. Zmienna elapsedTime reprezentuje ilość czasu, który upłynął pomiędzy dwoma punktami w czasie, zapisanymi w zmiennych startTime i currentTime
|
Rys. 11.53. Wartość przechowywana w zmiennej elapsedTime jest wyświetlana w bloku tekstowym myDisplay (u góry)
|
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.
|
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:
|
|
Rys. 11.54. Ta funkcja nosi nazwę playSound (odtwórz dźwięk) i nie posiada żadnych parametrów
Rys. 11.55. Utworzono klon nowego obiektu, mySound (mój dźwięk)
Rys. 11.56. Trzy metody obiektu dźwiękowego zostaną wywołane wraz z wywołaniem funkcji playSound
Rys. 11.57. Wywołana zostaje funkcja playSound |
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).
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);
Funkcja zostanie wywołana po zwolnieniu utworzonego przycisku (rys. 11.57).
|
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
_root.mojaFunkcja. lub _level0.mojaFunkcja.
|
Rys. 11.58. Wprowadź nazwę importowanego dźwięku w polu Identifier
|
Rys. 11.59. Funkcja playSound posiada parametry sndLoop i sndVolume
Rys. 11.60. Parametry funkcji playSound modyfikują metody start oraz setVolume
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:
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. |
W celu przygotowania funkcji zwracającej wartości:
Funkcja ta zwraca wartość wyrażenia (rys. 11.63).
Te cztery wartości są przekazywane do funkcji i przetwarzane. Zwracana wartość jest podstawiana i wyświetlana w bloku dynamicznego tekstu.
|
Rys. 11.62. Funkcja myAverage (moja średnia) posiada parametry a, b, c i d
Rys. 11.63. Akcja return szacuje wyrażenie i udostępnia rezultat dla wyrażenia, które tę funkcję wywołało
Rys. 11.64. Wywołana została funkcja myAverage; zwracana wartość pojawia się w bloku dynamicznego tekstu Wskazówka
|
|
Tworzenie własnych klas 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); }
|
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:
Funkcja ta definiuje klasę o nazwie Scores, posiadającą dwie właściwości (rys. 11.66).
|
Rys. 11.65. Funkcja o nazwie Scores posiada parametry this.player1 i this.player2
Rys. 11.66. Klasa Scores zawiera dwie właściwości, nazwane player1Score i player2Score
|
Rys. 11.67. Funkcja o nazwie setScores posiada parametry player i newScore
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
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
Ta funkcja przypisuje nową wartość do właściwości this.player1Score lub this.player2Score (rys. 11.68).
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).
|
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
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.
|
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
Rys. 11.71. Po wciśnięciu tego przycisku obiekt firstGame wywołuje metodę setScoresMethod. Jego właściwość player2Score ma wartość 8
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