У меня есть список изображений, которые я загрузил с помощью класса 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;
Но все равно не работает. Спасибо.





Не уверен, что я на 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 вместо моих упрощенных уникальных имен выше.
package
{
import flash.display.Loader;
public dynamic class DynamicLoader extends Loader
{
public function DynamicLoader()
{
super();
}
}
}
Я считаю, что класс Loader - это запечатанный класс, поэтому вы хотели бы создать этот класс и использовать его вместо обычного класса Loader, чтобы присвоить ему любой атрибут, который вы хотите. Я также считаю, что без использования этого DynamicLoader вместо обычного Loader класс Loader действительно имеет доступное свойство name.
Все экранные объекты в 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();
Не видя больше вашего кода, трудно понять область, в которой находится этот код, и где находится любой другой код, который может попытаться ссылаться на эти загрузчики.
Трудно понять, почему вы получаете эту ошибку, не видя своего кода.
но это дает мне эту ошибку. Ошибка № 1009: Невозможно получить доступ к свойству или методу ссылки на нулевой объект.