
as3初心者jpncan15といいます。
xmlから配列で取得したものをfunction外で取り出したいのですがどのようにすればいいのか悩んでいます。functionを調べたり配列を調べたり頭がかなり混乱中です。
お手数ですがご教授いただけますでしょうか?
var ary:Array=new Array();
var ary_name:Array=new Array();
var loader:URLLoader = new URLLoader();
var request:URLRequest = new URLRequest("b.xml");
var xml:XML;
loader.load(request);
loader.addEventListener(Event.COMPLETE , XMLload);
function XMLload(e:Event):void
{
xml = XML(e.target.data);
num_txt.text = xml.item.length();//xml件数をテキストフィールドへ入れる
for each(var element:Object in xml.item.thumb)//配列に入れる
{ary.push(element);}
for each(var element_name:Object in xml.item.name)//配列に入れる
{ary_name.push(element_name); trace(element_name);}//出力OK
}
//function外で配列を使用したい
trace(ary[5]);
trace(ary_name[2]);
No.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を習得したいと思っています。
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript gasについて 1 2022/05/31 21:51
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- JavaScript GoogleChart 階層ごとのブロックの長さを個別に設定したい 1 2022/07/06 14:27
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- JavaScript 2段階プルダウンで1段階目の選択を終えた後に選択ボックスを見えなくしたい 2 2022/07/05 21:58
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript セレクトボックスで配列を呼び出したい。 1 2022/07/08 20:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
suzukaのスクリプトで
-
FlashLite1.1でのランダム表示...
-
画像がめくれて切り替わるよう...
-
段ボールみたいな材質でできて...
-
flashのBGMのoff/onボタン
-
ActionScriptに関しての質問
-
トグルボタンの排他制御でご教...
-
フレームページを更新すると、...
-
コマンドボタンのクリックによ...
-
メガネのフレームが半分に折れ...
-
再読み込みが可能なPDFビューワ...
-
【C#】wavファイルの複数同時再生
-
Flashで一部レイヤーだけループ...
-
ボタンをクリックする度にラン...
-
au Music PortでCDを読み込み作...
-
フレームの解除方法
-
GIF画像のフェードイン(アウト...
-
ループ処理について
-
再生中のフラッシュ・巻き戻し...
-
VBで動的に作成したパネルの上...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
WEBブラウザの重複起動の禁止
-
suzukaのスクリプトで
-
深い階層でのムービークリップ...
-
FlashLite1.1でのランダム表示...
-
Flashでのゲーム用アナログ時計...
-
教えて下さい!ActionScriptで...
-
○秒間ストップ
-
Flash lite1.0で カウントダウン
-
ActionScript3.0でエラーがでる
-
プルダウンメニューとフェード...
-
フレームの実行について
-
フラッシュ初心者ですが
-
ループ再生のflashをタイムライ...
-
Flash IE6でプログレスバーが...
-
ActionScriptで関数とは?
-
xmlから配列で取得したものを取...
-
WSHを使ってフォームに書き込み...
-
Flash Professional CS5
-
FLASH LITE1.1のテキスト入力に...
-
ボタンシェイプにリンクを張ると…
おすすめ情報