- ベストアンサー
xmlから配列で取得したものを取り出す方法
- as3初心者jpncan15といいます。
- xmlから配列で取得したデータをfunction外で使用する方法について悩んでいます。
- aryとary_nameという配列にデータを格納していますが、functionの外でこの配列を使用する方法を教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
「言語(ActionScript)」だけを考えて解決しようとしていらっしゃいませんか? 「言語」など自体を考えても答えは出ませんよ。 問題は言語ではなく 「サーバ(またはローカルPC)のハードディスクからXMLをロードするのには時間がかかる」 「XMLをロードしてからでないとそれを読んだり操作することはできない」 というたったそれだけの(超当たり前な)ことだけですから。 音波も届いてからじゃないと耳で聞くことはできませんよね? 光も届いてからじゃないと目で見ることはできませんよね? 届いた情報について考えるのはその後ですよね? それとまったく同じことです。 その "単純で当たり前なこと" を理解しておけば いくつかの対処法は思いつくはずです。 //------------------------------------ ~~云々(略)~~ function XMLload(e:Event):void { ~~云々(略)~~ //別の関数 traceArr を実行 traceArr(); } //別の関数 traceArr の定義 function traceArr():void { trace(ary[5]); trace(ary_name[2]); } //------------------------------------ ↑function XMLload から見れば その関数外で取り出していることになりますよね? または メインのタイムラインを2フレームなど複数フレームにして 書かれていらっしゃるスクリプトを 例えばメインのタイムラインのフレーム1などに書いておいて stop(); をかけておきます。 そして xmlファイル のロードが完了してから フレーム2 に進めてます↓。 //------------------------------------ ~~云々(略)~~ //このフレームで再生停止 stop(); function XMLload(e:Event):void { ~~云々(略)~~ //次のフレームで停止 nextFrame(); } //------------------------------------ そしてフレーム2には //------------------------------------ trace(ary[5]); trace(ary_name[2]); //------------------------------------ と書いても良いですよね? 完璧に関数外です。 その他 あるムービークリップを作成しておいて xml のロードが完了してから, ムービークリップ内のフレームの再生を開始させて そのムービークリップ内で trace(MovieClip(root).ary[5]); trace(MovieClip(root).ary_name[2]); を実行させても良いでしょう。 とにかく最初に書いた 「サーバ(またはローカルPC)のハードディスクからXMLをロードするのには時間がかかる」 「XMLをロードしてからでないとそれを読んだり操作することはできない」 ということをとりあえずはしっかり認識して 「Event.COMPLETE という便利なものを使うことによってXMLのロード完了時に指定した関数を実行できる」 ということを理解すれば 後はどうにでもなるという感じだと思います。 昔は Event.COMPLETE みたいな便利物はなかったので 外部データのロードなどをする場合, 例えば 「フレーム1 で外部データのロード命令を出して フレーム2 と フレーム3 をループ再生させることによって ロードされたデータに最終データ(フッターデータ や 総文字数 などから割りだす)が入っているかどうかを確かめて 最終データが届いていたなら フレーム4 に進めてデータ処理をする」 みたいなことをしていたのですよ。 ロード待ち処理装置の自作です。 全部関数外です。 それに比べれば全自動でかなり楽なものです。 (全自動で楽になった分,単純当たり前な理屈をあまり考える必要もなくなったので,逆にわかりにくくなったかもしれませんね。)
お礼
BlurFiltanさん ありがとうございます。 なかなかas2からas3の移行は難しく感じています。。 なるほど!! XMLをまだ読込終わっていないのに出来ませんよね! と、思いつつも具体的にはどのように書いたらいいのかご教授いただいたいくつかを自分なりに考えてみたのですがキーフレームを2つにすれば分かりやすいですね! as2の「now loading」を思い出しました。 まだまだ勉強が必要ですが、頑張ってas3を習得したいと思っています。 本当にありがとうございました。