Требуется уточнение приложения

Мне нужно кое-что прояснить по этому вопросу, так как я только что столкнулся с проблемой загрузки SWF-файлов в повторно используемый объект загрузчика.

Допустим, у меня есть 3 SWF.
main.swf
childA.swf
childB.swf

Main.swf содержит объект загрузчика, который используется повторно (myloader.load("childA.swf")), и childA или childB swf будут загружаться через взаимодействие с пользователем.
Оба дочерних swfs имеют com-пакет с классом в этом пакете, который называется config.
Файлы конфигурации - это разные файлы для обоих классов, названные одинаково.
оба дочерних swf также отправляют событие, которое прослушивает Main

Теперь у меня возникла проблема: если сначала загрузить childA, то после загрузки childB он все равно будет отображаться как childA. По сути, тот, кто загрузится в этот загрузчик первым, будет победителем.
Это сводило меня с ума, поскольку ничто из того, что я делал, не приводило к разгрузке swf. Пока я не нашел следующий код.

var appDomain:ApplicationDomain = new ApplicationDomain();
var context:LoaderContext = new LoaderContext(false, appDomain);
_contentPanel.load(new URLRequest(str), context);

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

Моя путаница - это случай, когда дочерние рассылки все еще работают, когда я не думаю, что главный swf должен его поднять из-за того, что он не находится в том же домене приложения.
Я имею в виду, не должно ли событие быть заблокировано?

1 ответ

Решение

Разгрузка SWF

Класс Loader обеспечивает Loader.unload() (или после Flash Player версии 10 - Loader.unloadAndStop())

Проблема со вторым загруженным SWF-файлом, переопределяемым первым

Объекты, которые хранятся в ApplicationDomains хранятся по имени класса, и мне интересно, переопределены ли имена классов загруженных SWF (или их дочерних элементов). Даже если это не так; почему бы не использовать новый экземпляр Loader для каждого загружаемого объекта?

Как Главный SWF может забрать обоих потомков из другого домена приложения

Основной SWF-файл сможет работать с новыми (загруженными) доменами приложений, поскольку они являются дочерними доменами основных SWF-файлов (см. ApplicationDomain.parentDomain). Домен основного SWF-файла будет "системным доменом", а новые экземпляры будут загружаться под ним.

Разделение загруженных SWF-файлов из загрузчика

В идеале вы хотите иметь доступ к данным SWF независимо от состояния Loader, Вы можете сделать это, получив доступ к корневому мувиклипу SWF после загрузки и создав новый экземпляр с

var rootClipClass:Class = ApplicationDomain.getDefinition("[InsertYourRootClipName]") as Class; 
var rootClip:MovieClip = new rootClipClass(); 

В этот момент вы можете разгрузить загрузчик и аккуратно поработать со своим новым экземпляром.

дальнейшее чтение

Другие вопросы по тегам