Z pliku Flash SWF można wczytać jako zasoby inne zewnętrzne pliki SWF. Istnieje kilka przyczyn wczytywania zewnętrznych plików SWF:

  • Ponieważ projekt może zostać podzielony na wiele filmów, poszczególne pliki SWF będą mniejsze. Z kolei mniejsze pliki wczytują się szybciej i wydajniej zarządzają pamięcią.  
  • Pozwala to wczytać tylko zawartość potrzebną stosownie do tego, co użytkownik realizuje w filmie.
  • Istnieje możliwość kolejnego odtworzenia plików wielu SWF bez wczytywania kolejnych stron HTML. Nie będzie zachodzić wstrzymywanie ani odświeżanie wynikające z przeładowywania strony.
  • Daje to z kolei organizacji większą elastyczność obsługi zasobów projektowych.
  • Pozwala to na zbudowanie złożonego interfejsu użytkownika, który nie będzie oparty o jeden plik SWF. W celu utworzenia interfejsu można połączyć wiele plików SWF. Połączenie plików SWF upraszcza edycję, ponieważ jeden mniejszy plik SWF można poprawić bez oddziaływania na inne obszary interfejsu.
  • Nad jednym projektem może pracować wielu autorów, działając na oddzielnych plikach FLA.

Umieszczanie zawartości w oddzielnym pliku SWF jest podobne do umieszczania treści w oddzielnym symbolu klipu filmowego. Różnica polega na tym, że zawartość istnieje poza głównym plikiem SWF. Możesz także ładować pliki graficzne, takie jak JPG, PNG i GIF.

Aby wczytać zewnętrzny plik SWF z innego pliku SWF, użyj jednej z następujących procedur:

  • Klasa Loader języka ActionScript 3.0
  • Klasa loadMovie języka ActionScript 2.0
  • Klasa MovieClipLoader języka ActionScript 2.0

Używanie klasy Loader języka ActionScript 3.0

Klasa Loader języka ActionScript 3.0 to jest podklasą obiektu DisplayObject służącą do ładowania i wyświetlania zawartości zewnętrznej. Aby wczytać plik SWF, użyj metody load tej klasy.Metoda load ma jeden wymagany parametr — wystąpienie URLRequest zawierające adres URL wczytywanej zawartości.

Następujący przykładowy kod tworzy instancję Loader i wczytuje zewnętrzny plik SWF o nazwie myExternalMovie.swf.

var myLoader:Loader = new Loader();                     // create a new instance of the Loader class
var url:URLRequest = new URLRequest("ExternalSWF.swf"); // in this case both SWFs are in the same folder 
myLoader.load(url);                                     // load the SWF file
addChild(myLoader);                                     // add that instance to the display list, adding it to the Stage at 0,0

// (optional)
myLoader.x = 10;                                        // move the loaded SWF 10 pixels to the right (from the left edge)   
myLoader.y = 175;                                       // move the loaded SWF 175 pixels down from the top

// (optional) load a second external SWF file
var my2ndLoader:Loader = new Loader();
var url2:URLRequest = new URLRequest("ExternalSWF2.swf");
my2ndLoader.load(url2);
addChild(my2ndLoader);                                  // optionally, you could put the 2nd SWF beneath 
                                                        // the 1st by using addChildAt(my2ndLoader, 1);
                                                        // displacing the 1st SWF from position 1 to 2 in the display list

// (optional) scaling of the 2nd SWF file
my2ndLoader.scaleX = 2;                                 // scale the SWF horizontally by 200%
my2ndLoader.scaleY = 2;                                 // scale the SWF vertically by 200%

Adres URL ładowanego pliku SWF może być podany jako względny lub bezwzględny. Aby uzyskać więcej informacji o tym, jak program Flash Player obsługuje adresy URL, przejdź do poniższej sekcji Ścieżki względne. Więcej informacji na temat klasy Loader zawiera sekcja Loader w dokumencie Platform ActionScript Language Reference.

Odwołania do elementu root, gdy zachodzą, zawsze odzwierciedlają najwyżej wyświetlany obiekt strukturze drzewa listy wyświetlania, która reprezentuje plik SWF. (W przypadku obrazów element root odwołuje się do obiektu Bitmap).

Uwaga: w języku ActionScript 3.0 nie istnieje odpowiednik właściwości _lockroot lub _level z języka ActionScript 2.0. Zapoznaj się z sekcją Podstawy programowania ekranuw Podręczniku programisty ActionScript 3.0.

Używanie polecenia loadMovie języka ActionScript 2.0

Polecenie loadMovie wczytuje zewnętrzny plik SWF lub obraz do elementu MovieClip albo innego poziomu filmu nadrzędnego w języku ActionScript 2.0.

Polecenie loadMovie ma dwie postaci:

  • Metoda MovieClip.loadMovie: Metoda MovieClip służy do wczytywania zewnętrznej zawartości do określonego wystąpienia klipu filmowego.
  • Globalna funkcja loadMovie:Globalna funkcja loadMovie pozwala na wczytywanie zawartości do filmów i podziałów. Wersja globalna ma dwa warianty: loadMovie i loadMovieNum. Pierwszy wariant wczytuje zawartość do filmów lub poziomów, a drugi (loadMovieNum) — tylko do poziomów.

MovieClip.loadMovie

Podczas wczytywania zawartości zewnętrznej do wystąpień klipów filmowych , firma Adobe zaleca wybranie metody MovieClip funkcji loadMovie. Ta wersja jest wywoływana bezpośrednio z klipu filmowego, do którego ma być wczytana zawartość, i przekazuje jej się adres URL zawartości.

myMovieClipInstance.loadMovie("myExternalMovie.swf");  // here only the filename is given, indicating the SWF file 
                                                       // is in the same folder as the parent SWF.

Może to być ścieżka względna lub bezwzględna. Aby uzyskać więcej informacji o tym, jak program Flash Player obsługuje adresy URL, przejdź do poniższej sekcji Ścieżki względne.

Po wczytaniu zawartość jest wyświetlana w klipie filmowym kontenera. Zachowywane są lokalizacja oraz inne podstawowe właściwości klipu filmowego kontenera. Jednak wszystkie właściwości niestandardowe lub funkcje zdefiniowane w obrębie klipu filmowego kontenera przestają być dostępne. Nowa zawartość zastępuje całość poprzedniej zawartości (w tym kod i procedury obsługi zdarzeń, takie jak onRelease). Dlatego też wszystkie próby użycia obsługi procedury obsługi zdarzeń onLoad dla klipu filmowego nie będą działać. W takim przypadku użyj zamiast tego klasy MovieClipLoader (patrz niżej). Więcej informacji o klasie MovieClip.loadMovie podano w sekcji MovieClip.loadMovie w dokumencie ActionScript 2.0 Language Reference.

Globalne polecenia loadMovie oraz loadMovieNum

Polecenie loadMovie istnieje także jako funkcja globalna. Ma ona dwa wymagane parametry — adres URL zawartości zewnętrznej oraz parametr target wskazujący na miejsce docelowe ładowania zawartości. Parametr może być ciągiem lub odwołaniem. Poniższe wiersze odpowiadają wczytaniu pliku myExternalMovie.swf do klipu filmowego o nazwie myContainer:

loadMovie("myExternalMovie.swf", myContainer);    // the target myContainer is an object reference
loadMovie("myExternalMovie.swf", "myContainer");  // the target "myContainer" is a string

Funkcja loadMovie może także wczytywać zawartość do różnych poziomów odtwarzacza Flash. Poziomy w odtwarzaczu Flash są jak warstwy odtwarzacza. W jednej instancji odtwarzacza Flash Player może być odtwarzanych wiele filmów bez wzajemnego zagnieżdżania. Każdy poziom reprezentuje unikalny element główny, w którym filmy mogą być odtwarzane niezależnie od filmów na innych poziomach (nie jest także konieczne używanie opcji _lockroot).

Poziomy można wywoływać w języku ActionScript za pomocą atrybutu _level z dopisaną liczbą oddającą numer poziomu. Pierwszy plik wczytywany do odtwarzacza Flash Player przyjmuje wartość _level0. Do tego poziomu można dodawać dodatkowe poziomy. Przedstawione poniżej wywołanie metody loadMovie wczytuje plik myExternalMovie.swf do poziomu 1, nad film, który jest aktualnie odtwarzany.

loadMovie("myExternalMovie.swf", "_level1");

Wersją globalnej funkcji loadMovie jest funkcja loadMovieNum. Jest to metoda podobna do funkcji loadMovie, z tą różnicą, że celuje tylko w poziomy i odzwierciedla je po liczbie, a nie po nazwie. Aby na przykład wczytać zewnętrzny plik SWF na poziom 1 (_level1), użyj następującego polecenia:

loadMovieNum("myExternalMovie.swf", 1);

Do wczytywania zawartości do poziomów firma Adobe zaleca używanie fukcji loadMovieNum, a nie — loadMovie. Więcej informacji zawiera sekcja dotycząca globalnego polecenia loadMovie w podręczniku Dokumentacja języka ActionScript 2.0.

Aby zapobiegać konfliktom w elemencie głównym, użyj polecenia _lockroot.

Podczas ładowania zewnętrznego filmu do innego filmu referencja _root załadowanego klipu filmowego zmienia się z głównej osi czasu na oś czasu filmu, który go załadował. Innymi słowy, element _root zawsze odwołuje się do najwyższej osi czasu w hierarchii. Jeśli nie chcesz, aby element _root odwoływał się do najwyższej osi czasu, ustaw właściwość _lockroot w głównej linii czasu wczytanego klipu filmowego na wartość true. Właściwość ta sprawia, że wszystkie elementy podrzędne osi czasu wywołujące element _root będą wywoływały tę oś czasu.

this._lockroot = true;     // add this code in the main timeline of the SWF file that will be loaded into another SWF

Uwaga: właściwość _lockroot jest dostępna tylko w przypadku publikacji do programu Flash Player 7 lub nowszego.

Używanie klasa MovieClipLoader języka ActionScript 2.0

Klasa MovieClipLoader w języku ActionScript 2.0 służy do ułatwienia procesu ładowania zawartości zewnętrznej do wystąpień MovieClip. Jak już wspomniano wcześniej, zmienne i funkcje zdefiniowane w klipach filmowych są usuwane, gdy do tych klipów filmowych ładowana jest nowa zawartość. Wywołania takie jak onLoad nie są możliwe. Jednak klasa MovieClipLoader obchodzi to ograniczenie, działając jako zastępca takich wydarzeń. Do zarządzania wczytywania zawartością do innych klipów filmowych można utworzyć oddzielne wystąpienia klasy MovieClipLoader. Dlatego też nie zachodzi czyszczenie zmiennych ani funkcji z danego klipu filmowego.

Przed wczytaniem zawartości do klipu filmowego za pośrednictwem klasy MovieClipLoader należy najpierw utworzyć nową instancję tej klasy. Następnie użyj funkcji loadClip, aby wczytać zawartość do docelowego klipu filmowego. W poniższym przykładzie nowa zawartość jest ładowana do klipu filmowego myContainer.

var myLoader:MovieClipLoader = new MovieClipLoader();
myLoader.loadClip("myExternalMovie.swf", myContainer);

Jeśli chcesz wiedzieć, że zawartość została załadowana, użyj procedury obsługi zdarzeń onLoadInit względem instancji MovieClipLoader.

var myLoader:MovieClipLoader = new MovieClipLoader(); 
myLoader.addListener(this); 
myLoader.loadClip("myExternalMovie.swf", myContainer); 

function onLoadInit(mc:MovieClip) 
    { 
        trace("content has been loaded into "+mc); 
    }

Jeśli chcesz mieć większą kontrolę nad informacjami dotyczącymi ładowania zawartości do klipu filmowego, zamiast funkcji MovieClip.loadMovie użyj klasy MovieClipLoader. (Użyj tej procedury obsługi zdarzeń na przykład, jeśli chcesz mieć możliwość sprawdzenia postępów ładowania).Więcej informacji o klasie MovieClipLoader podano w sekcji MovieClipLoader w dokumencie ActionScript 2.0 Language Reference.

Uwaga:Klasa MovieClipLoader jest dostępna tylko w przypadku publikacji w programie Flash Player 7 lub nowszym.

Wczytywanie zawartości za pomocą ścieżek względnych

Używanie ścieżek względnych w elementach Loader i loadMovie może być mylące. Ponieważ akcję loadMovie może wykonywać oś czasu dowolnego pliku SWF lub klipu filmowego, zadaj sobie pytanie o to, względem której osi czasu jest wczytywany film. Czy jest on ładowany względem głównej osi czasu na poziomie _level0? Czy względem osi czasu, z której wykonano działanie ładowania filmu? Odpowiedź jest prosta: filmy są ładowane zawsze w stosunku do osi czasu, która je załadowała. Aby poznać omówienie względnych ścieżek — co ma znaczenie również w przypadku ładowania zewnętrznych plików SWF— przeczytaj artykuł Względne adresy URL nie są poprawnie wywoływane | Flash (tn_04157).

Uwagi dotyczące liczby klatek na sekundę

W większości przypadków załadowany film dziedziczy szybkość odtwarzania z filmu nadrzędnego. Na przykład plik SWF o szybkości odtwarzania 12 kl./s wczytany do filmu z szybkością 24 kl./s będzie się odtwarzać z taką szybkością. Jedynym wyjątkiem jest sytuacja, w której wczytany film zawiera na osi czasu dźwięk, w którym dla synchronizacji ustawiono wartość „stream”. Tylko w tej sytuacji główny film odziedziczy szybkość wczytanego filmu, zapewniając prawidłowe odtwarzanie dźwięku.

Uwaga: język ActionScript 3.0 umożliwia dynamiczną zmianę szybkości odtwarzania za pomocą właściwości Stage.frameRate.

Słowa kluczowe: Flash Player, wczytywanie filmów; ActionScript; skrypty; poziomy; tell target; zmienne; cel; instancja; SWF; loadMovie; tn_14190

Ta zawartość jest licencjonowana na warunkach licencji Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License  Posty z serwisów Twitter™ i Facebook nie są objęte licencją Creative Commons.

Informacje prawne   |   Zasady prywatności online