PDA

Просмотр полной версии : Несколько swf в Loader


Dmitriy154
16.11.2015, 18:21
Подскажите, есть приложение, открывающее любую swf из 5. Я нажимаю на кнопку с названием игры, загружается соответствующая swf через Loader. Затем я хочу для смены swf выбрать другую swf, нажимаю на кнопку, ... и у меня почему-то не получается: во-первых, звук первой swf загружается не полностью, во-вторых, добавляется на экран вторая swf, но продолжается звук первой swf. Т.е. не удаляется предыдущий Loader, пробовал удалять Loader и загружать новый, таже ерунда.
Вот часть моего кода:

var loader:Loader = new Loader();
addChild(loader);

//value - ссылка на swf
function onClick(value:String):void
{
/*
if (loader.content)
{
removeChild(loader.content);
loader.unload();
}
*/

loader.unload();
loader.load(new URLRequest(xml.values[value]));
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,ner);
}

function ner (e:Event):void {
addChild(loader.content);
}

caseyryan
16.11.2015, 18:34
1) В обработчике присваивай loader.content какой-то переменной, чтобы к нему был доступ. Не надо добавлять ничего вот так:

addChild(loader.content);

2) Отписывайся от слушателя в обработчике

loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,ner);

3) Создавай каждый раз новый Loader

п.с. Да и для остановки предыдущего есть метод unloadAndStop()

Dmitriy154
16.11.2015, 22:44
Спасибо, caseyryan, частично помог метод unloadAndStop() - флешки предыдущие закрываются. Проблема у меня, наверное, в том, что некоторые флешки написаны на as2 (as1) и неправильно воспроизводятся. Пробовал AVM1Movie, не получилось, ну и да ладно.

function ner (e:Event):void {
loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,ner);
// или var swf:AVM2Movie = AVM2Movie(loader.content);
var swf:MovieClip = MovieClip(loader.content);
addChild(swf);
}

caseyryan
17.11.2015, 06:14
var swf:MovieClip = MovieClip(loader.content);
Ну и в чем разница с предыдущим подходом? Эта переменная так же доступна только в обработчике.
Переменную нужно держать снаружи