- ベストアンサー
LoadVarsで外部テキストファイルを読み込み数値化するには?
- FlashのタイムラインでLoadVarsを使用して外部テキストファイルを読み込み、数値化する方法について質問です。
- data.txtというファイルにはテキストデータが含まれており、それを数値として使用したいのですが、常に0が表示されてしまいます。
- 外部データをテキストから数値に変換するために、NumberやparseIntを使用しましたが、うまくいきません。何が問題なのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> トレースで表示されるt5は、常に0が表示されてしまっています。 それは, 根本的に LoadVars を使う意味と, プログラム実行のタイミングを理解されていないからです。 外部テキストを "読み込んでから" でないと, そのデータを t1~6 などに代入したり, その他色々なことに使えないから, LoadVars.onload で読み込み完了を待っているわけですよね。 書かれていらっしゃるスクリプトの流れと, 実際にプログラムが動作する流れを図示します。 //LoadVarsインスタンスの作成 var Mynum = new LoadVars(); ↓ // 外部テキストのロード(命令だけ) Mynum.load("data.txt"); ↓ // ロードが完了したときの動作定義 Mynum.onload = function(success) { … } ↓ // t5 の出力 trace(Number(t5)) ↓ ずっと後 ↓ 外部テキストのロードが完了する ↓ Mynum.onload = function(success) { … } の { … } が実行される したがって, ロード完了前に trace(Number(t5)) を実行していることになります。 ロード完了前に trace(Number(t5)) を実行しても, 外部テキストはロードされていないので,t5には外部テキストのデータは入りません。
その他の回答 (1)
- BlurFiltan
- ベストアンサー率91% (1611/1754)
#1です。 > ロードが完了、というのは、1フレーム目が終わっても > (次の2フレーム目に行っても) > 完了した事にはならないのでしょうか? 知りません。 つまり, 誰もそんなことはわかりません(神でもわかりません)。 外部テキストロード完了に, 0.00001 秒かかるかもしれませんし,百万年かかるかもしれません。 (実際は 0.001秒~数十秒くらいだとは思いますが。) とにかくそのようなことは, 外部テキストのファイル容量や, 回線の混み具合や, 電話回線か光ケーブルかや, サーバの調子や,などなど.... によって変わるので誰もわかりません。 最初に stop(); をかけてから 外部テキスト を ロード して, Mynum.onload = function(success) { … }; の { … } 内で, gptoAndPlay(2); や gotoAndStop(2); などをすれば良いのではないでしょうか。 そういうことをするために, LaodVars.onload イベントハンドラメソッドがあるのです。 ですから, 最初(#1の最初)に書きましたように, 根本的に "LoadVars を使う意味" と, プログラム実行のタイミングを理解しましょう。 つまり, "なぜそれをしているのか" 意味を理解したうえでスクリプトを使うようにしましょうということです。
お礼
丁寧にご回答ありがとうございます。 了解です。 初心者の質問でちょっと何だかな・・・という所あったかと思いますが、とても助かりました。 こういう場所があるのは良いですね。 改めて本当にありがとうございました。
お礼
素早いご丁寧なお返事ありがとうございます。 なるほど。基本的な事を理解していなくてすみません・・・。 コードを下記の通りにしましたら、なんとか数値が入りました。 System.useCodepage = true; var Mynum = new LoadVars(); Mynum.load("data.txt"); Mynum.onload = function(success) { if (success) { t1= Mynum.a; t2= Mynum.b; t3= Mynum.c; t4= Mynum.d; t5= Mynum.e; t6= Mynum.f; trace ("せいこう"); trace (Number(t5)); } }; stop(); さらに基本的な事なのでご質問大変心苦しいのですが、 上記の trace (Number(t5));の行を、 2フレーム目を作ってそこにスクリプトを書いても うまく数値が入りませんでした。 ロードが完了、というのは、1フレーム目が終わっても (次の2フレーム目に行っても) 完了した事にはならないのでしょうか? 取り急ぎ大変ありがとうございました。