加载器中图像的继承属性

时间:2010-08-17 02:03:56

标签: flash actionscript-3 actionscript

嘿,我是AS3的新手,但我一直在努力学习和阅读LiveDocumentation,但我无法解决这个问题:

根据点击的按钮,有一个Loader,我正在填充不同的图像。现在为了保持整洁,我正在使用完全相同的装载机。问题在于,无论我对图像做什么,下一个加载的图像总是得到前一个图像的属性。我已经使用了卸载并且Loader在宽度和高度上返回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还不够......)

2 个答案:

答案 0 :(得分:2)

我一直觉得AS3中存在Loader对象(因为它)是一个不幸的设计决定,加载器也是一个显示对象的事实导致了很多混乱。以下是最新情况。

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

作为我自己的代码中的规则,我从不使用Loader对象作为DisplayObjects,并严格使用它们来加载外部内容。加载资产后,您可以直接通过加载器的内容属性来引用它:

myLoader.content

然后在任何地方使用它,并将其直接添加到显示列表中。

如果要使用Loader进行显示,可以重置所有转换:

myLoader.transform.matrix = new Matrix();

希望有帮助,

答案 1 :(得分:0)

如果您需要将其设为静态类,请在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之外操作你的内容,你仍然有一些可用的解决方案,例如商店您在Array或Bitmaps或DisplayObjects矢量中的图像。这样可以避免Loader属性与加载内容属性之间的混淆。