• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:FLASH ダイナミックテキスト 外部ファイル)

FLASH ダイナミックテキスト 外部ファイル

このQ&Aのポイント
  • FLASHで外部ファイルを読み込む方法について説明します。
  • 外部ファイルに書き込まれている値をダイナミックテキストで表示させることが目標です。
  • 値が表示されない問題についても触れます。

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

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

回答がすっかり遅くなってしましました。 ご質問は簡単なようで簡単ではなく,一筋縄ではうまく行きません。 最近始められた方で方向性が合っていれば簡単な話なのですが, 書かれていらっしゃるスクリプトや内容の目指す方向性が古いです。 この辺の大改良が必要であったことと, 私の回答を投稿する時間があまりとれないのが遅くなった原因です。 > バージョンは6です。 これは Flash MX をご使用されているということですよね。 多数イケてない部分がありますよ。 問題点を次の 3点+α にまとめてみました。 1 階層が違う 階層を図示すると次のようになっているということです。  _root(_lebel0)    └ ムービークリップ - テキスト(変数名:no1) 変数 a はムービークリップの中にロードされるのではなくて, _root(_lebel0)にロードされるのです。 したがって,参照すべき a は _root の a です。   ↓ onClipEvent (load) { no1 = _root.a + "号室"; } しかし,ここを変更しただけではうまく行きません。 2 onClipEvent (load) {} はテキストのロード前に実行される テキストフィールド入りムービークリップが フレーム1 で登場するとします。 また, loadVariablesNum("mNO.txt", 0); も同じ フレーム である フレーム1 に書いてあるとします。 フレーム1 が表示されるのとほぼ同時にムービークリップは表示されます。 このときに onClipEvent (load) {} が実行されます。 一方, 外部テキストは フレーム1 でロード命令を受けて, それからロードが開始されて,しばらく経ってロードが完了します。 ロードが完了する前に onClipEvent (load) {} で _root.a を呼びだしても, その _root.a には何の値も入っていません。 loadVariables を使っても工夫をこらすと書かれていらっしゃるようなことはできなくもないですが, それは面倒なので,普通通り LoadVarsオブジェクト のメソッドを使う方が良いと思います。 3 テキストフィールドに変数名を付けることは推奨されていない。 「テキストフィールドのインスタンス名と変数名について」 http://livedocs.adobe.com/flash/9.0_jp/main/00000881.html > …変数に値を割り当てることができます。 > これは、 > 旧バージョンの Flash Player(Flash Player 4 など) 用の > アプリケーションを作成するときに使用する可能性のある > 非推奨の機能です。 > それよりも新しいプレーヤーを対象にするときは、 > インスタンス名と ActionScript を使用して、 > テキストフィールドのテキストをターゲットにする必要があります。 ※ あと loadVariablesNum などで   _livel0 などのレベルに何かを読み込んだり   表示させたりする古い方法は   早く捨て去った方が良いと思います。   ActionScript3では レベル という概念が   無くなりますし,   それ以前にレベルなんてものは,   Flash MX以上では普通使いません。 ======================================= 以上のことより, ちゃんと修正するには,スクリプトのみならず全面的な大幅変更が必要です。 まず, ムービークリップ内のテキストフィールドに付けてある変数名を取ります。 そしてインスタンス名を付けますが, 「a」というインスタンス名を付けたとしておきます。 そしてムービークリップ自体にもインスタンス名を付けます。 「my_mc」というインスタンス名を付けたとしておきます。 そして,その「my_mc」が存在する_rootのフレームに(フレーム1ならフレーム1に) 次のようなスクリプトを書きます。 ---------------------------------- // my_lv という LoadVars インスタンスを作成 my_lv = new LoadVars(); // 外部テキストのロード処理が完了したとき my_lv.onLoad = function(OK) { // ロードに成功したら if (OK) { // my_mc の a の text プロパティに この a を代入 _root.my_mc.a.text = this.a; } }; // 外部テキストのロード my_lv.load("mNO.txt"); ---------------------------------- 上のスクリプトを使う場合, ムービークリップにはスクリプトは不要です。 onClipEvent (load) { no1 = _root.a + "号室"; } も消してください。 LoadVarsオブジェクトのインスタンスは, 外部テキストデータを受け取る入れ物になると同時に, 「ロードが開始された」 「ロード中」 「ロード完了」 などというイベントを通知する機能を持っています。 この機能によって, テキストロード監視用ムービークリップをわざわざ手動で作成して, そのフレームを2フレーム以上にして, 最終データがロードされるまでムービークリップ内のフレームをループ再生し続けるという, 「Flash 4」 的なやり方をしたり, または, テキストロード専用ムービークリップをわざわざ手動で作成して, onClipEvent(data){} でテキストがロードされたかどうかを取得するという, 「Flash 5」 的なやり方をする必要がなくなりました。 LoadVars を使わずに, loadVariablesNum や loadVariables を使う場合, 本当はこういう「Flash 4」 的,「Flash 5」 的な苦労が必要になります。

6appketea9
質問者

お礼

お礼が遅くなってしまって本当に申し訳ございません。 とてもわかりやすい説明本当に本当にありがとうございました。 おっしゃられたとおりにやってみましたが、正常に動きました。 いろいろなサイトから試行錯誤してみましたが...古かったのですね。 お忙しいとは思いますが、丁寧に回答していただいて本当にたすかりました。 ありがとうございました。

関連するQ&A