Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AS3:如何在事件侦听器函数中从LoaderInfo获取动态加载程序URL?_Javascript_Arrays_Actionscript 3_Loader_Loaderinfo - Fatal编程技术网

Javascript AS3:如何在事件侦听器函数中从LoaderInfo获取动态加载程序URL?

Javascript AS3:如何在事件侦听器函数中从LoaderInfo获取动态加载程序URL?,javascript,arrays,actionscript-3,loader,loaderinfo,Javascript,Arrays,Actionscript 3,Loader,Loaderinfo,我正在加载许多图片,并且正在使用一个数组来执行此操作 loader[i].load(new URLRequest(picture[i])); 我的事件侦听器功能的启用方式如下: loader[i].contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete); 我的onComplete事件处理程序显示: trace(e.target); //OUTPUT: [object LoaderInfo] 我在LoaderInfo

我正在加载许多图片,并且正在使用一个数组来执行此操作

loader[i].load(new URLRequest(picture[i]));
我的事件侦听器功能的启用方式如下:

loader[i].contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);   
我的onComplete事件处理程序显示:

trace(e.target); //OUTPUT: [object LoaderInfo]
我在LoaderInfo中查找了一些属性,这些属性可能会识别是哪个loader启动了侦听器(“I”)的值,这样我就可以具体地对每一个进行处理,如下所示:

bitmapDataArr[i] = e.target.content.bitmapData;
bmVisArr[i] = new Bitmap(bitmapDataArr[i]);
但无法确定哪个“i”启动了侦听器的特定实例

有什么想法吗?我试着给LoaderInfo起个名字,但没有用。我还是提取不出那个讨厌的识别号码

编辑显示装载机循环和onComplete功能:

for (i = 0; i < 10; i++) {
    loader[i] = new Loader();
    loader[i].contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete, false, 0, true);           
    loader[i].load(new URLRequest(letter[i]));
}

private function onComplete(e:Event):void {
    trace("e.target",e.target); //OUTPUT: e.target    [object LoaderInfo]
    var LI:LoaderInfo = e.target as LoaderInfo;
    var eNum:int = (????);
    bitmapDataArr[eNum] = e.target.content.bitmapData;
    bmVisArr[eNum] = new Bitmap(bitmapDataArr[eNum]);
}
(i=0;i<10;i++)的
{
加载器[i]=新加载器();
加载器[i].contentLoaderInfo.addEventListener(Event.COMPLETE、onComplete、false、0、true);
loader[i].load(新的URL请求(字母[i]);
}
完成的私有函数(e:事件):无效{
跟踪(“e.target”,e.target);//输出:e.target[object LoaderInfo]
变量LI:LoaderInfo=e.target作为LoaderInfo;
变量枚举:int=(?);
bitmapDataArr[eNum]=e.target.content.bitmapData;
bmVisArr[eNum]=新位图(bitmapDataArr[eNum]);
}

您需要将
i
值带到
onComplete
函数中。例如,在
这个
上下文中或通过一个参数

注意:使用弱引用字典比删除属性更容易,尽管我对AS3不太了解

下面的示例还显示了如何删除事件侦听器(包括其回调函数):

/*包含回调的对象
*与事件侦听器一起使用的函数。
*/
常量回调:对象={};
/*此函数将重新声明并提升i
*就其本身而言*/
专用函数循环(i:uint):无效{
加载器[i]=新加载器;
常数包裹=
回调[i]=函数包装器(…参数){
//传递所有参数(分别为事件和i)
onComplete.apply(null,args);
//函数#应用(此上下文、参数)
//Rest exp.尚未实现,否则我们可以执行以下操作:
//未完成(…args);
};
加载器[i].contentLoaderInfo
.addEventListener(事件完成、包装、错误、,
0,对);
loader[i].load(新的URL请求(字母[i]);
};
对于(var i:uint=0;i<10;++i)循环(i);
私有函数onComplete(e:Event,i:uint):void{
常量loaderInfo:loaderInfo=e.target作为loaderInfo;
bitmapDataArr[i]=e.target
.content.bitmapData;
bmVisArr[i]=新位图(bitmapDataArr[i]);
加载器[i].contentLoaderInfo
.removeEventListener(
Event.COMPLETE,回调[i]
);
//删除存储的属性
//回调中的函数
删除回调[i];
}

自从发布这个问题以来,我一直在利用下面的课程。它接收整数(要加载的图片数),并允许公众访问数组“ShapeArr”中的精灵数组

每个精灵的名称属性都是从其URL名称派生的。(名称:“pic1”来自加载的url“assets/pic1.png”)

我在内联函数的整个概念/实现方面遇到了问题,一直在使用这种方法

package {
import flash.display.BitmapData;
import flash.display.Bitmap;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.display.Sprite;
import flash.events.Event;

public class MultipleImageLoader extends Sprite {
    {private var pic:Array = [
        "assets/pic1.png",  "assets/pic2.png",  "assets/pic3.png",  "assets/pic4.png",
    ]}

    private var loader:Array = [];

    public var ShapeArr:Array = [];
    public var bitmapDataArr:Array = [];
    public var bmVisArr:Array = [];     
    private var shapeText:Array = [];       
    private var picArray:Array = [];

    private var count:int = 0;
    private var loaderCounter:int = 0;
    private var numPicsToLoad:int;
    private var a:String;
    public var loaded:Boolean = false;

    public function MultipleImageLoader(numPics:int):void {
        numPicsToLoad = numPics;
        loaded = false;

        init();
    }

    private function init(e:Event = null):void {
        if (hasEventListener(Event.ADDED_TO_STAGE)) {
            removeEventListener(Event.ADDED_TO_STAGE, init);
        }
        picArray = new Array;
        for (var i:int = 0; i < numPicsToLoad; i++) {
            picArray.push(i);
        }
        initiateLoaders();
    }

    private function initiateLoaders():void{
        loader[loaderCounter] = new Loader;
        loader[loaderCounter].contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete, false, 0, true);

        a = pic[picArray[loaderCounter]];
        //trace("shapecolor load:", a);
        shapeText[loaderCounter] = (a.substr(16, a.length - 20));
        loader[loaderCounter].load(new URLRequest(a ) );
    }

    private function onComplete(e:Event):void {
        //trace("sssssssssssssssssssssssssshapecolor");
        bitmapDataArr[loaderCounter] = e.target.content.bitmapData;
        bmVisArr[loaderCounter] = new Bitmap(bitmapDataArr[loaderCounter]);
        bmVisArr[loaderCounter].scaleX = .1;
        bmVisArr[loaderCounter].scaleY = .1;
        bmVisArr[loaderCounter].x =-bmVisArr[loaderCounter].width / 2;
        bmVisArr[loaderCounter].y =-bmVisArr[loaderCounter].height / 2;

        ShapeArr[loaderCounter] = new Sprite();
        ShapeArr[loaderCounter].name = a.substr(7,4);

        trace("Name",loaderCounter,ShapeArr[loaderCounter].name );

        ShapeArr[loaderCounter].addChild(bmVisArr[loaderCounter]);
        loader[loaderCounter].contentLoaderInfo.removeEventListener(Event.COMPLETE, onComplete);
        if (loaderCounter <numPicsToLoad-1) {
            loaderCounter += 1;
            initiateLoaders();
        }
        //trace("gonna count",count);
        counting();
        count += 1;
    }

    private function counting():void {
        trace("tile count", count,numPicsToLoad);
        if (count < numPicsToLoad-1) {
            return;
        }
        else{
            removeEventListener(Event.ENTER_FRAME, counting);
            loaded = true;
            count = 0;
            trace("All Images LOADED");
        }
    }   
}//end  Class
}//end Package
包{
导入flash.display.BitmapData;
导入flash.display.Bitmap;
导入flash.display.Loader;
导入flash.net.URLRequest;
导入flash.display.Sprite;
导入flash.events.Event;
公共类MultipleImageLoader扩展了Sprite{
{私有变量pic:Array=[
“assets/pic1.png”、“assets/pic2.png”、“assets/pic3.png”、“assets/pic4.png”,
]}
私有变量加载器:数组=[];
公共变量ShapeArr:Array=[];
公共变量bitmapDataArr:Array=[];
公共变量bmVisArr:Array=[];
私有变量shapeText:Array=[];
私有变量picArray:Array=[];
私有变量计数:int=0;
专用var loaderCounter:int=0;
私有变量numpicstolad:int;
私有变量a:字符串;
加载的公共变量:Boolean=false;
公共函数MultipleImageLoader(numPics:int):void{
numPicsToLoad=numPics;
加载=错误;
init();
}
私有函数init(e:Event=null):void{
if(hasEventListener(将Event.ADDED_添加到_阶段)){
removeEventListener(Event.ADDED_TO_STAGE,init);
}
picArray=新阵列;
对于(变量i:int=0;i如果(loaderCounter)您考虑过基于
URLLoader
创建自定义类并将信息存储在那里吗?@Pethrehorovsky从未创建过自定义类,也不知道该到哪里去