Flash 5の MovieClip.loadVariables メソッドを使って、外部テキストファイルからメインのタイムラインやムービークリップに変数をロードすることができます。本稿では、その概要をご説明します。詳しくは『macromedia FLASH 5 日本語版 ActionScript リファレンスガイド』の「リモートファイルとの間の変数の送信とロード」および MovieClip.loadVariables の項をご参照ください。

 

 

  1. テキストファイルの内容

    外部に設定するテキストファイルの内容は、変数名=値の形式で設定します。複数の変数は & (アンパサンド) で連結して、1行にします。値はすべてストリングとして読込まれますので、" (クォーテーション) で囲む必要はありません。また、値の中のスペースは + (プラス) に置換えてください。



    たとえば、変数名 company と city に、値として「Macromedia, Inc.」と「Tokyo」を指定するには、以下のようなデータにします。



    company=Macromedia,+Inc.&city=Tokyo
  2. ロードされたデータの確認

    上記のデータを、myData.txt というファイル名で、データをロードしたい SWF ファイルと同じ階層に保存したとします。ロードした変数 company の値を、変数名「companyName」としたダイナミックテキストに入力したい場合には、どうしたらよいでしょう。例えば、以下のスクリプトでは、記述には誤りがありませんが正しく設定できないことがあります。



    this.loadVariables("myData.txt");

    compayName = company;



    こちらは外部テキストから変数をロードするには時間がかかる点を考慮しなくてはなりません。すぐにロードされることもありますが、環境によっては待ち時間が必要になります。ロードが終わらない内に変数を使用すれば、変数値は未設定の状態になってしまいます。よって、ロードした変数を使って処理を行う際には、データがロードされたかどうか確認しなければならないのです。



    なお、ロードされた変数は、メソッドのターゲットパスで参照したタイムライン (上記では this で参照される、アクションを記述したタイムライン) に直接グローバル変数として設定されます。したがって、ダイナミックテキストの変数名自体を company としてしまえば、データのロードと同時にそこに直接入力され、わざわざ変数を設定するというステートメント (compayName = company) は必要ありません。ただ、ロードしたテキストを使って何かの処理を行う場合のテストとしては、結果を目で見て確認しやすいので、ここではこの例を使うことにします。
  3. フレームスクリプトを使ってロードを確認する

    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) はありませんので、処理が終わればつぎのフレームに進みます。
  4. onClipEvent (data) を使ってロード後の処理を行う

    Flash 5 で追加されたハンドラ onClipEvent には、トリガイベントに data を指定できます。このイベントは、MovieClip.loadVariables で読込んだ最後の変数がロードされたときに発生します。このハンドラでロード後の処理を指定すれば、シンプルなスクリプティングになります。



    以下のスクリプトは、ムービークリップのオブジェクトアクションとして記述します。データのロード (this.loadVariables の実行) は、ムービークリップの表示開始時に行うことにしましょう。



    onClipEvent (load) {

    //ムービークリップが表示されたとき

      this.loadVariables("myData.txt");

    }

    onClipEvent (data) {

    //すべての変数がロードし終えたとき

      compayName = company;

    }

本作品は Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License によってライセンス許可を受けています。  Twitter™ および Facebook の投稿には、Creative Commons の規約内容は適用されません。

法律上の注意   |   プライバシーポリシー