![]() |
Вопрос по прелоадингу и инициализации.
Есть swf.
подгружаем ее в mc. _root.createEmptyMovie("asdf",level); _root.asdf.loadMovie("external.swf"); В этой swf есть функция инициализации, принимающая параметры. Как ей эти параметры передать? дело в том, что _root.asdf.onLoad=function_name не воспринимает параметры. Мы можем просто дать ссылку на функцию, либо объявить ее, как анонимную. А как параметры передать? Спасибо. |
Не четко описана суть, но правило одно :
Все переменные( а также имена обьектов) обьявленные в одном муве, можно использовать в другом муве будь то он созданный или подгруженный , неважно. Исходя из этого можно изьеб...ся. |
_level1.function(_root.var1, _root.var2);
если mc загружен на level 1 соответственно |
А мне кажется так нельзя.
Дело в том, что 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 на него самого, то все работает. где грабли? |
_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" |
Это все не в ту степь. Я знаю, что функции можно вызывать путем указания полного пути к ним. Т.е. _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 после его загрузки из главного модуля и в третьих, как передать параметр в эту функцию инициализации. |
clipName.onData=function(){trace("clip loaded");}
А так? |
Re: А мне кажется так нельзя.
Цитата:
- если присвоить онЛоад ДО лоадмуви - то этот метод будет удален как и все остальные переменные в таргете сразу при вызове лоадмуви. - если присвоить онЛоад СРАЗУ ПОСЛЕ лоадмуви, то таргет еще не погрузился на сцену - переменные в нем не инициализируются и онЛоад просто не создастся. то есть ни до ни после хэндлер присвоением не создать. можно либо сделать onClipEvent(load) на самом клипе - тогда он будет работать (но тогда нужен либо аттач либо дубликейт - скриптом такое не сваять) либо вызывать онЛоад изнутри загружаемого клипа |
| Часовой пояс GMT +4, время: 09:17. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.