- ベストアンサー
変数の扱い(テキスト複数行操作)
- ActionScriptを使用して、外部テキストの複数行を順番に表示する方法について教えてください。
- 具体的には、外部テキストを1行読み込むことはできますが、複数行を表示する方法が分からない状況です。
- また、アクションスクリプト内で変数の値を増減させる方法も教えていただきたいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
テキストフィールドに表示する内容を管理している、text というプロパティがあります。 このプロパティを書き換えると、テキストフィールドの表示を更新できます。 text プロパティで表示を更新する時は、テキストフィールドのプロパティにある「変数:」の項目は、空白のままでも構いません。 ActionScript では、文字列を変数やインスタンス名に変換して参照できます。 この変換には eval 関数か配列演算子 [ ] を使います。 例えば、 _root[ "topic" ] = ・・・; としますと、_root 階層(通常はステージ、またはメインのタイムラインのことです)にある topic という名前の変数やインスタンスを操作することができます。 eval 関数でも同じことができるのですが、Flash Player 6 (編集ツールは Flash MX )以降では、式の左辺で eval 関数を使うとエラーになりますのでご注意ください。 読み込む load.txt では、変数の名前を” topic +通し番号”で付けておきますと、for ループと先述の [ ] 演算子を使って大量の変数もまとめて処理できます。 文字列の連結は + 演算子でも可能です。 例えば、for ループで i のカウンタを増やしながら temp += _root[ "topic" + i ]; という処理をすると、temp という変数に topic1 → topic2 → topic3 ・・・の順にその内容を連結できます。 出来上がった temp の内容を、テキストフィールドの表示内容を管理している text プロパティに代入すると、複数の変数の内容を連結して表示できます。 ところで、ループを組むには変数がいくつあるかの情報が必要ですが、テキストファイルから読み込んだ変数がいくつあったかは、Flash の方では分かりません。 参照しようとした変数が存在しない場合、undefined (未定義)という値が返ってきます。 そこで、変数の名前が topic +通し番号で付いており、通し番号が連番になっている点を利用して、topic +番号の変数の内容が undefined になるまで変数の中身を連結する、というループを考えます。 for ループでもいいのですが、今回は while ループを使った例をご紹介します。 例えば、ステージに headline というテキストフィールド(ダイナミックテキスト)があるとします。 このテキストフィールドの表示は _root.headline.text = ・・・; とすることで更新できます。 load.txt には、topic1 ~ topic5 という変数が書かれているとします。 このテキストファイルを読み込み、変数の分だけテキストフィールドに表示するスクリプトは、大体、次のようになります。 このスクリプトはフレームに設定してください。 (↓各行頭に全角のスペースが入っています。コピーする際はご注意ください) //テキストの読み込み System.useCodepage = true; this.loadVariables( "load.txt" ); //読み込み完了時の処理 this.onData = function() { var temp , no , error_flg; //変数が存在するかどうかのフラグ //topic+番号の変数がundefinedになった時true、それ以外はfalse error_flg = false; //読み込んだ変数の内容を作業用変数に連結 //変数が見付からなくなるまでループ no = 1; temp = ""; while( ! error_flg ) { //変数がある場合、その内容を連結 if( _root[ "topic" + no ] != undefined ) { temp += _root[ "topic" + no ]; no++; } //変数がない場合はループを打ち切り、テキストフィールドに表示 else { error_flg = true; _root.headline.text = temp; } } }; ------------------------ HTML の TEXTAREA フォームでは、入力した文字が表示しきれなくなった時には、自動的にスクロールバーが表示されます。 しかし、Flash のテキストフィールドではこのようなサービスはありません。文章を表示しきれない場合は、スクロールして表示できるようにする仕組みを用意する必要があります。 紙面の都合上、ここでは詳しくは書けませんが、 ・ scroll プロパティを利用し、押すとスクロールするボタンなどを作る ・ ScrollBar ( Flash MX 2004 Ver 7.2 では UI ScrollBar )コンポーネントを利用する ・ TextArea コンポーネントを利用する( Flash MX 2004 のみ) といった方法があります。
お礼
まとまった時間が取れず作成作業が遅れてしまいました。 とても丁寧な解説で配列の扱い方が良く分かりました。 FLASHの方も無事完成しました。 特にundefinedの利用法は今後色々役に立ちそうです。 今回は本当にありがとうございました。