基本的なループ表現
フレームスクリプトでループ表現
ActionScript3.0では、ムービークリップに onClipEvent (enterFrame) {} とは書けません。
ループを表現するには、ムービークリップ内の1フレーム目に、以下のように書きます。
var count:int = 0; // 毎フレームの処理を行う関数. function process( eventObject:Event ) :void { trace("test loop!"+count); count++; } // イベントリスナとして登録. addEventListener( Event.ENTER_FRAME, process );
こういう関数の登録の仕方が、ActionScript3.0の基本となります。
ドキュメントクラスでループ表現
ドキュメント自体のループに関しては、ドキュメントクラス、ということで定義すると、フレームスクリプトは全く書かなくてもループが表現できます。
ただし、ドキュメントの設定をする必要があります。
package { import flash.display.Sprite; import flash.events.*; public class BasicClass extends Sprite { var count:int = 0; // コンストラクタ. public function BasicClass() { // イベントリスナを登録. addEventListener( Event.ENTER_FRAME, process ); } // 毎フレームの処理. public function process( eventObject:Event ) :void { trace("test loop!"+count); count++; } } }
以上のスクリプトをBasicClass.asとしてflaファイルと同じ位置に保存して、ドキュメントクラス設定をBasicClassとすると、ループが確認できると思います。
テキストフィールドの文字
ステージ上に配置したダイナミックテキストの中身を参照したり、中身を変える場合には、若干アクセス方法が変わるので注意です。
ActionScript3.0では、ダイナミックテキストの「変数」という名前が設定できなくなっていて、その代わりにインスタンス名でアクセスします。
ステージ上に配置したダイナミックテキストオブジェクト(インスタンス名: aTextArea)の文字を変更する場合、それを含むムービーのフレームスクリプトで以下のように記述します。
aTextArea.text = "初期化済み"; // もしくは↓のような感じでthis.アクセスすると構造が分かりやすい。 // this.aTextArea.text = "初期化済み";
(インスタンス名).text としてtextパラメータにアクセスするのです。
FlashからCGIにバイナリを送りファイルを作成する
Flash(ActionScript3.0)からPOSTメソッドでCGIにバイナリデータを送る、そのシンプルな流れをメモしておきます。
Flashから送信(ActionScript)
下記はFlashのテスト部分を抜き出したものです。
ByteArray()がバイトストリームで、本来は画像データや、ファイルフォーマットになっているものを突っ込むのですが、今は分かりやすく、適当な4バイトのデータを作って送ってみます。
var bytes:ByteArray = new ByteArray(); // とりあえずバイナリデータを作成. bytes.writeByte( 1 ); bytes.writeByte( 2 ); bytes.writeByte( 3 ); bytes.writeByte( 4 ); var cgipath:String = new String('http://localhost/cgi-bin/testpost.cgi') var request:URLRequest = new URLRequest(cgipath); request.contentType = 'application/octet-stream'; request.method = URLRequestMethod.POST; request.data = bytes; //送るデータをセット. // 送りっぱなしで終了. sendToURL( request ); // 別ウィンドウで開くなら下記の形で送信. //navigateToURL( request, "_blank" );
CGI受信、ファイル作成(Ruby)
POSTメソッドで送られたデータはSTDINに入ってきますので、それをそのままファイルに書き出すスクリプトを書きます。
自分の分かりやすいスクリプトとしてCGIにRubyを使っていますが、PerlでもPHPでもPythonでもなんでもいいです。
#!c:/ruby/bin/ruby # ↑もちろんここは適当なパスを. print "Content-type: text/html\n\n" print "<html><body>" print "Hello Ruby CGI:" + ENV['CONTENT_LENGTH'] print "</body></html>" # そのまま書き出し. open( "test.dat", "wb" ){ |file| $stdin.binmode # バイナリモードにする. file.write $stdin.read # 大きなサイズのファイルを読み込む場合には、 # 小さめのサイズで読み込み、whileで回すと無難. }
上記CGIでは、なんらかの出力があったほうが見栄えがいいので、適当なprintをしていますが、基本的にprintの行はなくても問題ないです。
以上で、Flash→(POST)→CGI→(ファイル)というデータの流れを作ることが出来ます。