Systemy multimedialne
Integracja środowiska programowania
ActionScript
Główna listwa czasowa
Główna listwa czasowa jest podstawą wszystkich
animacji we Flashu
Listwa czasowa Flasha jest wbudowana, działa zgodnie z
predefiniowaną prędkością odtwarzania
Wszystkie klipy filmowe osadzone w głównym filmie
dziedziczą tę prędkość odtwarzania
Główna listwa czasowa
Kod ActionScript można dołączyć do ujęcia
umieszczonego na głównej listwie czasowej, do ujęcia w
klipie filmowym lub do dowolnego składnika filmu (np.
przycisku lub klipu filmowego), który znajduje się na
głównej listwie czasowej lub jest osadzony wewnątrz
innego klipu filmowego.
Struktura ActionScript wygląda następująco
Struktura kodu ActionScript
Każde ujęcie znajdujące się na głównej listwie czasowej
jest odtwarzane z określona prędkością, bez względu na
zawartość ilości kodu mieszczącego się w tym ujęciu.
Jeśli realizacja kodu zabiera więcej czasu niż domyślnie
przypisany dla danego ujęcia przez prędkość
odtwarzania , wówczas animacja zablokuje listwę
czasową.
Jeżeli animacja jest za bardzo opóźniona zostanie
wyświetlone okno z propozycją wyłączenia skryptu.
Struktura kodu ActionScript
kierunek listwy czasowej
ki
er
unek
p
ro
gr
am
u
czas potrzebny do
przetworzenia akcji
w każdym rysunku
Unikanie blokowania listwy czasowej
Należy obliczyć liczbę milisekund potrzebnych do
odtworzenia każdego ujęcia.
Zakładając że prędkość odtwarzania wynosi 12 klatek na
sekundę można policzyć że odtworzenie każdego ujęcia
zajmie 1000/12=83,33ms
Jeżeli realizacja kodu przekroczy ten czas płynne
odtwarzanie zostanie zagrożone
Główne problemy związane z blokowaniem listwy
czasowej we Flashu spowodowane są osadzonymi
pętlami i funkcjami rekurencyjnymi.
Pętle osadzone
Pętla osadzona:
for (a=1; a<100; a++) {
for (b=1; b<100; b++) {
for (c=1; c<100; c++) {
}
}
}
W powyższym fragmencie osadzono 3 pętle. Każda
iteracja pierwszej pętli spowoduje 100 iteracji drugiej, a
każda iteracja drugiej pętli spowoduje 100 iteracji pętli
trzeciej. W rezultacie otrzymamy 100x100x100 instrukcji.
Funkcje rekurencyjne
Funkcja rekurencyjna jest funkcją wywołującą samą
siebie.
Przykładem takiej funkcji jest znalezienie danej liczby z
zakresu np. 0-100. Funkcja podzieli zakres na pół i
sprawdzi w której połowie znajduje się poszukiwana
liczba. Następnie ponownie sama się wywoła aby
podzielić nowy zakres na pół. Będzie tak działać do
momentu w którym znajdzie właściwą liczbę.
Unikanie problemu blokowania
Aby uniknąć tego problemu należy unikać tego typu
instrukcji
Aby efektywnie kontrolować pętle należy pamiętać iż do
wykorzystania mamy trzy wymiary czasowe.
Zamiast tworzyć w jednym ujęciu pętle obejmującą cały
kod, można wykonać ją w obrębie jednej sekcji listwy
czasowej
Praca z kilkoma listwami czasowymi
Każdy klip posiada własną listwę czasową po której może
się poruszać bez wywierania wpływu na listwy czasowe
innych klipów filmowych
Prędkość odtwarzania klipów filmowych musi być
zsynchronizowana z głównym filmem.
Kolejność ujęć w klipach filmowych jest niezależna, lecz
prędkość odtwarzania nie jest, gdyż jest pobierana z
filmu umieszczonego na górnym poziomie bez względu
na to czy zostały zdefiniowany jako symbole w bibliotece
tego filmu czy też zostały pobrane z zewnętrznego
źródła.
Praca z osadzonymi klipami filmowymi
Główna listwa czasowa może zawierać kilka klipów
filmowych, z których każdy może również zawierać
kolejne kipy filmowe.
Najtrudniejszym do rozwiązania problemem podczas
pracy z osadzonymi klipami filmowymi jest poznanie
zasięgu zmiennych i funkcji.
Po zdeklarowaniu zmiennej w obrębie danej listwy
czasowej listwa ta staje się zasięgiem zmiennej. Dostęp
do zmiennej za pomocą podania samej nazwy można
uzyskać tylko wtedy, gdy wywołana jest z listwy
czasowej na której się znajduje
Praca z osadzonymi klipami filmowymi
Ścieżkę listwy czasowej można zmienić, wykorzystując
następującą składnię:
ścieżka_listwyczasowej.nazwa_zmiennej
Ta sama zasada dotyczy własności, gdyż są one
systemowo zdefiniowanymi zmiennymi. Aby uzyskać
dostęp do własności zmiennej korzystamy z następującej
składni:
zmienna._własność
Praca z osadzonymi klipami filmowymi
Przejście o poziom wyżej w hierarchii listew czasowych
osadzonego klipu filmowego opiera się o pseudoobiekt
_parent
, który reprezentuje listwę czasową położoną o
poziom wyżej. Aby uzyskać dostęp do zmiennej należy
zastosować następującą składnię:
zmienna._parent.własność
Obiekty
_root
oraz
_level0
przenoszą bezpośrednio na
listwę czasową najwyższego poziomu.
Pomiędzy obiektami
_root
oraz
_level0
istnieje
niewielka różnica. Pierwszy przenosi nas do najwyższego
poziomu danego filmu, a drugi na listwę czasową o
nazwie
level0 ,
która nie musi być jednocześnie główną
listwą czasową filmu
Rysunki, klipy filmowe i przyciski
Symbol graficzny jest odtwarzany przez ujęcia w
symbolu. Symbolu graficznego nie można obsługiwać
zewnętrznym kodem, również żaden kod symbolu w
symbolu graficznym nie będzie miał wpływu na symbole
zewnetrzne.
Listwa czasowa symbolu graficznego jest całkowicie
zsynchronizowana z listwą czasową w której jest
zawarta.
Rysunki, klipy filmowe i przyciski
Symbol klipu filmowego dysponuje największymi
możliwościami . Symbol klipu filmowego zawiera pewną
liczbę ujęć które są odtwarzane w standardowy sposób.
Listwa czasowa klipu filmowego jest niezależna od listwy
czasowej zawierającej dany klip filmowy.
Każdej kopii klipu filmowego można nadać nazwę i
obsługiwać ją w obrębie kodu.
Kod umieszczony wewnątrz klipu filmowego sam potrafi
obsługiwać inne obiekty i zmienne
Rysunki, klipy filmowe i przyciski
Symbol przycisku posiada cztery ujęcia reprezentujące
cztery stany :
Up, Over, Dovn, Hit
.
Przycisk odtwarza każde z ujęć w odpowiedzi na pewne
zdarzenie.
W przyciskach można osadzać symbole graficzne i klipy
filmowe.
Wykonywanie kodu ActionScript
Kolejność wykonywania kodu jest uzależniona od wielu
czynników. Struktura budowy klipu wpływa na kolejność
uruchamiania instrukcji w kodzie ActionScript
W obrębie pojedynczego ujęcia
Instrukcje wykonywane są w kolejności ich
występowania; kod w obrębie danego ujęcia tworzy
oddzielną jednostkę (pomiędzy początkiem i końcem
odtwarzania ujęcia nie można wykonywać żadnego
innego kodu)
W obrębie pojedynczej warstwy
Ujęcia realizowane są w kolejności jedno po drugim;
Funkcje wykonywane są po ich wywołaniu; funkcje
można wywoływać wyłącznie po ich zdeklarowaniu
Procesy obsługi zdarzeń (
on
lub
OnClipEvent
)
wykonywane są wówczas, gdy zachodzi dane zdarzenie;
można je wykonywać tylko po ich zdeklarowaniu
W obrębie pojedynczego klipu filmowego
Kod w ujęciach odtwarzanych w tym samym czasie
wykonywany jest zgodnie z kolejnością warstw,
rozpoczynając od warstwy górnej
Kolejność ujęć jest sekwencyjna
W obrębie filmu
W przypadku jednoczesnych ujęć kod w klipie filmowym
wykonywany jest po zrealizowaniu kodu w klipie
macierzystym
Najłatwiejszym sposobem sprawdzenia kolejności
wykonywania poszczególnych operacji jest wykorzystanie
funkcji
trace
zmienna;
trace(zmienna);
Tworzenie efektów wizualnych z
zastosowaniem ActionScript
Tablice
Tablice służą do przechowywania wielu obiektów i wielu
zmiennych. Tablica zbliżona jest strukturą do listy, gdyż
tak samo jako ona posiada ponumerowane wejścia, w
których przechowywane są dane. W języku ActionScript
tablice definiuje się za pomocą poniższej instrukcji:
myArray= new Array (liczbawartosci)
parametr
liczbawartosci
określa ilość wartości jaka będzie
przechowywana w tablicy.
Tablice
Następnie należy przypisać do tablicy wartości lub
obiekty stosując nazwę tablicy z następującym po niej
numerem okienka do którego chcemy uzyskać
dostęp.Poniższa instrukcja stworzy tablicę i w pierwsze
trzy komórki wstawi wartości:
myArray=newArray ();
myArray[0] = 100;
myArray[1] = 256;
myArray[2] = 34;
W przypadku definiowania funkcji w ten sposób nie
trzeba określać jej rozmiaru.
Tablice
Innym sposobem definiowania tablicy jest skorzystanie z
poniższego kodu:
myArray=new Array ();
myArray= [100,256,34];
Uzyskany efekt będzie identyczny jak w przypadku
zastosowania poprzedniej funkcji. Liczby umieszczone w
nawiasie kwadratowym zostaną automatycznie
przypisane do numerów indeksowych tablicy w takiej
samej kolejności jak w poprzednim fragmencie.
Najlepszym sposobem na edytowanie i odczytywanie
komórek umieszczonych w liście jest zastosowanie pętli.
Przechwytywanie klawisza
Flash zawiera kilka predefinowanych obiektów, za pomocą których
uzyskuje się dostęp do obiektów zaawansowanych (np. obiekty
tablicy
Array
) .
Jednym z takich obiektów jest obiekt klawisza
Key
dzięki któremu dysponujemy techniką potrzebną do wykrywania i
wyróżniania wciśniętych przez użytkownika klawiszy
Aby efektywnie wykorzystać obiekt
Key
należy opracować sposób
wykrywania wciśnięcia klawisza.
We Flashu istnieją procedury obsługujące zdarzenia:
press, relase
,
keyUp , keyDown
Zastosowanie tych wyrazów kluczowych jako parametrów dla
procedury
OnClipEvent
może aktywować zdefiniowany przez nas
kod.
Przechwytywanie klawisza
Obiekt
Key
posiada dwie metody rozpoznawania wciśnięcia
klawisza.
Pierwsza z metod używa się przy pomocy funkcji
Key.getCode.
Drugą metodą jest przechwytywanie kodu ASCII za pomocą
funkcji
Key.getAscii
Obie metody dają podobne efekty ale ich działanie jest różne.
Funkcja
Key.getCode
wydobywa kod który jest przypisany do
wewnętrznej zmiennej po wciśnięciu klawisza
Funkcja
Key.getAscii
pobiera kod klawisza jaki został wciśnięty
i określa dokładnie jaki znak został użyty