Flash 加载程序中图像的固有属性

Flash 加载程序中图像的固有属性,flash,actionscript-3,actionscript,Flash,Actionscript 3,Actionscript,嘿,我对AS3有点陌生,但我一直在尽可能多地学习和阅读LiveDocumentation,但我无法克服这个问题: 有一个加载器,根据点击的按钮,我用不同的图像填充它。现在为了保持整洁,我使用了完全相同的装载机。问题是,无论我对图像做什么,加载的下一个图像总是得到上一个图像的属性。我使用了unload,加载程序在宽度和高度上返回0,下一个图像仍然是前一个图像的w/h。其他尝试是将其与父容器分离并从显示列表中取出,还使用Event.UNLOAD确保在加载新图像之前前一个图像已退出 脚本有点长,但基本

嘿,我对AS3有点陌生,但我一直在尽可能多地学习和阅读LiveDocumentation,但我无法克服这个问题:

有一个加载器,根据点击的按钮,我用不同的图像填充它。现在为了保持整洁,我使用了完全相同的装载机。问题是,无论我对图像做什么,加载的下一个图像总是得到上一个图像的属性。我使用了unload,加载程序在宽度和高度上返回0,下一个图像仍然是前一个图像的w/h。其他尝试是将其与父容器分离并从显示列表中取出,还使用Event.UNLOAD确保在加载新图像之前前一个图像已退出

脚本有点长,但基本的是

BrowserLoad.unload();
BrowserReq = new URLRequest("ImageB.jpg"); 
BrowserLoad.load(BrowserReq); 

BrowserLoad.contentLoaderInfo.addEventListener(Event.COMPLETE, Resize);

function Resize (event:Event):void {
/*
And here a big bunch of resizing and scaling of the image loaded that i need to do, is this what's provokin' the later unwanted resizeings!?
*/
}

我想这是一个普遍的问题:我怎样才能确保之前加载到加载程序中的图像不会影响下一个加载程序?(其宽度和高度为0还不够…

我一直认为AS3中存在装载机对象(事实上)是一个不幸的设计决策,装载机也是一个显示对象这一事实导致了很多混乱。这是正在发生的事情的底细

Loader对象不是您加载的资产,在本例中是位图图像,而是将您加载的资产作为子DisplayObject的容器。因此,当您将转换应用于加载程序时,例如:height或width,您不是在修改加载资源的转换,而是在修改其父容器,即加载程序实例。因此,如果您更改加载的资源,即:卸载并加载一个新的资源,这些转换仍然存在

在我自己的代码中,我从不将Loader对象用作DisplayObject,而是严格地将它们用于加载外部内容。加载资产后,您可以通过loaders的“content”属性直接获取对该资产的引用,如下所示:

myLoader.content
然后在任何需要的地方使用它,并直接将其添加到显示列表中

如果要使用加载程序进行显示,可以重置所有转换,如下所示:

myLoader.transform.matrix = new Matrix();

希望这会有所帮助,

如果需要在BrowserLoad类中将其设置为静态类,请改为这样做

public static function loadImage(url:String):void
    {
        var loader:Loader = new Loader();
        var info:LoaderInfo = loader.contentLoaderInfo;

        //add your event listeners here, just adding one for now...
        info.addEventListener(Event.COMPLETE , completeHandler );

        var request:URLRequest = new URLRequest( url  );
        loader.load( request , new LoaderContext(true) );

    }
正如Tyler Egeto所建议的,将您的转换应用于内容:

 public function completeHandler(event:Event):void
 {
     var content:DisplayObject = event.currentTarget.content;
  }

我认为这个解决方案会使它更整洁实际上,加载程序实例严格用于加载您的内容,除此之外,如果您需要在completeHandler之外操作您的内容,您仍然有一些可用的解决方案,例如将图像存储在数组或位图向量或显示对象中。这样可以避免加载程序属性和加载内容属性之间的潜在混淆。

我建议您粘贴调整大小功能的代码。+1。为了一个好的解释。虽然我不同意将加载程序作为显示对象是个坏主意。有时,它非常有用(例如,在您不想显示预加载的情况下,或者在图像未加载时不太在意的情况下;您只需对加载程序进行adChild操作,根据需要设置
x
y
,然后继续;如果load()返回DPO,这会更好,因此您可以在一行中完成此操作)。当您不允许访问内容时(如,无跨域),加载程序也会提供帮助。这本可以用不同的方法解决,但我认为很简单。