从AS2到AS3加载外部图像

时间:2008-11-22 07:57:01

标签: flash actionscript-3 image migration actionscript-2

我正在转换来自AS2 tp AS3的一些Actionscript代码,我最终设法让它的大部分工作再次起作用(它几乎是一种完全不同的语言,只是分享一点语法相似性)。用于加载外部图像的代码是最后仍然无效的事情之一。

也许这在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中加载图像的功能?

3 个答案:

答案 0 :(得分:3)

人们对装载机最常见的问题之一就是他们听取的事件。您需要确保您正在侦听大多数事件的loader.contentLoaderInfo,而不是加载器本身。这是您提供的示例中的主要问题。

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

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

答案 1 :(得分: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循环中运行该代码,每次为新加载的e.target.content分配一个不同的变量(可能是数组中的位置或对象的属性),以便您可以在'onComplete'类型之外访问它功能

答案 2 :(得分: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");,它根本没有出现......