Cho*_*zen 10 javascript arrays loader actionscript-3 loaderinfo
我正在加载许多图片,并且正在使用数组来执行此操作.
loader[i].load(new URLRequest(picture[i]));
Run Code Online (Sandbox Code Playgroud)
我的事件监听器功能启用如下:
loader[i].contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
Run Code Online (Sandbox Code Playgroud)
我的onComplete事件处理程序显示了这个:
trace(e.target); //OUTPUT: [object LoaderInfo]
Run Code Online (Sandbox Code Playgroud)
我在LoaderInfo中查找了可能识别哪个加载器启动了监听器("i"的值)的属性,这样我就可以专门用于每个加载器,如下所示:
bitmapDataArr[i] = e.target.content.bitmapData;
bmVisArr[i] = new Bitmap(bitmapDataArr[i]);
Run Code Online (Sandbox Code Playgroud)
但无法确定哪个"i"启动了侦听器的特定实例.
有任何想法吗?我试着给LoaderInfo一个名字无济于事.我仍然无法提取讨厌的小识别号码.
EDIT显示加载器和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]);
}
Run Code Online (Sandbox Code Playgroud)
你需要以某种方式为i价值带来onComplete功能.例如,在this上下文中或通过参数.
PS:使用弱参考更容易.字典而不是删除属性,虽然我不太了解AS3.
这是一个示例,还显示了如何删除事件侦听器(包括其回调函数):
/* An object containing callback
* functions used along with event listeners.
*/
const callbacks: Object = {};
/* This function will re-declare and hoist i
* in itself. */
private function loop(i: uint): void {
loader[i] = new Loader;
const wrapped =
callbacks[i] = function wrapper(...args) {
// Pass all arguments (respectively event and i)
onComplete.apply(null, args);
// Function#apply(thisContext, arguments)
// Rest exp. isn't implemented yet, else we could just do:
// onComplete(...args);
};
loader[i].contentLoaderInfo
.addEventListener(Event.COMPLETE, wrapped, false,
0, true);
loader[i].load(new URLRequest(letter[i]));
};
for (var i: uint = 0; i < 10; ++i) loop(i);
private function onComplete(e: Event, i: uint): void {
const loaderInfo: LoaderInfo = e.target as LoaderInfo;
bitmapDataArr[i] = e.target
.content.bitmapData;
bmVisArr[i] = new Bitmap(bitmapDataArr[i]);
loader[i].contentLoaderInfo
.removeEventListener(
Event.COMPLETE, callbacks[i]
);
// Deletes the property that stores
// the function inside callbacks
delete callbacks[i];
}
Run Code Online (Sandbox Code Playgroud)