自从我一年前开始使用 AS3 以来,这个问题就一直困扰着我。
示例。我创建了一个扩展影片剪辑的类,并将其称为“LoaderBar
”,它只是一些显示“正在加载”的文本,在其下方是另一个影片剪辑,它是一个普通的矩形,我称之为“lBar
"
当我调用函数来加载图像时,我将加载器添加到舞台上......
function imageLoader(URL:String):void
{
var loader:Loader = new Loader(new URLRequest(URL));
loader.contentLoaderInfo.addEventListner(ProgressEvent.PROGRESS, progressHandler);
var loadBar:Loader Bar = new LoaderBar();
addChild(loadBar);
}
function progressHandler(e:Event):void
{
var pcent:Number = e.getBytesLoaded / e.getBytesTotal;
// HERE IS WHERE I'D LIKE TO MAKE DIRECT REFERENCE TO MY LOADBAR;
loadBar.lBar.width = pcent*100;
}
本质上,我只是想告诉 loadBar 影片剪辑中的 lBar
为百分比 *100 的宽度。 (这样当加载剪辑时,加载栏的宽度为 100 像素)。
我的问题是这样的。当我将 loadBar 添加到函数内部的阶段时,我无法在另一个函数内部引用它,除非进行一些黑客操作,在我的函数外部创建一个全局变量,例如...
var loadBarClip:MovieClip;
并在加载函数内将loadBar
分配给loadBarclip
loadBarClip = loadBar.
我觉得这是多余的。有谁知道如何在不创建引用变量的情况下访问我的 loadBar
?
最佳答案
如果只是针对该处理程序,您可以使该处理程序匿名并保留在当前范围内。
var loadBar = new LoaderBar();
var loader:Loader = new Loader(new URLRequest(URL));
loader.contentLoaderInfo.addEventListner(
ProgressEvent.PROGRESS, function (e:Event):void {
var pcent:Number = e.getBytesLoaded / e.getBytesTotal;
loadBar.lBar.width = pcent*100; //Here you are making a direct reference.
}
);
如果你真的想封装你的范围,你可以使用闭包:
returnFromEncapulatingClosure = function(){
var loadBar = new LoaderBar();
var loader:Loader = new Loader(new URLRequest(URL));
return {
loadBar: loadBar,
loader: loader
};
}();
这允许您将一些引用捆绑在一起,这样它们就不会破坏代码的其他部分,并且您可以通过以下方式引用它:
returnFromEncapulatingClosure.loader.contentLoaderInfo.addEventListner(ProgressEvent.PROGRESS, progressHandler);
function progressHandler(e:Event):void {
var pcent:Number = e.getBytesLoaded / e.getBytesTotal;
returnFromEncapulatingClosure.loadBar.lBar.width = pcent*100;
}
作为脚注,当您扩展影片剪辑时,请添加一个设置 lBar.width 的方法。像这样的东西:
loadbar.setLBarWidth = function (w:number) {
this.lBar.width = w;
}
关于actionscript-3 - 如何在 AS3 中引用动态实例化对象? (在舞台上添加了 Moviclip),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1515353/