先日(id:ABA:20051020#p1)触れたように、Flash用スクリプト言語であるActionScriptは、バージョン3で大幅に改変され、より普通のプログラマにとって分かりやすいものになったということだ。
そこで、ActionScriptに関する知識0の状態から、前にProce55ingで作ったPongPod(id:ABA:20051015#p1)を、ActionScript3(AS3)でFlash用に移植してみて、オーサリングツールの経験がないプログラマでも、本当に簡単に扱えるのかを試してみた。
- Flex Builder 2 Alpha Release(http://labs.macromedia.com/technologies/flexbuilder2/)
- Processing 1.0 (BETA)(http://www.processing.org/)
結論から言えば、Proce55ingやJavaに慣れている人間にとって、AS3は非常に扱いやすい言語だ。ECMAScriptライクな単一の.asファイルをFlex Builder 2上で記述するだけで、オーサリングツールには全く触る必要なく、swfファイルを生成することができる。
さらにいえば、Flex Builder 2はEclipseのプラグインとして構成されている。なので普段EclipseでJavaを書いている人間は、非常にスムースに移行できるだろう。
AS3とProce55ingのソースコードそれぞれを以下に示す。
- AS3版(http://www.asahi-net.or.jp/~cs8k-cyu/flash/pongpod/PongPod_src.html)
- Proce55ing版(http://www.asahi-net.or.jp/~cs8k-cyu/java/pongpod/PongPod_src.html)
こう並べて見ると、それほどドラスティックな変更なしに移植できることが分かるだろう。JavaやProce55ingに慣れ親しんでいる人間にとっては、AS3は非常に分かりやすい言語、ライブラリだと思う。
Proce55ingからAS3に移行する際の注意点を簡単に述べておく。なにぶんActionScriptを始めて6時間とかいう人間の書くことなので、間違いがあればコメントください。
Spriteクラスの利用
Proce55ingのdrawメソッドを持つ、画面に描画を行うオブジェクトは、Spriteクラス(http://livedocs.macromedia.com/labs/1/flex/langref/flash/display/Sprite.html)を継承して作成するのが簡単だと思う。Spriteクラスはタイムラインを持たないムービークリップに相当するもので、タイムラインの代わりにActionScriptで書かれたロジックで動作が制御できる。
一定時間ごとに呼び出される処理については、ENTER_FRAMEイベントのリスナを使うのが簡単だ。
addEventListener(EventType.ENTER_FRAME, onEnterFrame); .... public function onEnterFrame(evt:Event) {
生成されるswfファイルのフレームレートは、コンパイルオプションで指定できる。プロジェクトプロパティのadditional compiler argumentsにおいて、'-default-frame-rate 30'のように指定する。オプションではデフォルトの画面サイズも指定できる。
Proce55ingは毎フレームdrawメソッドで明示的に描画しなければ表示されないのに対して、Spriteクラスは描画処理なしでも次フレームにそのまま残ることに注意。画面から消す場合は、visibleプロパティをfalseにすること。
また、複数あるSpriteクラスのうち、起動時に自動的にインスタンス化したいクラスのみpublicにしておき、後で動的に生成するクラスはprivateにしておく必要があるようだ。フレーム全体を表すSpriteクラスのみpublicにしておき、残りのクラスはprivateにしておくのが簡単だと思う。
JavaとECMAScriptの違い
変数の宣言方法が両者で違う。これを直すのが一番面倒なところだ。またいくつかの型の名称も異なる。'float x' は 'var x:Number'だ。クラスや関数の宣言もちょこちょこ異なる。
また配列はArrayを使う。Arrayをインスタンス化した後なら、その最大数を指定することなく任意のインデックスに値を代入できる、のが気持ち悪い、がこういうものらしい。
Proce55ingのライブラリの代替
描画の各種シェイプはGraphicsクラス(http://livedocs.macromedia.com/labs/1/flex/langref/flash/display/Graphics.html)で、各種演算はMathクラス(http://livedocs.macromedia.com/labs/1/flex/langref/Math.html)でだいたいカバーできるので問題はほとんどない。テキストの描画はTextFieldクラス(http://livedocs.macromedia.com/labs/1/flex/langref/flash/display/TextField.html)でできる。
サウンド
サウンドはSoundクラス(http://livedocs.macromedia.com/labs/1/flex/langref/flash/media/Sound.html)で実現できる。試してみたところ、wavファイルではうまくいかなくて、mp3ファイルに変換したらうまくいった。こういう仕様なのだろうか。
だいたいこんなところ。AS3のコードを書くに当たっては、helpQLODhelp(http://www.helpqlodhelp.com/blog/)を参考にした。
で、もちろん作成したswfファイルも手元にあるんだが、これネット上に置いていいのかな。アルファ版のライセンスに置いていいとも悪いとも書いてないんだよな。まあ置けたとしてもFlash Player 8.5必須なので、現時点で再生できる人は全体の0.1%にも届かないのだろうが。