Ожидание загрузки SWFLoader swf-файла

В настоящее время я работаю над приложением (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

  }

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

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


person alonzo    schedule 18.03.2009    source источник


Ответы (4)


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


var wrapper:SWFWrapper = new SWFWrapper();
wrapper.addChild(loader);
return wrapper;
person Troy Gilbert    schedule 10.04.2009

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

person dirkgently    schedule 18.03.2009

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

person Simon Groenewolt    schedule 18.03.2009

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

person David Hanak    schedule 18.03.2009