От AS2 к AS3 загрузка внешних изображений - PullRequest
1 голос
/ 22 ноября 2008

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

Возможно, это изменилось в AS3, но мне действительно показалось странным, что для загрузки изображения, которое вы используете loadVideo, почему бы не загрузитьImage? (с другой стороны, флэш-приложение постоянно называется flash video , даже если оно вообще не используется для анимации). Это больше не работает, и я обнаружил довольно сложный код, который, как говорят, заменит этот oneliner 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?

Ответы [ 3 ]

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

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

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

//this is RIGHT
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoad);
1 голос
/ 23 ноября 2008

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

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 функция.

0 голосов
/ 22 ноября 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");, которая вообще не появляется ...

...