外部テキストファイルを読込む
Flash 5の MovieClip.loadVariables メソッドを使って、外部テキストファイルからメインのタイムラインやムービークリップに変数をロードすることができます。本稿では、その概要をご説明します。詳しくは『macromedia FLASH 5 日本語版 ActionScript リファレンスガイド』の「リモートファイルとの間の変数の送信とロード」および MovieClip.loadVariables の項をご参照ください。
- テキストファイルの内容
外部に設定するテキストファイルの内容は、変数名=値の形式で設定します。複数の変数は & (アンパサンド) で連結して、1行にします。値はすべてストリングとして読込まれますので、" (クォーテーション) で囲む必要はありません。また、値の中のスペースは + (プラス) に置換えてください。
たとえば、変数名 company と city に、値として「Macromedia, Inc.」と「Tokyo」を指定するには、以下のようなデータにします。
company=Macromedia,+Inc.&city=Tokyo
- ロードされたデータの確認
上記のデータを、myData.txt というファイル名で、データをロードしたい SWF ファイルと同じ階層に保存したとします。ロードした変数 company の値を、変数名「companyName」としたダイナミックテキストに入力したい場合には、どうしたらよいでしょう。例えば、以下のスクリプトでは、記述には誤りがありませんが正しく設定できないことがあります。
this.loadVariables("myData.txt");
compayName = company;
こちらは外部テキストから変数をロードするには時間がかかる点を考慮しなくてはなりません。すぐにロードされることもありますが、環境によっては待ち時間が必要になります。ロードが終わらない内に変数を使用すれば、変数値は未設定の状態になってしまいます。よって、ロードした変数を使って処理を行う際には、データがロードされたかどうか確認しなければならないのです。
なお、ロードされた変数は、メソッドのターゲットパスで参照したタイムライン (上記では this で参照される、アクションを記述したタイムライン) に直接グローバル変数として設定されます。したがって、ダイナミックテキストの変数名自体を company としてしまえば、データのロードと同時にそこに直接入力され、わざわざ変数を設定するというステートメント (compayName = company) は必要ありません。ただ、ロードしたテキストを使って何かの処理を行う場合のテストとしては、結果を目で見て確認しやすいので、ここではこの例を使うことにします。
- フレームスクリプトを使ってロードを確認する
Flash 4 のときから使われていた手法に、変数がロードし終わるまでフレームをループさせるやり方があります。3フレームを使って処理する場合には、たとえばつぎのようなフレームスクリプトを設定します。
1フレーム目:
//外部テキストの読込み
this.loadVariables("myData.txt");
2フレーム目:
//フレームループ用です。とくにスクリプトは必要ありません。
3フレーム目:
//ロードの確認処理
if (city == null) {
//[1]最後の変数がまだロードされていなければ
this.gotoAndPlay(_currentframe-1);
//[2]前のフレームに戻る
} else {
//[3]最後の変数がロードされたら
compayName = company;
//[4]ダイナミックテキストに値を設定
}
使用されているメソッド・アクションにつきましては、『ActionScript リファレンスガイド』をご参照ください。3フレーム目のアクションを簡単にご説明します。
[1] if アクションを使って、変数のロードを確認します。
MovieClip.loadVariables で外部ファイルから読込まれた変数は、メソッドのターゲットパスで参照したタイムラインあるいはムービークリップに設定されます。変数が設定されたかどうかは、条件 (変数 == null) で確認できます。null は、値が未定義であることを意味します。
この設例にかぎっていえば、変数 company の値を評価すればよいです。けれど、ロードした他の変数も別の処理で使うかもしれません。そこで、データの最後の変数である city の値を確認しています。
[2] 条件 (city == null) が真 (true) の場合、つまり変数がまだロードされていないときの処理です。
MovieClip.gotoAndPlay メソッドで前のフレームに戻ります。(同じ動作をする独立のアクションとして、gotoAndPlay があります。ただ、Flash 5 のスクリプティングとしては、メソッドが用意されている場合にはそちらを使いましょう)。すると、またこのフレームに再生ヘッドが入り、スクリプトが繰り返し実行されることになります。
_currentframe プロパティは、現在再生ヘッドのあるフレーム番号を返します。したがって、前のフレームは、(_currentframe-1) となります。
[3] else アクションは、if ステートメントの条件が偽 (false)の場合、つまり変数がロードされたときの処理を以降のステートメントで指定します。
[4] 変数がロードされた後の処理を、ここに記述します。設例では、変数 company の値を、ダイナミックテキスト companyName に入力しています。複数のステートメントを指定することもできます。再生ヘッドを移動するステートメント (MovieClip.gotoAndPlay) はありませんので、処理が終わればつぎのフレームに進みます。
- onClipEvent (data) を使ってロード後の処理を行う
Flash 5 で追加されたハンドラ onClipEvent には、トリガイベントに data を指定できます。このイベントは、MovieClip.loadVariables で読込んだ最後の変数がロードされたときに発生します。このハンドラでロード後の処理を指定すれば、シンプルなスクリプティングになります。
以下のスクリプトは、ムービークリップのオブジェクトアクションとして記述します。データのロード (this.loadVariables の実行) は、ムービークリップの表示開始時に行うことにしましょう。
onClipEvent (load) {
//ムービークリップが表示されたとき
this.loadVariables("myData.txt");
}
onClipEvent (data) {
//すべての変数がロードし終えたとき
compayName = company;
}
| : | 2006-04-22 |
|---|---|
| : | 228616 |
| : | Macintosh, Windows |
| : | 8, MX2004, MX, 5 |
| : | http://go.adobe.com/kb/ts_228616_ja-jp |
| : | flash |