|
Flash が現在のような Flash として存在できるのは,単にアニメーションを簡単に作ることができてそれが表示できるからだけではありません。
Flash 単体でもアニメーションやゲームのみならず,インタラクティブなWebアプリケーションとして使うことはできます。
しかし,もしそれだけで,外部との通信ができなければ Flash が今現在まで存在するということはおそらく無かったと思います。
固いプログラムや見にくいデータを人間にとって見やすい形に表示させる。
現在の Flash は Web上データと人とをつなぐ玄関,入口,窓口。つまりインターフェイス的役割を大きく担っています。
その第一歩が LoadVarsクラスの loadメソッド です。
と,いきなりかたくるしくて大きなことを書きましたが,以下は結局,人間が楽する方法です。
データだけ用意しておけば,そのデータによって Flash が違う動作をしてくれれば作り手としては非常に楽です。
データ作成は PHP や CGI などに任せれば,人間の手間はさらに減ってもっと楽になります。しかし,ここではそういうサーバサイド言語に関することまでは書きません。
テキストデータを人間が手動で用意して,そのデータを Flash 内に表示させる方法です。
しかし突然,外部データをロードしてテキストフィールドに表示させると言うのも飛びすぎていると思うので,最初は Flash 内部にデータを用意しておいて,そのデータをテキストフィールドに順次表示させるサンプルです。
PraDraw Ver 0.34a で作成した絵を,Suzuka Ver 0.7.3.3 で動作させています。
なんとなく音が出そうな絵ですが,音は出ません。左のボタンをクリックすると,Flash 内に用意してあるデータが順次表示されるというだけのものです。
このスクリプトは次のようになっています。
// データの用意
music0 = "1曲目\n恋人がサンタクロース";
music1 = "2曲目\n気ままな朝帰り";
music2 = "3曲目\n3-Dのクリスマスカード";
music3 = "4曲目\nWings of Winter";
music4 = "5曲目\nAngel Cryin' X'mas";
//
// カウント用変数 cnt の初期化
cnt = 0;
// テキストフィールドに music0 のデータを代入
my_txt.text = _root["music"+cnt];
//
// ボタンをクリックしたときの動作を定義
my_btn.onRelease = function() {
// もし cnt が 4 未満であれば
if (cnt<4) {
// cnt の値に 1 を加算
cnt++;
} else {
// それ以外は cnt の値を 0 に戻す
cnt = 0;
}
// テキストフィールドに music? のデータを代入
my_txt.text = _root["music"+cnt];
};
|
最初に「文字列+連番数字」という形の変数と,その値を用意しておいて,
連番数字を順次繰り上げて,おなじみの配列アクセス演算子で動的に変数にアクセスし,
テキストフィールドにそのデータを順次表示させるようにしてあります。
データ内 「○曲目\n●▲■…」 の「\n」はテキストフィールド内に表示させるときの改行コードです。
上のままだと,「曲番と曲名」データを変えたいときに,いちいち Flash を作成しなければなりません。
しかし,この「曲番と曲名」データを外部テキストに持って行ってそのデータを Flash に表示できれば,いちいち Flash を作成しなおす必要がなくなります。
また,Suzuka などの Flash 作成ソフトを使えない方でも,Flash に表示する内容を変えることが可能になります。
それが次のサンプルです。
これがサンプルだと言っても,データが同じなので表示内容は変わりません。見た目変わらないのでは申し訳がないので絵の色だけは ParaDraw で変えてみました(色の違いは LoadVars とは全く関係がありません)。
このスクリプトは次のようになっています。
// カウント用変数 cnt の初期化
cnt = 0;
//
// 外部テキストを Shift-JIS で読み込む
System.useCodepage = true;
// LoadVarsクラスのインスタンスを作成
myLV = new LoadVars();
// インスタンスに外部テキストがロードされたときの動作
myLV.onLoad = function(Seikou) {
// ロードに成功すれば
if(Seikou){
// テキストフィールドに music? のデータを代入
my_txt.text = this["music"+cnt];
}
};
// インスタンスに外部テキストをロード
myLV.load("kiso2/data0.txt");
//
// ボタンをクリックしたときの動作を定義
my_btn.onRelease = function() {
// もし cnt が 4 未満であれば
if (cnt<4) {
// cnt の値に 1 を加算
cnt++;
} else {
// それ以外は cnt の値を 0 に戻す
cnt = 0;
}
// テキストフィールドに music? のデータを代入
my_txt.text = myLV["music"+cnt];
};
|
外部テキストデータ 「data0.txt」 は次のようになっています。
// データの用意
&music0=1曲目%0A恋人がサンタクロース&
&music1=2曲目%0A気ままな朝帰り&
&music2=3曲目%0A3-Dのクリスマスカード&
&music3=4曲目%0AWings of Winter&
&music4=5曲目%0AAngel Cryin' X'mas
|
Flash の内部日本語データの文字コードは,デフォルトでは UTF-8 です。したがって外部データは UTF-8 で用意すべきなのですが,
// 外部テキストを Shift-JIS で読み込む
System.useCodepage = true;
を書いておくと,外部データは Shift-JIS でも大丈夫になります。
また本当は,
変数名=値&変数名=値&変数名=値&…&変数名=値
という形でデータを用意します。しかしそれでは,人間がデータを作成しにくいので,&変数名=値& を1セットとして改行を入れています。
要は & を区切として 「変数=値」 と Flash が認識してくれるということです。
「// データの用意」 や 改行 も Flash 内にロードされるゴミデータなのですが 「変数=値」 という形ではないので,データとしての不純物にはなりません。
LoadVars.load の流れを図で説明すると次のようになっています。

LoadVarsインスタンスは複数の変数が入れられる入れ物です。
この入れ物にデータが入れる処理が完了したときに,LoadVars.onLoad ハンドラ が呼びだされます。
このLoadVars.onLoad で定義する匿名関数 function() の () 内に適当な変数名を入れておくと,
// インスタンスに外部テキストがロードされたときの動作
LoadVars.onLoad = function(○○) { }
LoadVars.onLoad ハンドラ が呼びだされたとき,その適当な変数に true もしくは false の ブール値(Boolean)が代入されます。
true が入ったときは「ロード成功」です。 false が入ったときが「ロード失敗」です。
この値によって成功か失敗かを取りだすことができます。
上のサンプルだと,外部テキストからはいくら頑張っても5項目限定のデータしか表示できません。
そこで改良を加えたのが次のサンプルです。
スクリプトは次のようになっています。
// カウント用変数 cnt の初期化
cnt = 0;
//
// 外部テキストを Shift-JIS で読み込む
System.useCodepage = true;
// LoadVarsクラスのインスタンスを作成
myLV = new LoadVars();
// インスタンスに外部テキストがロードされたときの動作
myLV.onLoad = function(Seikou) {
// ロードに成功すれば
if(Seikou){
// テキストフィールドに music? のデータを代入
my_txt.text = this["music"+cnt];
}
};
// インスタンスに外部テキストをロード
myLV.load("kiso2/data1.txt");
//
// ボタンをクリックしたときの動作を定義
my_btn.onRelease = function() {
// もし cnt が myLV の n-1 未満であれば
if (cnt<Number(myLV.n)-1) {
// cnt の値に 1 を加算
cnt++;
} else {
// それ以外は cnt の値を 0 に戻す
cnt = 0;
}
// テキストフィールドに music? のデータを代入
my_txt.text = myLV["music"+cnt];
};
|
外部テキストデータ 「data1.txt」 は次のようになっています。
// データの個数を指定
&n=12&
// データの用意
&music0=1曲目%0A恋人がサンタクロース&
&music1=2曲目%0A気ままな朝帰り&
&music2=3曲目%0A3-Dのクリスマスカード&
&music3=4曲目%0AWings of Winter&
&music4=5曲目%0AAngel Cryin' X'mas&
&music5=6曲目%0A忘れかけたあなたへのメリークリスマス&
&music6=7曲目%0A2人のストリート&
&music7=8曲目%0A12月の雨&
&music8=9曲目%0ABye bye boy&
&music9=10曲目%0Aダイアモンドダストが消えぬ間に&
&music10=11曲目%0Aロッヂで待つクリスマス&
&music11=12曲目%0AKissin' Christmas
|
こうしておくと,データ自体の個数まで,外部テキストデータで指定可能になります。
ちなみに,ZIPファイル内にある 「hontai_black.pdr」と「hontai_blue.pdr」と「hontai_green.pdr」 には次のように妙な線が出ています。

この線はゴミで,本来削除すべきものです。
しかし,これがあると最背面にある本体の色を容易に変えることができるので,わざと残したままにしています。
つまり,ParaDraw で絵を描くときの工夫として付けてあるもので,Flash作成上はない方が良いものです。
|