Требуется уточнение приложения
Мне нужно кое-что прояснить по этому вопросу, так как я только что столкнулся с проблемой загрузки 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-файлом, переопределяемым первым
Объекты, которые хранятся в ApplicationDomain
s хранятся по имени класса, и мне интересно, переопределены ли имена классов загруженных 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();
В этот момент вы можете разгрузить загрузчик и аккуратно поработать со своим новым экземпляром.
дальнейшее чтение