我正在转换来自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中加载图像的功能?
答案 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");
,它根本没有出现......