A Django site.
11月 4, 2007
» Flash の勉強 - loadVariables メソッドを使って外部ファイルを読み込む

MovieClip オブジェクトの loadVariables メソッドを使って外部ファイルを読み込むことができる。
基本、ローカルにあるファイルも読めるし、Web 上のファイルも読み込める。
僕は初め、loadVariables メソッドはファイルの中身をそのまま返すメソッドだと思ってた。
例えばあるテキストファイル(test.txt)があって、それに「test」って書かれていた場合、以下のようにすればファイルの内容が変数にそのまま渡されるんだと思ってた。

a = this.loadVariables("test.txt");

でも実際は全然そんな動きではないみたい。

読み込まれるテキストファイルには例えば以下のように書かれている必要がある。

a=test

このファイルを loadVariables によって読み込むことで、変数「test」という文字列をその値として保持した a という変数にプログラムからアクセスできるようになる。
変数の値は文字列としてセットされる。
複数の変数を定義したい場合は「&」で連結すればいいみたい。
例えば以下のような感じ。

a=test&b=TEST

注意しないといけないのが、loadVariables メソッドを呼んでもすぐにその内容がコンテキストに反映されるわけではないということ。
なので以下のようにプログラムを書いても期待通りに動作しない(場合によってはうまくいくときもあるのかな?)。

this.loadVariables("test.txt");
// 出力
trace(a);

「test」と出力されてほしいんだけど「undefined」とか出る。
a なんていう変数は定義されていないと。

じゃあどうしたらいいのかというと、ファイルのロードが完了するまで待ってあげないといけない。
以下のページにそのへんのテクニックが載ってるみたいなので読んでみた。

[228616]外部テキストファイルを読込む

フレームを3つ作ってループさせて、変数が定義されていたらループを終了させるのか。
うーん、なんか面倒くさいな。

ていうか、Flash の開発って、時間軸をすごく意識する必要があるんだな。
「フレーム」がキモか。

追記:
外部ファイルを読み込む方法についてちゃんと調べた。
上の「フレームを3つ作ってループ…」云々のような方法をとらなくてもいける。
LoadVars というクラスを使うと良いみたい。
手順は以下。

1. まず、new LoadVars() でインスタンスを作成
2. onLoad イベントハンドラにデータのロードが完了した時の処理を記述する
3. load メソッドを呼ぶ

ソースは以下。

var my_lv:LoadVars = new LoadVars();
my_lv.onLoad = function(success:Boolean) {
    if (success) {
        trace(this.a);
    }
};
my_lv.load("test.txt");

(^o^)/

でも後続のフレームの処理がからんでくる場合はやっぱりフレームでループさせたりしないとだめかも。
データがロードされるまでは特定のフレーム以降が再生されないようにしたい場合とか。
やっぱ Flash のプログラミングって特殊だな。

9月 14, 2007
» Flash やることに

どういうわけか、既存の Web アプリの Flash 部分の改修をやることになりました。
Rails と Ajax で四苦八苦してるのにその上 Flash。
「Flash ってどうやってデバッグするんだろう?」ってところからスタートです。

ログ出力の方法についてまず調べました。
trace っていう関数でログ出力できるみたいです。

trace("ログ...");

ていうか、ソース読んでてこれログ出力以外にないだろ、と察しました。
わかりやすくて良いですね。

で、そのログは一体どこに出力されるのか。
しばらく考えましたが、そもそも Flash アプリケーションは、ブラウザがサーバからダウンロードしたファイル(*.swf)をローカル環境で実行することによって動くわけだから、当然ログは手元のマシンのどこかに出力されるはずですよね。

結論をいうと、ログは以下のディレクトリに出力されます(Windows の場合)。

C:¥Documents and Settings¥user_name¥Application Data¥Macromedia¥Flash Player¥Logs¥flashlog.txt

でも、普通に Flash をブラウザで実行するだけじゃダメで、デバッグ用の Flash Player (flash debug player)をインストールし、設定ファイルを作成し、そこにログ出力のための設定を書き込んだりといった手順を踏む必要があります。
手順の詳細については以下が参考になりました。

参考: カサヒラボ - windowsやmacで、flashのtraceログが吐かれる場所

出力されるログを Firefox 上で見る為のアドオンなんかもあります。

FlashTracer :: Firefox Add-ons

フィルタリングの機能があってそこそこ便利です。

...

Flash の開発環境についてまた後で書くと思います。