![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
こんばんは。
ActionScript3で以下の処理を作成しました。
XMLファイルをロード、中身を配列に入れ終わったらタイマーを起動し、
2秒間隔で配列の中身をロード、ロード完了後にtraceで読み込み完了のメッセージを出力
という内容です。
上記の処理を下記に記載して実行した所、2秒間隔で処理は実行されますが、
traceしている"画像読み込み完了"の出力がタイマーを実行するごとに数が増えて表示されます。
1回目のタイマーでは"画像読み込み完了"が一回だけ表示され、
2回目は"画像読み込み完了""画像読み込み完了"と二回表示、
以降回数の分だけ"画像読み込み完了"が出力されます。
なぜこのような動きになるのでしょうか?
とても初歩的な内容だと思いますが、ご教授いただけると幸いです。
↓以下ソース
// タイマー
var slideTimer:Timer=new Timer(2000,0);
// 外部XMLファイルロード
var sample_xml:XML=new XML();
var xmlLength_num:Number;
var xmlLoader:URLLoader = new URLLoader();
var dataArr:Array = new Array();
var largeLoader:Loader = new Loader();
var count:Number = 0;
xmlLoader.addEventListener(Event.COMPLETE, completeXMLHandler);
xmlLoader.load(new URLRequest("xml/file.xml"));
function completeXMLHandler(event:Event) {
var local_xml:XML = new XML(event.target.data);
sample_xml = local_xml;
xmlLength_num = sample_xml.image.length();
for(var i:Number = 0; i < xmlLength_num; i++) {
dataArr.push(sample_xml.data[i]);
}
slideTimer.start();
}
// タイマー処理
slideTimer.addEventListener(TimerEvent.TIMER, slideStart);
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++;
}
}
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を使用して削除しましょう。
おはようございます。
迅速なご回答、またご丁寧にご解説いただきありがとうございます。
昨日は上記の動きが理解できずに悩んでおりましたが、お陰様で解決されました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- その他(プログラミング・Web制作) google formsを使ったタスク依頼フォーム作成におけるご相談 1 2023/06/22 15:55
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- JavaScript gasについて 1 2022/05/31 21:51
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- WordPress(ワードプレス) ワードプレスにて .xmlファイルの使い方をご存知の方、よろしくお願いいたします。 2 2022/09/30 00:55
- Visual Basic(VBA) vbaの構文の修正相談(xmlファイルを順に開いてコピペ作業) 1 2023/04/22 01:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
スマホでサイトの画像を長押し→...
-
ダウンロードしたデジブックはa...
-
ウディタで作ったゲームを公開...
-
ActionScript 3.0についての質...
-
potplayerについて質問です
-
FLASHでのアニメーション制作で...
-
xml内の編集について
-
FLASHでゲームを作っていた人は...
-
この曲はなんでしょう?
-
laptop go2からの買い替え、lap...
-
スクリップト
-
私のコンピューター上のファイ...
-
arduino プログラムについて
-
chrome flash
-
FLASHの再生はできないのでしょ...
-
フラッシュゲームアーカイブ2
-
ウェブサイトで Flash が事実上...
-
Flashコンテンツを使ったWebサイト
-
Flash Playerのサポートが終了
-
Form内のselectを連動させるに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FLASHでゲームを作っていた人は...
-
potplayerについて質問です
-
uwscでExcelに自動記入
-
flash (.swf) を編集したい
-
スマホでサイトの画像を長押し→...
-
ウディタで作ったゲームを公開...
-
ダウンロードしたデジブックはa...
-
ゲオでカードを作るのは何歳か...
-
FLASH MX で作成した、flashやA...
-
arduino プログラムについて
-
VBAのコンボボックスの年月表示...
-
Flashは2020年にサポートが終了...
-
ボカロ動画はFlash?HTML5?
-
モーショントゥィーンに関する...
-
AS3 MC内ボタンクリックでシー...
-
画像表示をアルファでフェード...
-
フラッシュの画像を合わせるパ...
-
私のコンピューター上のファイ...
-
ウインドウズ10を使っています...
-
バナー広告の事に質問です! 広...
おすすめ情報