0

我正在使用 Loader 从 ByteArray 中获取图像数据。问题是,一旦将图像数据传递给完整的处理程序,我就需要使用名称(事先已知)来存储该图像数据。由于操作是异步的,我无法确定多个图像的哪个图像将首先完成加载,所以似乎我需要以某种方式传递信息......我似乎找不到任何通过任何加载器的属性依稀有用的信息。

关于我如何做到这一点的任何建议?

4

4 回答 4

1

你不能只使用该Loader.name物业吗?

var ldr:Loader = new Loader();
ldr.name = 'name_of_the_loader';
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderListener);
ldr.loadBytes(aByteArray);

...

function loaderListener(event:Event):void {
  trace('name of the completed loader is '+LoaderInfo(event.target).loader.name);
}

你能提供一些代码吗?

于 2010-01-12T07:33:37.283 回答
0
private var loaders:Array = [];
private var names:Array = [];

    //inside loadImages method
    for(i = 0; i < len; i++)
    {
        var ldr:Loader = new Loader();
        //add listeners and call load
        loaders.push(ldr)
        names.push(name-of-ith-image);
    }

private function onLoadComplete(e:Event):void
{
    var index:Number = loaders.indexOf(LoaderInfo(e.target).loader);
    var requiredName:String = names[index];
    trace(requiredName);
}
于 2010-01-12T07:44:48.917 回答
0

第一个解决方案是使用 Dictionary 将 Loader 实例映射到名称。像这样:

private var names : Dictionary = new Dictionary();
...

var ldr : Loader = new Loader();
names [ ldr ] = 'someName';
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderListener);
ldr.loadBytes(aByteArray);

...

function loaderListener(event:Event):void {
  trace('name of the completed loader is '+ names[ event.target ] );
}

另一种解决方案是使用仿函数,如下所示:

var ldr : Loader = new Loader();
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, createListener( 'someName' ) );
ldr.loadBytes(aByteArray);

...

function createListener( imgName : String ) : Function {
    return function ( event : Event ) : void {
      trace('name of the completed loader is '+ imgName );
    }
}
于 2010-01-12T13:07:44.843 回答
-2

loader.contentLoaderInfo.url将具有加载图像的 URL(例如http://sometURL/image1.jpg)。

于 2010-01-12T07:38:05.577 回答