特殊な変数の定義

参考書

 そうそう、参考書は「おしえて!!FLASH MX」と「FLASH ActionScriptバイブル」と「FLASH ActionScript辞典」を購入。
「おしえて!!FLASH MX」は、フルカラー303Pで2400円、安いね。そんで、絵が多くて分かりやすい。
 ウインドウのキャプチャが多い解説書はバカにしてたところがあったけど、そもそもが絵を描くソフトと言うこともあって、なかなかに良い。
「FLASH ActionScriptバイブル」は、Flash5の解説書だけど、わりと評判がいいようなので、購入してみた。
 こっちは白黒だけど、挿絵がたくさんある。それで分かりやすくなったかは、ちょっと微妙だけど、まぁ良いんじゃないかな。私は基本的にプログラム言語の解説書にイラストつけるのに賛成。
 内容は、オブジェクト指向を連呼する割に、オブジェクト指向の用語の使い方が、多少不適切な感じもあるが、基本的な内容は良い感じ。大いに参考になった。
「FLASH ActionScript辞典」はリファレンス本、古旗さんが書いていると言うことで、無条件購入。コレから、じっくりと使い込んでいく予定。

 で、今回のお題だけど、Flashには、スクリプト中に変数が定義できる他に、いくつか変数を定義する方法が用意されているようだ。
 そこで、その方法を探っていくことにする。

テキストフィールドで設定する。

 テキストツールで、テキストフィールドを用意して、[ダイナミックテキスト]か、[テキスト入力]を指定すると、プロパティパネルに[変数]と言う項目が出る。
 なんじゃこら???
 最初はさっぱり意味が分からず、マニュアルを読んでも、

テキストフィールドに変数を割り当てると、そのテキストフィールドには変数の値が表示されます。

って結局どう言う風に使えるのよーー、って感じで、よく分からなかったんだが、いろいろと参考書を読むと、テキストフィールドの[変数]を設定すると、そこに書いた変数が、テキストフィールドの置いてある、ムービークリップのインスタンス変数になるらしい。

 コレが便利なことに、変数に代入するとテキストフィールドに反映されるし、テキストフィールドにユーザーが書き込むと変数に反映される。

 まず、ステージにテキストフィールドを用意して、プロパティパネルで、[変数]に「_textFld1」と設定。テキストフィールドには適当な文字なり数字を書いておく。
 次にフレームスクリプトに、変数を読んで出力に出すスクリプトを書く。

trace(_textFld1);

 んで実行。フィールドの文字が出力ウインドウに表示された。
 逆に、変数に代入。

_textFld1 = Math.random();

 実行すると、ランダムな数字が表示された。
 結果分かることは、これはムービークリップの持っているインスタンス変数として利用できると言うわけだ。

コンポーネント化する

 もう一つ、インスタンス変数の設定方法がある(いや、もしかしたらもっといっぱいあるのかもしれないけど)
 それは、コンポーネント化だ。

 残念ながら、_rootのムービークリップのコンポーネント化はできないようなので、ルートの変数の定義はできない。それは先ほど説明した、テキストフィールドを利用しろってことだろうな。

 さて、コンポーネント化だ。
 適当なシンボルを作ったら、ライブラリパネルで、コンテクストメニューから[コンポーネント定義...]を選択する。
 [+]ボタンを押すと、[名前]、[変数]、[値]、[タイプ]が書き込めるようになるので、それぞれ指定してやる。
 コレで表示されるパネルの[パラメータ]の所に、インスタンス変数をどんどん定義していくことができるわけだ。
 使うときは、定義を書いたコンポーネント(ムービークリップ)のインスタンス変数となる。コンポーネントが配置されているムービークリップのインスタンス変数ではない。
 aComponentというインスタンス名を付けたコンポーネントの_aParamというパラメータを、コンポーネントが配置されているフレームスクリプトから参照する場合、次のようにすることになる。

aComponent._aParam;

 プロパティパネルの左下に、[パラメータ]タブが付くので、その他部を選択すると、先ほど追加したパラメータが表示される。
 ここには、[名前]と[値]が表示されて、[変数]と[タイプ]は表示されない。
 値を設定する時には、[名前]を参考にすることになるので、分かりやすい名前を付けておいてやると、コンポーネントを他の人に使ってもらう場合に親切。この[名前]はスクリプト的には何も意味を持たないので、日本語でも良い。
 値の方は、シンボルからインスタンスを生成した時に初期値がコピーされるが、後でインスタンスごとに変更することが可能。一旦インスタンス側で変更すると、シンボル側での変更は反映されない。と言う感じのよう。

 基本的には、コンポーネントの外からこの変数を参照することはしないものではあろう。
 ただ、初期設定のようなものを、ひとまとまりにしておくのは便利そう。

 今日はここまで。


2003-07-08