Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   MovieClips Array (http://www.flasher.ru/forum/showthread.php?t=143872)

PIRIS 27.08.2010 22:45

MovieClips Array
 
Добрый день!

Задача следующая. Есть xml файл, откуда загружаь информацию о swf файлах. Их количество мне заведомо не известно, поэтому мне нужно создать массив MovieClip-ов,
MovieLoader-ов и URLRequest-ов. Создаю их в цикле. Но как я понимаю, добавляя их в архив, они далее будут недоступны. Вот код. Замучался сильно, подскажите, как справиться с ситуацией? Спасибо заранее
Код AS3:

...
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);
}
}


Hidest 28.08.2010 00:35

А с чего вы взяли, что они будут недоступны? Там, где у вас доступны ваши массивы, там же будут доступны и все объекты, которые вы туда загнали... Или я не понял вопроса? В чем в итоге проблема?

p.s.: Оформите код тегами, иначе вом скоро об этом напомнят модераторы.

PIRIS 28.08.2010 10:35

Спасибо. Я предположил что они будут недоступными поскольку я создаю переменные nLoader, nRequest и nObject локально в функции. Вот и хотел уточнить так ли это?
Еще один момент. Если у меня nLoader будет другого типа, т.е. класса наследованного от MovieLoader и у нее будет переменная скажем iname. Я присваиваю значение в этом же цикле, а после загрузки самого MovieClip-а данное значение теряется.
В цикле:
Код AS3:

var nLoader:lqMovieLoader = new lqMovieLoader(MovieClip(this));
...
nLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onBtnCompleteHandler);
...
iObjects[i].itemname = settingsXML.NAVITEM[i].@title;

В onBtnCompleteHandler у меня уже не будет доступно присвоенное значение. Может все же MovieClip-ы лучше добавлять в архив в onBtnCompleteHandler, когда она уже загружена?

samana 28.08.2010 11:22

Цитата:

Я предположил что они будут недоступными поскольку я создаю переменные nLoader, nRequest и nObject локально в функции.
Локальные переменные не будут доступны вне функции.

Попробовал с примером как у вас, всё доступно. Где то в другом месте вы просчитались.
Класс:
Код AS3:

package{
        import flash.display.Loader
        public class TempLoader extends Loader{
                public var string:String;
                public function TempLoader(str){
                        string=str
                }
        }
}

код в кадре:
Код AS3:

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
}


PIRIS 28.08.2010 18:47

Цитата:

Сообщение от samana (Сообщение 931934)
Локальные переменные не будут доступны вне функции.

А как тогда можно создать массив, если я не знаю количество MovieClip-ов и соответственно не знаю сколько переменных создать вне функции?

samana 28.08.2010 19:28

Ну вроде же вы всё правильно делали, создали массив перед функцией, во время функции положили в массив всё что нужно, а потом берите данные из этого массива сколько угодно.

Wolsh 28.08.2010 19:35

Не то слово выделили.
Локальные переменные не будут доступны вне функции.
Массив, объявленный в теле класса, будет доступен во всех методах класса. И хранящиеся в нем ссылки на созданные объекты - тоже. Объекты хранятся в памяти, а не "в функции". Если на них есть ссылки (а они в массиве), то Вы имеете к ним доступ. Если бы ссылки были только в теле функции - то да, извне были бы недоступны.

PIRIS 28.08.2010 19:36

Ребята, спасибо большое, я уже все понял. Мне остается тогда найти проблему в другом месте :) Наверное запутался в своем коде.


Часовой пояс GMT +4, время: 23:48.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.