私はas3を学んでおり、イベントを理解するのが難しいです。イベントを理解するのに少し役立つ(noob question)
私は後でイメージをロードするためにアクセスする必要がある配列の中にオプションをロードしようとしています。今
..
private function init(e:Event = null):void {
removeEventListener(Event.ADDED_TO_STAGE, init);
myLoader.load(new URLRequest("slides.xml"));
myLoader.addEventListener(Event.COMPLETE, processXMLSlides);
...
}
private function processXMLSlides(e:Event):void {
removeEventListener(Event.COMPLETE, processXMLSlides);
myXML = new XML(e.target.data);
myXML.ignoreWhite=true;
for (var i:int = 0; i < myXML.IMAGE.length(); i++) {
imagesURLs.push(myXML.IMAGE[i]);
//trace(myXML.IMAGE[i]);
}
//Start the main routine.
loadImages();
writeImage(imageCurrent);
}
loadImagesは()ステージにイメージを書き込むそれらはURLRequestsとして別のアレイの内側のアレイimagesURLsと負荷がかかり、その後writeImage()。
今これはこれです。ここで私はloadImagesを移動した場合()とwriteImage()関数:
private function init(e:Event = null):void {
removeEventListener(Event.ADDED_TO_STAGE, init);
myLoader.load(new URLRequest("slides.xml"));
myLoader.addEventListener(Event.COMPLETE, processXMLSlides);
//Start the main routine.
loadImages();
writeImage(imageCurrent);
...
}
それは、配列は、XMLから移入される前にloadImagesが呼び出されるので、動作しません。では、as3に、processXMLSlidesが処理を完了するのを待つよう、どうすればいいのですか? 別のイベントが必要ですか?これは愚かですか(私がやっていることをする良い方法がありますか?)
おかげ
注:イベントリスナーをディスパッチャから削除する必要があります。たとえば、myLoader.removeEventListener(Event.COMPLETE、processXMLSlides); evt.target.removeEventListener ...またはevt.currentTarget.removeEventListener ... – TheDarkIn1978
@ TheDarkIn1978なぜそれを言うのですか? eventListenersを削除する必要があるのは、理由がある場合のみであり、必ずしもそうではありません。 –
申し訳ありませんが、わかりませんでした。上記のコードは、myLoaderがイベントリスナーを追加してイベントをディスパッチしているため、誤っていると述べましたが、myLoaderの親が所有していないイベントリスナーを削除しようとしています。また、イベントリスナーは、使用されていない場合は削除する必要があります。そうしないと、ガベージコレクションに関する問題が発生します。 – TheDarkIn1978