![]() |
|
||||||||||
|
|||||
|
Добрый день!
Задача следующая. Есть xml файл, откуда загружаь информацию о swf файлах. Их количество мне заведомо не известно, поэтому мне нужно создать массив MovieClip-ов, MovieLoader-ов и URLRequest-ов. Создаю их в цикле. Но как я понимаю, добавляя их в архив, они далее будут недоступны. Вот код. Замучался сильно, подскажите, как справиться с ситуацией? Спасибо заранее ... var iLoaders:Array = new Array; var iRequests:Array = new Array; var iObjects:Array = new Array; .... protected function initiateScene() { var n:int = settingsXML.NAVITEM.length(); for (var i:int = 0; i < n; i++) { var nLoader:MovieLoader = new MovieLoader(); var nRequest:URLRequest = new URLRequest(settingsXML.NAVITEM[i].@title+".swf"); var nObject:MovieClip = new MovieClip(); ..... nLoader.load(nRequest); iLoaders.push(nLoader); iRequests.push(nRequest); iObjects.push(nObject); } } Последний раз редактировалось PIRIS; 28.08.2010 в 10:36. |
|
|||||
|
Регистрация: Jun 2006
Адрес: Москва
Сообщений: 461
|
А с чего вы взяли, что они будут недоступны? Там, где у вас доступны ваши массивы, там же будут доступны и все объекты, которые вы туда загнали... Или я не понял вопроса? В чем в итоге проблема?
p.s.: Оформите код тегами, иначе вом скоро об этом напомнят модераторы. |
|
|||||
|
Спасибо. Я предположил что они будут недоступными поскольку я создаю переменные nLoader, nRequest и nObject локально в функции. Вот и хотел уточнить так ли это?
Еще один момент. Если у меня nLoader будет другого типа, т.е. класса наследованного от MovieLoader и у нее будет переменная скажем iname. Я присваиваю значение в этом же цикле, а после загрузки самого MovieClip-а данное значение теряется. В цикле: В onBtnCompleteHandler у меня уже не будет доступно присвоенное значение. Может все же MovieClip-ы лучше добавлять в архив в onBtnCompleteHandler, когда она уже загружена? |
|
|||||
|
Цитата:
Попробовал с примером как у вас, всё доступно. Где то в другом месте вы просчитались. Класс: package{ import flash.display.Loader public class TempLoader extends Loader{ public var string:String; public function TempLoader(str){ string=str } } } var arr:Array=[] var loader1:TempLoader=new TempLoader("a"); var loader2:TempLoader=new TempLoader("b"); addChild(loader1) addChild(loader2) arr.push(loader1) arr.push(loader2) loader1.load(new URLRequest("10001.jpg")) loader1.contentLoaderInfo.addEventListener(Event.COMPLETE,comp1) function comp1(e:Event){ trace(arr[0].string)//---> a } loader2.load(new URLRequest("10002.jpg")) loader2.contentLoaderInfo.addEventListener(Event.COMPLETE,comp2) function comp2(e:Event){ trace(arr[1].string)//---> b } Последний раз редактировалось samana; 28.08.2010 в 11:44. |
|
|||||
|
А как тогда можно создать массив, если я не знаю количество MovieClip-ов и соответственно не знаю сколько переменных создать вне функции?
|
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Не то слово выделили.
Локальные переменные не будут доступны вне функции. Массив, объявленный в теле класса, будет доступен во всех методах класса. И хранящиеся в нем ссылки на созданные объекты - тоже. Объекты хранятся в памяти, а не "в функции". Если на них есть ссылки (а они в массиве), то Вы имеете к ним доступ. Если бы ссылки были только в теле функции - то да, извне были бы недоступны.
__________________
Reality.getBounds(this); |
|
|||||
|
Ребята, спасибо большое, я уже все понял. Мне остается тогда найти проблему в другом месте
Наверное запутался в своем коде. |
![]() |
![]() |
Часовой пояс GMT +4, время: 21:28. |
|
|
« Предыдущая тема | Следующая тема » |
|
|