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从未创建过自定义类,也不知道该到哪里去