Из файла Flash SWF можно загрузить другие файлы SWF в качестве ресурсов. Существует несколько причин для загрузки внешних SWF-файлов:

  • Поскольку проект можно разделить на несколько фильмов, отдельные SWF-файлы меньше размером. Файлы меньшего размера загружаются быстрее, а память используется более эффективно.  
  • Это позволяет загружать только содержимое, необходимое для работы с фильмом.
  • Можно воспроизвести несколько SWF-файлов подряд без необходимости загружать очередные HTML-страницы в браузере. Загрузка содержимого не останавливается и не обновляется.
  • Это обеспечивает для вас больше гибкости в организации ресурсов проекта.
  • Можно создать сложный интерфейс пользователя, не основанный лишь на одном SWF-файле. Для создания интерфейса можно скомпоновать несколько SWF-файлов. Объединение файлов SWF упрощает монтаж, поскольку можно изменить отдельный небольшой SWF-файл, не затрагивая другие части интерфейса.
  • Несколько разработчиков могут совместно работать над одним проектом, используя отдельные FLA-файлы.

Помещение содержимого в отдельный SWF-файл подобно помещению содержимого в соответствующий символ фильма. Различие заключается в том, что содержимое находится вне основного SWF-файла. Можно также загружать изображения, например, в формате JPG, PNG, GIF.

Чтобы загрузить внешний файл SWF из другого файла SWF, используйте один из следующих способов:

  • Класс Loader в ActionScript 3.0
  • Команда loadMovie в ActionScript 2.0
  • Класс MovieClipLoader в ActionScript 2.0

Использование класса Loader в ActionScript 3.0

Класс Loader в ActionScript 3.0 является подклассом объекта DisplayObject, который используется для загрузки и отображения внешнего содержимого. Для загрузки SWF-файла используется метод load этого класса. Для метода load требуется один параметр — экземпляр URLRequest, содержащий URL-адрес содержимого для загрузки.

В следующем примере кода создается экземпляр Loader и загружается SWF-файл под названием 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%

URL-адрес загружаемого SWF-файла может быть относительным или абсолютным. См. раздел Относительные пути ниже, чтобы получить подробные сведения о том, как во Flash Player обрабатываются URL-адреса. Подробности о классе Loader приведены в разделе Loader справочнике по языку платформы ActionScript.

При упоминании о root имеется в виду самый верхний объект в части экрана, в которой отображается древовидная структура списка, обозначающая SWF-файл. (Что касается изображений, root относится к объекту Bitmap.)

Примечание. В ActionScript 3.0 нет эквивалента для свойств _lockroot и _level в ActionScript 2.0. См. раздел Основы программирования отображаемого содержимого в Руководстве разработчика ActionScript 3.0.

Использование команды loadMovie в ActionScript 2.0

При использовании команды loadMovie в ActionScript 2.0 загружается внешний файл SWF или изображение в MovieClip или на другой уровень родительского фильма.

Команды loadMovie имеет две разные формы:

  • Метод MovieClip.loadMovie: метод MovieClip используется для загрузки внешнего содержимого в специальный экземпляр фильма.
  • Глобальная функция loadMovie: глобальная функция loadMovie может использоваться для загрузки содержимого в фильмы и на уровни. Для глобальной версии также имеется два варианта — loadMovie и loadMovieNum. При использовании первого варианта содержимое загружается в фильмы или на уровни, а при использовании второго (loadMovieNum) — только на уровни.

MovieClip.loadMovie

Компания Adobe рекомендует загрузке внешнего содержимого в экземпляры фильма использовать метод MovieClip loadMovie. Эту версию команды можно вызвать непосредственно в фильме, в который требуется загрузить содержимое, путем вставки URL-адреса содержимого.

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

URL-адрес загружаемого содержимого может быть относительным или абсолютным. См. раздел Относительные пути ниже, чтобы получить подробные сведения о том, как во Flash Player обрабатываются URL-адреса.

При загрузке содержимое отображается внутри ролика-контейнера. Местоположение, а также и другие основные свойства ролика-контейнера сохраняются. Однако все пользовательские свойства или функции, определенные в ролике-контейнере, удаляются. Новое содержимое заменяет собой все предыдущее содержимое (включая коды и обработчики событий, например onRelease). Таким образом, не удастся использовать обработчик событий onLoad для фильма. В таком случае можно вместо этого использовать класс MovieClipLoader (см. ниже). Дополнительная информация о MovieClip.loadMovie приведена в разделе MovieClip.loadMovie в справочнике по языку ActionScript 2.0.

Глобальные функции loadMovie и loadMovieNum

Команда loadMovie также используется как глобальная функция. Для этой функции требуется два параметра — URL-адрес внешнего содержимого и цель, в которую оно загружается. Параметром цели может быть строка или ссылка. Использование следующих строк эквивалентно загрузке файла myExternalMovie.swf в экземпляр фильма под названием myContainer:

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

При использовании команды loadMovie можно также загрузить содержимое на различные уровни Flash Player. Уровни во Flash Player подобны слоям проигрывателя. В одном экземпляре Flash Player можно воспроизвести несколько фильмов без наслоения одного фильма на другой. Каждый уровень представляет собой уникальный корневой объект, в котором фильмы воспроизводятся независимо от других уровней (в использовании _lockroot нет необходимости).

Можно ссылаться на слои в ActionScript с помощью команды _level с последующим указанием числа, которое обозначает номер слоя. Первый ролик, загруженный во Flash Player, находится на уровне _level0. Дополнительные уровни можно добавлять поверх этого уровня. При следующем вызове команды loadMovie файл myExternalMovie.swf загружается на уровень 1 вверху текущего фильма, воспроизводимого в проигрывателе.

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

Еще один вариант глобальной функции loadMovie — loadMovieNum. Этот метод похож на метод loadMovie за исключением того, что уровни указываются по номеру, а не по имени. Чтобы загрузить внешний SWF-файл, например, на уровень 1 (_level1), используйте следующее руководство:

loadMovieNum("myExternalMovie.swf", 1);

Компания Adobe рекомендует при загрузке на уровни использовать команду loadMovieNum, а не loadMovie. Дополнительные сведения приведены в разделе global loadMovie в справочнике по языку ActionScript 2.0.

Использование _lockroot для предотвращения конфликтов _root

При загрузке внешнего фильма в другой фильм, временная шкала ссылки _root загруженного фильма изменяется на временную шкалу фильма, в который он загружен. Другими словами, _root всегда ссылается на самому верхнюю временную шкалу в иерархии. Если вы не хотите, чтобы _root ссылалась на самую верхнюю временную шкалу, задайте для свойства _lockroot на основной временной шкале загруженного фильма значение true. Благодаря этому свойству все дочерние фильмы с этой временной шкалы, ссылаясь на _root, ссылаются также и на эту временную шкалу.

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

Примечание. При публикации во Flash Player 7 или более поздних версиях свойство _lockroot является единственным из доступных.

Использование класса MovieClipLoader в ActionScript 2.0

Класс MovieClipLoader в ActionScript 2.0 разработан специально, чтобы упростить процесс загрузки внешнего содержимого в экземпляры MovieClip. Как уже отмечалось, переменные и функции, определенные в видеоклипах, удаляются при загрузке нового содержимого в эти фильмы. Обратные вызовы, например onLoad, не поддерживаются. Однако MovieClipLoader обходит это ограничение, работая как суррогат для таких событий. Можно создать отдельные экземпляры MovieClipLoader для управления загрузкой содержимого в другой фильм. Поэтому стирание переменных или функций внутри этого фильма не происходит.

При загрузке содержимого в фильм посредством класса MovieClipLoader сначала следует создать новый экземпляр класса. Затем можно использовать loadClip для загрузки содержимого в целевой фильм. В следующем примере новое содержимое загружается в фильм myContainer.

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

Если вам требуется уведомление о том, что содержимое загружено, используйте обработчик событий onLoadInit для экземпляра 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); 
    }

Если вам требуется больше контроля над загрузкой содержимого в фильм, используйте класс MovieClipLoader вместо MovieClip.loadMovie. (Например, этот обработчик событий можно использовать при необходимости проверять процесс загрузки.)Дополнительная информация о классе MovieClipLoader приведена в разделе MovieClipLoader в справочнике по языку ActionScript 2.0.

Примечание. При публикации во Flash Player 7 или более поздних версиях класс MovieClipLoader является единственным из доступных.

Использование относительных путей для загрузки содержимого

Использование относительных путей с командами Loader и loadMovie может быть непонятным. Поскольку на временной шкале любого SWF-файла или видеоролика может выполнить команду loadMovie, следует задать вопрос: по отношению к какой временной шкале загружается фильм? Относится ли он к главной временной шкале на уровне _level0? Или он расположен относительно временной шкалы, на которой выполняется загрузка фильма? Ответ прост — загруженные фильмы всегда расположены относительно временной шкалы, на которой они были загружены. В разделе Неверная ссылка на относительные URL-адреса | Flash (tn_04157) приведено обсуждение относительных путей, касающееся также загрузки внешних SWF-файлов.

Факторы частоты кадров

В большинстве случаев загруженный фильм наследует частоту кадров родительского фильма. Например, SWF-файл с частотой кадров 12 кадров в секунду воспроизводится с частотой 24 кадра в секунду после загрузки в фильм с частотой 24 кадра в секунду. Единственным исключением является загружаемый фильм, содержащий звук на временной шкале, для которого настроена синхронизация потока. Только после этого главный фильм наследует частоту кадров загружаемого фильма, обеспечивая корректного воспроизведение такого звука.

Примечание. ActionScript 3.0 позволяет изменить частоту кадров динамически с помощью свойства Stage.frameRate.

Ключевые слова: Flash Player, загрузка фильма; ActionScript; сценарий; уровни; tell target; переменные; цель; экземпляр; SWF; loadMovie; tn_14190

Эта работа лицензируется в соответствии с лицензией Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported  На посты, размещаемые в Twitter™ и Facebook, условия Creative Commons не распространяются.

Правовые уведомления   |   Политика конфиденциальности в сети Интернет