Из AS2 в AS3 загрузка внешних образов

Я конвертирую код ActionScript из AS2 в AS3, и в конце концов мне удалось заставить его работать снова (это почти полностью другой язык, имеющий лишь небольшое синтаксическое сходство). Одна из последних вещей, которая все еще не работает, - это код для загрузки внешнего изображения.

Возможно, это изменилось в AS3, но мне действительно показалось странным, что для загрузки изображения вы используете loadVideo, почему бы не loadImage? (с другой стороны, flash-приложение постоянно называется flash video, даже если оно вообще не используется для анимации). Это больше не работает, и я обнаружил довольно сложный код, который, как говорят, заменяет эту единственную строчку imageholder.loadVideo(url);:

var urlreq:URLRequest = new URLRequest(url);
var theloader:Loader = new URLLoader();
theloader.load(urlreq);
theloader.addEventListener(Event.COMPLETE, function(event:Event):void {
        imageholder.addChild(theloader);
    }
);

Но это не работает .. Что я делаю не так, и есть ли более подходящая функция для загрузки изображений в AS3?


person Stein G. Strindhaug    schedule 22.11.2008    source источник


Ответы (3)


Я думаю, вы слишком усложняете задачу - вот что вам нужно для загрузки одного изображения:

import flash.display.Loader;
import flash.event.Event;
import flash.net.URLRequest;

var imageLoader:Loader = new Loader();
imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, function(e:Event){
 // e.target.content is the newly-loaded image, feel free to addChild it where ever it needs to go...
});
imageLoader.load(new URLRequest('yourImage.jpg'));

... можете ли вы оттуда экстраполировать на загрузку списка изображений? Запустите этот код в цикле for, каждый раз присваивая новую переменную (место в массиве, возможно, или свойство объекта) вашему недавно загруженному e.target.content, чтобы вы могли получить к нему доступ за пределами этого типа onComplete. функция.

person matt lohkamp    schedule 23.11.2008
comment
Этот код функционально идентичен коду вопроса. Не понимаю, как это помогает. - person aaaidan; 01.12.2008
comment
Ой. Я вижу, вы слушаете contentLoaderInfo (правильно) вместо загрузчика. Виноват. - person aaaidan; 01.12.2008

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

//this is WRONG
loader.addEventListener(Event.COMPLETE, onLoad);

//this is RIGHT
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoad);
person Matt Rix    schedule 26.11.2008

Я сам обнаружил причину.

Инициализация или выгрузка списка изображений (фактически экземпляров MovieClip):

for (i = 0; i<imgHolders.length; i++) {
    var loader:Loader = imgHolders[i].getChildByName("imgloader"+i);
    if (loader) {
        loader.unload();
    } else {
        loader = new Loader();
        loader.name = "imgloader" + i;
        // Does't seem to work, commented out.
        //loader.addEventListener(Event.COMPLETE, centerimage);
        imgHolders[i].addChild(loader);
    }
}

когда мне нужно сменить изображение:

var loader:Loader = imgHolders[index].getChildByName("imgloader"+index);
loader.load(new URLRequest(newurl);

Я попытался добавить список, чтобы центрировать изображение, но кажется, что он не вызывается? Первое, что делает функция centerimage - это trace("centerImage");, который вообще не появляется ...

person Stein G. Strindhaug    schedule 22.11.2008
comment
Давайте спросим о центрировании изображений в другом вопросе, просто для того, чтобы все было организовано. - person matt lohkamp; 23.11.2008
comment
То, что делает моя функция, не имеет значения, я закомментировал контент, кроме trace("img center called");, но он не отображается. (В любом случае центрирование должно быть image.x = (container.width - image.width);, если изображение меньше контейнера) - person Stein G. Strindhaug; 24.11.2008
comment
Код, который вы разместили в этом ответе, вообще не вызывает load (). Я не понимаю, почему это сработает, и функция centerimage определенно не сработает, если загрузка не завершится. - person aaaidan; 01.12.2008
comment
И ElectricGrandpa также указывает, что вам нужно вызвать addEventListener для loader.contentLoaderInfo, а не только для загрузчика. Надеюсь, это поможет! - person aaaidan; 01.12.2008