2008-11-22 4 views
1

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

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

ответ

1

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

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-loop, каждый раз назначая другую переменную (место в массиве, возможно, или свойство объекта) для вашего недавно загруженного e.target.content, чтобы вы могли получить к нему доступ за пределами этого типа onComplete функция.

0

Я сам нашел душу.

Инициализация или выгрузки список изображений (на самом деле экземплярами 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"); которым не появляется вообще ...

+0

Не могли бы вы разместить свой функциональный код «centerimage»? – defmeta 2008-11-22 21:50:08

+0

давайте спросим о центрировании изображений в другом вопросе, просто чтобы все было организовано. – 2008-11-23 20:11:05

3

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

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

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