0

ステージに画像を読み込もうとしています。私は次のコードを使用します:

    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
    }

ただし、iLoaderがonLoaderReadyに見つからないようです。

1120: Access of undefined property iLoader.

オブジェクトiLoaderをこの関数に渡すにはどうすればよいですか?それとも私は何か間違ったことをしていますか?

よろしくお願いします!:D

4

2 に答える 2

0

関数スコープのこのページを参照してください。関数内で定義された変数は、関数内でのみ使用できるため、関数外で定義する必要があります。

private var iLoader:Loader;

public function loadImg():void{

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

}
于 2013-03-20T18:15:30.187 に答える
0

iLoaderコードから判断すると、関数のスコープが変数であるように見えますloadImg。loadImg以外ではその名前でアクセスすることはできません。

回避策の1つは、iLoaderの宣言をより広い範囲に置くことです。この場合、David Mearが示唆しているように、それはすべての機能の範囲外になります。

ただし、より優雅な方法でそれを回避できるはずです。AS3のすべてのイベントには、ターゲットプロパティがあります。この場合、ターゲットはローダーである必要があります。したがって、内部onLoaderReadyでは、次のことができるはずです。

 this.stage.addChild(e.target);

これが機能しない可能性があります。ローダーはスコープ内にないため、削除される可能性があります。このコード行が成功するのに十分な時間は続くと思いますが、現時点ではテストする方法がありません。試して失敗した場合は、Davidの回答をそのまま使用し、私のものを削除します。

于 2013-03-20T18:23:55.997 に答える