Actionscript 3 Actionscript:找不到加载程序

Actionscript 3 Actionscript:找不到加载程序,actionscript-3,actionscript,flash-cs4,Actionscript 3,Actionscript,Flash Cs4,我正试图在我的舞台上加载一个图像。我使用以下代码: public function loadImg():void{ var iLoader:Loader = new Loader(); iLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressStatus); iLoader.contentLoaderInfo.addEventListener

我正试图在我的舞台上加载一个图像。我使用以下代码:

    public function loadImg():void{

        var iLoader:Loader = new Loader();
        iLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressStatus);
        iLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaderReady);

        var fileRequest:URLRequest = new URLRequest(imgPath+'testimg.JPG');
        iLoader.load(fileRequest);

    }

    public function onProgressStatus(e:ProgressEvent) {   
        trace(e.bytesLoaded, e.bytesTotal); 
    }

    public function onLoaderReady(e:Event) {     
        this.stage.addChild(iLoader); // error is here
    }
但是,在onLoaderReady中似乎找不到iLoader:

1120: Access of undefined property iLoader.
如何将对象iLoader传递到此函数?还是我做错了什么

提前感谢您的帮助!:D参见。函数内部定义的变量仅在函数内部可用,因此您只需在函数外部定义它们:

private var iLoader:Loader;

public function loadImg():void{

    iLoader = new Loader();
    //...

}

从您的代码判断,
iLoader
似乎是一个作用域为函数
loadImg
的变量。在loadImg之外,您不能使用该名称访问它

一种解决方法是将iLoader声明放在更广的范围内。在这种情况下,正如David Mear所建议的那样,这将超出所有职能范围

但是,您应该能够以更优雅的方式绕过它。AS3中的每个事件都有一个目标属性。在这种情况下,目标应该是您的加载器。因此,在
onLoaderReady
中,您应该能够执行以下操作:

 this.stage.addChild(e.target);

这可能不起作用-因为加载程序不再在作用域中,它可能会被删除。我相信它会持续足够长的时间,使这一行代码能够成功,但目前还没有任何测试方法。如果您尝试了,但失败了,我们将按照David的答案进行操作,我将删除我的。

现在我遇到另一个错误:“TypeError:error#1009:无法访问空对象引用的属性或方法。//在gallery/onLoaderReady()中未找到Stage我相信这意味着什么?为了在我的类中使用stage,我在我的类中放置了以下代码:
函数库(){this.addEventListener(Event.ADDED_To_stage,onaddedstatage);}addedstatage上的私有函数(e:Event):void{this.removeventlistener(Event.ADDED_To_stage,onaddedstatage);sayStage()}公共函数sayStage():void{trace(stage);}
哪个gallery是构造函数。你是对的,这表明找不到
stage
。可能在
gallery
添加到stage之前调用了
loadImg()
函数?构造函数(gallery)不是吗始终先调用?是的,但事件是异步的。如果执行类似于
var gallery:gallery=new gallery();gallery.loadImg();addChild(gallery)的操作
,这可能会产生此错误。您确定要先将
添加到后台吗?如果您将创建
的代码添加到问题中,我们也可以检查。我认为这是另一个问题(因为调用后台是我想的问题)。整个类可以在此处找到: