AS3 - Как присвоить имена или теги загрузчику? - PullRequest
0 голосов
/ 24 ноября 2008

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

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

Ответы [ 3 ]

3 голосов
/ 24 ноября 2008

Все экранные объекты в 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, например, Array, и ссылаться на загрузчики через этот Array. Например, вне вашего цикла вы можете создать массив с именем loadersArr. В вашем цикле вы должны сделать:

loadersArr["uniqueName"] = thumb_loader;

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

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

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

0 голосов
/ 24 ноября 2008
package 
{
    import flash.display.Loader;

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

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

0 голосов
/ 24 ноября 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 вместо моих упрощенных уникальных имен выше.

...