• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:タイマー実行ごとにtraceの出力回数が増えていく)

タイマー実行ごとにtraceの出力回数が増えていく

このQ&Aのポイント
  • ActionScript3でXMLファイルをロードし、2秒間隔で配列の中身をロードしています。ロード完了後、traceで画像読み込み完了のメッセージを出力しています。しかし、タイマーを実行するごとに出力回数が増えてしまいます。
  • タイマーを実行するたびに「画像読み込み完了」が増えていく理由は何でしょうか?
  • ご教授いただけると助かります。初歩的な内容かもしれませんが、お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • cspl
  • ベストアンサー率83% (55/66)
回答No.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を使用して削除しましょう。

John12345
質問者

お礼

おはようございます。 迅速なご回答、またご丁寧にご解説いただきありがとうございます。 昨日は上記の動きが理解できずに悩んでおりましたが、お陰様で解決されました。

関連するQ&A