AS3 - Как присвоить загрузчику имена или теги?

У меня есть список изображений, загруженных с помощью класса Loader, но мне сложно присвоить им уникальные имена. Мне нужны уникальные имена, потому что я хочу через некоторое время удалить определенные изображения. Есть ли способ присвоить загрузчикам имя или какой-то уникальный тег, чтобы я мог удалить их позже? благодаря.

Вот часть моего кода

for (var i = startnum; i < endnum; i++){
    var thumb = panels[i].@THUMB;
    var thumb_loader = new Loader();
    thumb_loader.load(new URLRequest(thumb));
    thumb_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, thumbLoaded);

    thumb_loader.name = i;
    thumb_loader.x = (thumb_width + 20)*i;
}

Я пробовал использовать getChildByName в другой функции ..

var myLoader:Loader = getChildByName( "1" ) as Loader;
myLoader.unload();

Но это дает мне ошибку №1009: невозможно получить доступ к свойству или методу ссылки на нулевой объект.

Я попытался поставить thumb_loader как глобальную переменную и сделаю это

var myLoader:Loader = thumb_loader.getChildByName( "1" ) as Loader;

Но все равно не работает. Спасибо.


person shibbydoo    schedule 24.11.2008    source источник


Ответы (3)


Все экранные объекты в ActionScript 3 имеют свойство name. Каждый раз, когда вы создаете объект Loader, вы можете присвоить ему такое имя:

var myLoader:Loader = new Loader();
myLoader.name = "myUniqueName";
myLoader.load( .... );
addChild( myLoader );

Если вы хотите ссылаться на загрузчик по имени, которое вы ему дали, используйте метод getChildByName ().

var myLoader:Loader = getChildByName( "myUniqueName" ) as Loader;
myLoader.unload();

Помните, что getChildByName () будет работать только после того, как вы добавите загрузчик (ы) в список отображения с помощью addChild (). В противном случае вам придется создать что-то для хранения ссылок на объекты Loader, например массив, и ссылаться на загрузчики через этот массив. Например, вне цикла вы можете создать массив с именем loadersArr. В вашем цикле вы бы сделали:

loadersArr["uniqueName"] = thumb_loader;

Затем вы можете ссылаться на свои загрузчики со своим уникальным именем через массив loadersArr.

var loaderToUnload:Loader = loadersArr["uniqueName"];
loaderToUnload.unload();

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

person Matt W    schedule 24.11.2008
comment
но это дает мне эту ошибку. Ошибка № 1009: Невозможно получить доступ к свойству или методу ссылки на нулевой объект. - person shibbydoo; 24.11.2008
comment
Трудно понять, почему вы получаете эту ошибку, не видя своего кода. - person Matt W; 24.11.2008

Не уверен, что я на 100% понимаю вашу проблему, но почему бы не поместить их в карту объектов, а не в список, и не сгенерировать для них уникальные имена, если у вас их нет ...

var img:Image;
var img_map:Object = new Object();
var last_added:int = 0;
for each (img in yourListOfImages)
{
    img_map["img_"+last_added] = img;
    last_added++;
}

В зависимости от вашей среды (Flex или Flash) вы можете использовать генератор UID вместо моих упрощенных уникальных имен выше.

person Simon    schedule 24.11.2008

package 
{
    import flash.display.Loader;

    public dynamic class DynamicLoader extends Loader 
    {
        public function DynamicLoader()
        {
            super();
        }
    }
}

Я считаю, что класс Loader - это запечатанный класс, поэтому вы хотели бы создать этот класс и использовать его вместо обычного класса Loader, чтобы присвоить ему любой атрибут, который вы хотите. Я также считаю, что без использования этого DynamicLoader вместо обычного Loader класс Loader действительно имеет доступное свойство name.

person vanhornRF    schedule 24.11.2008