- ベストアンサー
タイマー実行ごとにtraceの出力回数が増えていく
- ActionScript3でXMLファイルをロードし、2秒間隔で配列の中身をロードしています。ロード完了後、traceで画像読み込み完了のメッセージを出力しています。しかし、タイマーを実行するごとに出力回数が増えてしまいます。
- タイマーを実行するたびに「画像読み込み完了」が増えていく理由は何でしょうか?
- ご教授いただけると助かります。初歩的な内容かもしれませんが、お願いします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
まず、解決策から説明しますが、 下記のように関数slideStartと関数dataCompleteHandlerを別に分けて書けば一度のTimerの呼び出しにつき、dataCompleteHandlerは一度しか呼び出されません。 ------------------------------------------------------ function slideStart(event:Event):void { var largeRequest:URLRequest=new URLRequest(dataArr[count]); largeLoader.load(largeRequest); largeLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, dataCompleteHandler); } function dataCompleteHandler(event:Event) { trace("画像読み込み完了"); count++; } ------------------------------------------------------ 関数内に関数を書く記述はこういったケースではあまりお勧めはしませんが、どうしてdataCompleteHandlerの呼び出しが重複されていたのか、というと... ------------------------------------------------------ largeLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, dataCompleteHandler); ------------------------------------------------------ 上記で行ったイベントリスナーの登録が消えずに残ってしまっているため、slideStart関数が2回目以降に呼び出される時は2重に追加されていきます。読み込み完了後の処理がすべて同一であれば、addEventListenerの定義は一度だけでいいので、slideStart関数の外に書くか、読み込み完了のタイミングでremoveEventListenerを使用して削除しましょう。
お礼
おはようございます。 迅速なご回答、またご丁寧にご解説いただきありがとうございます。 昨日は上記の動きが理解できずに悩んでおりましたが、お陰様で解決されました。