Ожидание пока SWFLoader загрузит SWF-файл - PullRequest
1 голос
/ 18 марта 2009

В настоящее время я работаю над приложением (Flex), которое интенсивно использует внешние SWF. Я хотел бы создать статический метод, который принимает имя файла в качестве аргумента и возвращает SWF, заключенный в какой-то другой класс.

public static function getSWFWrapperFromFile(path:string):SWFWrapper {
   var loader:SWFLoader = new SWFLoader();
   loader.addListener(Event.COMPLETE, onLoad);
   loader.load(path);
   // If I create new SWFWrapper object here and try to assign it the loader.content  I get null reference

  }

Однако при таком подходе я не могу инкапсулировать логику в одну функцию из-за неблокирующей загрузки () и необходимости обработчика onLoad. Есть ли возможность вызвать задержку после вызова метода load? Или у майбера есть другой, лучший способ?

Спасибо, Алонзо

Ответы [ 4 ]

1 голос
/ 10 апреля 2009

Список отображения хорошо спроектирован для асинхронной загрузки. Вы заметите, что Loader является производным от DisplayObject классом и, следовательно, может быть помещен непосредственно в список отображения. Когда его содержимое загружено, оно будет дочерним для Загрузчика. Таким образом, если SWFWrapper является производным от DisplayObject, вы можете просто сделать следующее в конце своего кода:


var wrapper:SWFWrapper = new SWFWrapper();
wrapper.addChild(loader);
return wrapper;
0 голосов
/ 18 марта 2009

Во флэш-памяти вы не можете заблокировать метод - вам всегда нужно использовать обработчик onLoad для загрузки данных. (Модель выполнения as3 является однопоточной, если вы заблокируете метод, остальная часть программы не будет выполнена)

0 голосов
/ 18 марта 2009

Как говорили другие, вы не можете этого сделать. Однако взгляните на библиотеку BulkLoader AS3, которая снимает с вас бремя одновременного управления несколькими загрузчиками и ожидания их завершения. Это хорошо задокументировано, и для его использования требуется всего несколько строк.

0 голосов
/ 18 марта 2009

Вам нужно дождаться завершения вашего объекта Loader. Попробуйте добавить в обработчик событий. Да, все становится мутным после того момента, когда у вас есть несколько загрузчиков и вам нужно ждать, пока последний не завершит работу Но это так, если вы собираетесь использовать SWFLoader.

...