Просмотр полной версии : Обращние к переменным загруженной swf'ки
Пожалуйста, помогите разобраться!
Есть сцена, в которую я загружаю внешнюю swf'ку, в которой есть переменная, допустим i...вопрос в том могу ли я обратиться к ней и поменять её значение?И если да, то как?
Конечно.
Надеюсь, вы пользуетесь MovieClipLoader. Если нет, то делайте именно так.
Тогда, например:
var loader:MovieClipLoader = new MovieClipLoader(); //создаем загрузчик
var listener:Object = new Object(); //создаем слушаетеля зарузчика
loader.addListener(listener); //привязываем слушателя к загрузчику
this.createEmptyMovieClip('container_mc', this.getNextHighestDepth()); //создаем контейнер для загрузки внешнего ролика
listener.onLoadInit = function (target_mc:MovieClip) {
i_local = target_mc.i; //делаем ссылку на i внутри secondary.swf
trace(i_local) //выведет переменную i из загруженного ролика secondary.swf
changeVar(i_local); //меняем переменную i в загруженном ролике
}
loader.loadClip('secondary.swf', container_mc); //загружаем внешний ролик
function changeVar (vars) {
vars = 10; //поменяет значение i в загруженном ролике на 10
}
Странно, чтото не получается, может я чтото пропустил...вот мой код
var mcl:MovieClipLoader = new MovieClipLoader();
var mclListener:Object = new Object();
mclListener.onLoadProgress = function(target,loaded,total)
{
loader_mc.percent.text = Math.round((loaded/total) * 100) + "%";
}
mclListener.onLoadInit = function()
{
loader_mc._visible = false;
loader_mc.percent.text = "";
trace(holder_mc.i);
}
mcl.addListener(mclListener);
mcl.loadClip("listik1.swf", holder_mc);
В трейсе выводит undefined!
О, разобрался))
Только вот ещё один вопрос - а что если переменная находится внутри другого MC в загружаемом файле и не на первом кадре, а допустим на 10? Как можно обратиться непосредственно к этому кадру?
Обращайтесь, используя обычную адресацию вглубь.
holder_mc.mc_1.mc_2.i и т.п.
Обратиться "к кадру" нельзя. Код в кадрах выполняется при переборе кадров при проигрывании или переходе бегунка таймлайна к нужному кадру.
Определяйте все переменные сразу, вычисляйте их... либо дождитесь, когда загруженный ролик доиграет до нужного кадра, и нужная переменная определится.
Либо вообще откажитесь от использования кадров (правда тогда все равно придется дождаться определенного события).
В общем, во всех случаях, пока нужное событие не наступило, соответственное значение переменная не получит, авансом это значение получить никак не получится.
Добавлено через 2 минуты
Кстати, я там описался, нужно было так:
listener.onLoadInit = function (target_mc:MovieClip) { }
Тип аргумента был неправильно поставлен.
Аргумент target_mc определен внутри оной функции и ссылается на контейнер, куда загружали.
Удобно, когда данную функцию нужно использовать многократно, тогда используя target_mc внутри функции, будем обращаться все время к нужному контейнеру.
Удобно, когда данную функцию нужно использовать многократно, тогда используя target_mc внутри функции, будем обращаться все время к нужному контейнеру. Ага, спасибо))
По поводу переменных понял...т.е. впринципе, если я объявлю переменную в первом кадре, я свободно смогу к ней обратиться в последующих, так? Будет ли они попадать в зону видимости этой переменной?
Будут, если объявите правильно и с адресацией не напутаете при обращении.
temofony
16.02.2010, 22:44
хм...переменная у меня передается но не меняется...
Попробуйте поменять прямо изнутри onLoadInit, используя полную адресацию до переменной.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.