PDA

Просмотр полной версии : Вопрос по прелоадингу и инициализации.


mainpart
18.10.2002, 00:16
Есть swf.
подгружаем ее в mc.

_root.createEmptyMovie("asdf",level);
_root.asdf.loadMovie("external.swf");

В этой swf есть функция инициализации, принимающая параметры. Как ей эти параметры передать? дело в том, что _root.asdf.onLoad=function_name не воспринимает параметры. Мы можем просто дать ссылку на функцию, либо объявить ее, как анонимную. А как параметры передать?

Спасибо.

ZEX
18.10.2002, 12:53
Не четко описана суть, но правило одно :
Все переменные( а также имена обьектов) обьявленные в одном муве, можно использовать в другом муве будь то он созданный или подгруженный , неважно.
Исходя из этого можно изьеб...ся.

lizergil
18.10.2002, 12:56
_level1.function(_root.var1, _root.var2);
если mc загружен на level 1 соответственно

mainpart
18.10.2002, 16:16
Дело в том, что onLoad принимает ссылку на функцию, а в ссылке, как известно мы не можем передать параметры.

Т.е. movie.onLoad=function_name(var1,var2) просто присвоит onLoad'у результат выполнения функции.

Сегодня столкнулся с новой проблемой - событие onLoad вообще не возникает для клипов подгруженных по loadMovie

Т.е. _root.createEmptyMovie("test",level);
_root.test.loadMovie("external.swf");
_root.test.onLoad=function() { trace("test");}

не вызывается вообще, хотя кол-во загруженных байт совпадает с тотальным у этого внешнего swf.
Одновременно, если внутри external.swf прописать onLoad на него самого, то все работает. где грабли?

lizergil
18.10.2002, 16:35
_level1.function(_root.var1, _root.var2);
Это запуск функции с именем function с level 1


_root.test.loadMovie("external.swf");
_root.test.onLoad=function() { trace("test");
здесь трэйс включиться после загрузки mc test,
"_root.test.onLoad"

mainpart
18.10.2002, 21:09
Это все не в ту степь. Я знаю, что функции можно вызывать путем указания полного пути к ним. Т.е. _root.mc1.mc2.mc3. ... mcN.our_function(var1,...,varN) прекрасно работает. Я говорю про создание ссылки на функцию, ибо хендлер onEvent во флеше принимает только ссылку на функцию. поясню на примере:
есть функция

function asdf(variable){
trace("function passed with "+variable);
return "aaa";
}


тогда если мы присваем событию onEvent какого-либо клипа asdf("test") то ему присвоится значение "aaa", как значение возвращаемой функции. Если же мы присвоим событию onEvent результат выполнения функции eval("this.asdf") то все получится - по возникновению события вызовется именно эта функция.
Т.е.
this.mc1.onLoad=asdf(variable); - не правильно
this.mc1.onLoad=eval("this.asdf"); - правильно

Теперь следующий вопрос, вернее переформулировка первого.

файл external.swf. Один фрейм.
В этом первом фрейме функция initSwf(a,b);

файл root.swf
конструкция вида
for (i=1;i<5;i++){
_root.createEmptyMovieClip("clip"+i,i);// создаем clip1,clip2,clip3 и т.д.
clipName=eval("_root.clip"+i);
clipName.loadMovie("external.swf");
clipName.onLoad=function(){trace("clip loaded");}
}

Здесь начинаются проблемы.
Во первых, onLoad для этого клипа не вызывается никогда. Во вторых, как вызвать функцию инициализации в external.swf после его загрузки из главного модуля и в третьих, как передать параметр в эту функцию инициализации.

derhab
18.10.2002, 21:28
clipName.onData=function(){trace("clip loaded");}
А так?

Nox Noctis
19.10.2002, 06:34
Оригинал написал(а) mainpart
где грабли? грабли стандартные =)
- если присвоить онЛоад ДО лоадмуви - то этот метод будет удален как и все остальные переменные в таргете сразу при вызове лоадмуви.
- если присвоить онЛоад СРАЗУ ПОСЛЕ лоадмуви, то таргет еще не погрузился на сцену - переменные в нем не инициализируются и онЛоад просто не создастся.

то есть ни до ни после хэндлер присвоением не создать.

можно
либо сделать onClipEvent(load) на самом клипе - тогда он будет работать (но тогда нужен либо аттач либо дубликейт - скриптом такое не сваять)
либо вызывать онЛоад изнутри загружаемого клипа