- ベストアンサー
外部テキストの値を取得する方法とは?
- 外部テキストnum.txtにはstr=5という記述があり、このnum.txtを取り込んで5という数値をflash側で変数aaaに代入しました。しかし、この関数内のaaaという変数を他でも利用したい場合、単純にvar menu_num:Number = aaa;と記述するとundefinedが出力されます。どうすれば5と出力させることができるか、グローバル変数などを試しましたがうまくいきません。外部テキストから数値を取り出す方法を教えてください。
- 外部テキストの値を取得する方法について質問です。外部テキストnum.txtにはstr=5という記述があり、このnum.txtを取り込んで5という数値をflash側の変数aaaに代入しました。しかし、他の場所でも変数aaaを利用したい場合、単純にvar menu_num:Number = aaa;と記述するとundefinedが出力されます。グローバル変数などを試してみましたがうまくいきません。外部テキストから数値を取得する方法を教えてください。
- 外部テキストの値を取得する方法に関して質問です。外部テキストnum.txtにはstr=5という記述があります。このnum.txtを読み込んで5という数値をflashの変数aaaに代入しました。しかし、他の場所でも変数aaaを利用したい場合、単純にvar menu_num:Number = aaa;と記述するとundefinedが出力されます。グローバル変数などを試しましたがうまくいきません。外部テキストから数値を取得する方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 >上から順番に実行される、とばかり思っていました。 上から順番に実行されますよ。 それは間違いありません。 ただ, "ロード完了" は, サーバにお伺いを立てて, ファイルがあるかないかをとりあえず探してもらって, あったならそのデータをローカルに送信してもらって, 電話回線や光やケーブルTVやそんなものを使ってデータを受け取って, 全データがとどいて "ロード完了" です。 そういう手続きやデータ送信の後に, LoadVars.onLoad が「データを受け取ったので function() を実行する!」 と動作するのです。 それだけのことです。 というか, それを監視してくれるような機能を持った便利なクラスが,LoadVarsクラスです。 外部ファイルをロードする場合, Flash は Flash だけで成り立っているわけではない。 ということを認識するのが大切です。 PHP をご使用ならなおさらです。 ファイルがあるかないかのお伺いを立てるのではなくて, サーバにデータの生成まで頼むのですから, もっと "ロード完了" は遅くなります。 そういう動向を踏まえた上での LoadVars です。 > var menu_num:Number = 5; > と宣言すれば話は単純なのですが、 > この5という数値の部分を外部テキストによって可変させる、 > という方法を考えています。 簡単にするには, 書かれていらっしゃるスクリプト, var vars = new LoadVars(); vars.load("num.txt"); …以下略… の上に stop(); をかけます。 stop(); var vars = new LoadVars(); vars.load("num.txt"); …以下略… そして, ロード完了後,次のフレームに進ませれば良いですね。 vars.onLoad = function(num){ if(num){ aaa = vars.str; msg_txt.text=aaa; gotoAndStop(次のフレーム); } } そしてその次のフレームで, var menu_num:Number = Number(vars.str); を宣言すれば, 次のフレームに行ったときには, 絶対に外部テキストはロード完了していることになりますから, 宣言が可能になります。
その他の回答 (1)
- BlurFiltan
- ベストアンサー率91% (1611/1754)
グローバル変数とかそういう問題ではないでしょう。 何のために LoadVars を使って外部テキストをロードして, 何のために onLoad ハンドラメソッド内で aaa= vars.str; をしたのか。 これがわかっていらっしゃったら,答えはすぐにわかると思います。 var menu_num:Number = aaa; trace(menu_num); が実行されたとき, aaa はまだ存在しないので, menu_num は undefined になるのです。 書かれていらっしゃるスクリプト全体が実行されるのは0.0001秒とかすごく一瞬です。 この場合の実行とは, ロードが開始されたり関数が定義されたりということです。 一方, vars.onLoad が実行されるのは,そのずっと後です。 vars.onLoad の定義自体は一瞬で終わっていますが, 外部テキストがロードされてロード完了し vars.onLoad の中身が実行されるのはそのずっと後ですと言う意味です。
お礼
ちょっとお礼の場所がずれていますが、 指示の通りにフレームを利用してうまく外部テキストを利用することができました。 本当にありがとうございました。
補足
早速のお返事ありがとうございます。 なるほど、生半可にプログラムの勉強をしていると 上から順番に実行される、とばかり思っていました。 ちなみにその外部テキストの数値はデータベースのある件数を PHPによって常に更新されるように作成したもので、 その数値をflash側で利用したいと考えたものです。 例えば、外部テキストstr=5の5という数値を ステージ上のダイナミックテキストmsg_txtに表示させたい場合は 下のように記述すればちゃんとできるのですが、 --------------------------------------------- var vars = new LoadVars(); vars.load("num.txt"); vars.onLoad = function(num){ if(num){ aaa = vars.str; msg_txt.text=aaa; } } --------------------------------------------- attachMovie()などを使って5個分のインスタンスを作成する、 つまり、その外部テキストの値によって インスタンスの数を変える仕組みを考えたいのです。 もう一度自分自身のためにも整理すると、 var menu_num:Number = 5; と宣言すれば話は単純なのですが、 この5という数値の部分を外部テキストによって可変させる、 という方法を考えています。
お礼
フラッシュにはフレームがある(当り前)という認識が全く抜けていました。 まだ実際に試してはいませんが、解決へのかなりの糸口と 私にとってアクションスクリプト勉強の新展開につながるものと思われます(大げさな表現ですが)。 flash人生の幸先も良さそうだ。 文学的な表現ですみません。 どうもありがとうございました。