Tagi: flash, javascript, programowanie, html, css

Czytający ten artykuł powinni posiadać pewne minimalne doświadczenie w tworzeniu stron WWW, a w szczególności powinni  znać: środowisko Flash'a 8, podstawy JavaScriptu, podstawowe style CSS i posiadaćudostępnione miejsce na serwerze.
Andrzej Poliński 11.12.2008

Klasa ExternalInterface wprowadzona we Flash'u 8 zapewnia pełną komunikację pomiędzy kodem w Java Scripcie a filmem Flash'a. Posiada ona następujące zalety:

  • z poziomu kodu Java Script wywołana może być dowolna funkcja AS,
  • do Java Scriptu zwrócona jest wartość określona przez programistę.

Posiada ona dwie statyczne metody: addCallback() i call(). Pierwsza służy do rejestracji funkcji AS jako możliwej do wywołania z kodu JavaScript, a druga do wywołania funkcji tego języka z poziomu filmu Flash'a. Metoda statyczna oznacza, że nie tworzy się instancji klasy, a funkcje wywołuje się podając ExternalInterface.call() lub ExternalInterface.addCallBack().

Sterowania filmem Flash'a z poziomu kodu Java Script zwiększa funkcjonalność strony WWW. Przykładem niech będzie możliwość wyboru i zmiany animacji za pomocą HTML'owej listy opcji.

Pobierz przykładowe pliki.

Aby utworzyć taki przykład, pracę należy zacząć od stworzenia pliku z animacją Flash'a. Poniżej pokazany jest układ warstw na listwie czasowej i scena.

Na warstwie pola txt w pierwszej klatce filmu, umieszczony jest tylko statyczny tekst "Wybierz animację z listy". Może być tutaj dowolna animacja, która pojawiać się będzie zaraz po załadowaniu strony do przeglądarki. W dalszych klatkach scena jest pusta. Jej wielkość należy dopasować do wielkości ładowanych animacji.

Należy stworzyć trzy animacje Flash'a, które pojawiać się będą w klatkach nr. 2,3 i 4. Ich treść zależy wyłącznie od czytelnika. Można je dołączać albo poprzez funkcję loadClip(), albo załadować do biblioteki i pobierać funkcją  attachMovie(). Ja zastosowałem tutaj  i pokażę obie metody.

W pierwszej klatce filmu na warstwie as umieszczony jest kod Action Scriptu jak poniżej:

stop(); 
import flash.external.ExternalInterface;
tekst._visible = false;
function init() {
     ExternalInterface.addCallback("idzDoKlatki", null, idzDo);
     function idzDo(val:Number) {
         gotoAndStop(val);
         return "Zwrócony nr. klatki filmu Flash\'a: "+val;
     }
}
var kontener:MovieClip = this.createEmptyMovieClip
("kontener", this.getNextHighestDepth());
var mcLoader:MovieClipLoader = new MovieClipLoader();
var mcListener:Object = new Object();
mcListener.onLoadInit = function(mc:MovieClip) {
     mc._visible = false;
     tekst._visible = true;
     init();
};
mcLoader.addListener(mcListener);
mcLoader.loadClip("zegar.swf", kontener);
kontener._x = 150;
kontener._y = 40;

Funkcja stop() zatrzymuje głowicę w tej klatce. Funkcja mcLoader.loadClip() ładuje zewnętrzny plik z animacją zegara. Pierwsza klatka filmu ma etykietę tekst i staje się widoczna po jego załadowaniu.

Dopiero wtedy, po wywołaniu funkcji init(), możliwa jest komunikacja pomiędzy JavaScriptem a Flashem. Przesłanie danych z JavaScriptu do Flash'a w całości obsługuje funkcja ExternalInterface.addCallback(). Posiada ona trzy parametry:

  • nazwę funkcji JavaScript, wykonanie której uruchomi funkcję Flash'a podaną jako trzeci parametr. Nazwa jest typu String. W ten sposób funkcja Flash'a jest "zarejestrowana" jako możliwa do wywołania z kodu Java Script,
  • drugi parametr to nazwa obiektu Flash'a. Jeżeli wywołujemy np.funkcję własnej klasy Flash'a np. mySound.setVolume(), to jako drugi parametr należy podać nazwę instancji obiektu czyli mySound. Jeżeli wywoływana jest funkcja napisana przez programistę, to drugi parametr ma wartość null,
  • trzeci parametr to referencja do funkcji lub metody, która zostanie wywołana w momencie wykonania funkcji Java Script czyli np. mySound.setVolume.

Komentarze (0)