• ベストアンサー

flashアクションスクリプト LoadVarsについて

はじめまして。初めて質問させていただきます。 onloadメソッドの中でロードしたデータを変数に代入したいのですが、うまくいきません。記述は以下のとおりです。 var hen; a_lv=new LoadVars(); a_lv.onLoad=function(a){ hen=this.txt } a_lv.load("b.txt"); trace(hen); 出力パネルに”undefined”と表示されてしまいます。 どうしたらうまくいきますか? 分る方いましたら、是非教えてください。

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

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.2

#1です。 > 外部テキストファイルのロードと、 > onLoad=function が完了してから、 > 次のスクリプトに移る様にはできませんか? > よろしければ、ご返答お願いします。 次のスクリプトが短い物でしたら, 普通は#1で書いたように, a_lv.onLoad = function(a) { if (a) { // ~~~~~~~ // ここにまとめて書く // ~~~~~~~ } }; というようにまとめて書いてしまいます。 スクリプトが長かったり,上の箇所に入れると煩雑になってしまう場合は, 違う function を定義してその function を実行させれば良いと思います。 例えば次のような感じです。 ---------------------------------------- // 引数付きのユーザ定義関数 myTrace を定義 function myTrace(b) { // 引数の値を trace trace(b); } a_lv = new LoadVars(); a_lv.onLoad = function(a) { if (a) { hen = this.txt; // ユーザ定義関数 myTrace を実行 myTrace(hen); } }; a_lv.load("b.txt"); ---------------------------------------- ユーザ定義関数 function などを使うのが面倒な場合は, a_lv.onLoad = function(a) { if (a) { gotoAndStop(次のフレーム); } }; のようにして, 次のフレームに次のスクリプトを用意しても良いです。 フレームを使えるというところが Flash の便利なところです。

その他の回答 (1)

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

何のために onLoad=function を定義しているのでしょうか? そこの部分をしっかり理解&認識しましょう。 onLoad=function を定義したのは, ロードの完了を待ってから, hen という変数に LoadVars インスタンスのデータを入れるためでしょう。 書かれていらしゃるスクリプトを実行順に書きますよ。 -------------------------------------------- // あまり意味のない変数 hen の宣言 var hen;    ↓↓↓ // a_lv という LoadVarsインスタンスの作成 a_lv = new LoadVars();    ↓↓↓ // 外部テキストが読み込まれたときの動作を定義 a_lv.onLoad = function(a) { hen = this.txt; };    ↓↓↓ // 外部テキストファイル「b.txt」のロード開始 a_lv.load("b.txt");    ↓↓↓ // 変数 hen を出力 trace(hen);    ↓↓↓ // 外部テキストファイル「b.txt」のロード完了    ↓↓↓ // 上の定義に基づいて // hen に LoadVarsインスタンスの txt の値が // 変数 hen に代入される hen = this.txt; -------------------------------------------- 外部テキストのロードには時間がかかるため, そのロードを待たないと変数などに外部テキストのデータを代入することができませんよね。 だから, LoadVars.onLoad = function を定義して, ロード完了を待っているのですよ。 ご質問で書かれていらっしゃるスクリプトだと, ロード完了より前に trace(hen); が実行されるわけですからundefined が出力されます。 外部テキスト「b.txt」に, txt=abcdefg という内容のデータを用意しておいて, スクリプトを次のように書き直せば, ------------------------------ a_lv = new LoadVars(); a_lv.onLoad = function(a) { if (a) { hen = this.txt; trace(hen); } }; a_lv.load("b.txt"); ------------------------- ちゃんと abcdefg という値が出力されました。 関連したことで私が回答したものですがよろしければご参考に↓。 QNo.3231376 LoadVars http://okwave.jp/qa3231376.html

nihon2007
質問者

お礼

BlurFiltan様 フレームを切り替えるというのは、まったく気がつきませんでした。 丁寧なご回答ありがとうございました。

nihon2007
質問者

補足

丁寧なご返答、大変ありがとうございます。なんとなく分かってきました。 >>何のために onLoad=function を定義しているのでしょうか? 説明不足ですみません。 onLoad=function を使った時のスクリプトの実行順序を確認するために記述したものなので、それ自体に意味はありません。 もう少し質問させてください。 外部テキストファイルのロードと、onLoad=function が完了してから、次のスクリプトに移る様にはできませんか? よろしければ、ご返答お願いします。

関連するQ&A