actionscript-3 - 如何在 AS3 中引用动态实例化对象? (在舞台上添加了 Moviclip)

标签 actionscript-3 dynamic object reference instantiation

自从我一年前开始使用 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/

相关文章:

java - 如何将 ActionScript 3 客户端连接到 Java 服务器?

java - 是否可以做一个动态 LLVM 汇编器(来自 Java 等高级语言)?

javascript - 在已存在的对象内创建对象数组

python - 总结类实例

flash - AS3中匿名函数有什么用?

actionscript-3 - 冲突范围 : Global Functions and Class Methods of the Same Name

apache-flex - AS3 : How to convert ascii code to character actionscript

c - C中的动态数组push()导致Valgrind错误

android - 动态设置布局位置

java - 具有相同数据的两个对象不相同?