ProgressionとFlashDevelopを用いたAdobe AIRアプリ開発(もちろんFlash CS3も併用)が、ようやくひと段落したので、その中で得た知識を自分なりに整理しておく。今回は同僚と二人で分担して開発したのでとても助かった。littlepad氏ありがとう!
- Progression導入による何よりのメリットは、お互いのソース確認が非常に楽になること。Progressionが自動生成するクラス構造をできるだけ変えないようにして開発していたので、他人のソースを見るときによくあるような迷いがなかった。シーンという概念も解りやすくて良い。
- Progressionをインストールするとコマンドメニューに追加される「リンケージの一括設定」機能は大変重宝した。真剣にFlash本体機能で同様のものを持つべきだと思う。
- flaファイル上でドキュメントクラスとして設定しているIndex.asクラス上で設定した変数hogeは、Index(CastDocument.root).hogeでアクセス可能。
- RollOverButtonやNextButtonクラスなどを継承して、リンク先とツールチップをカスタムクラスで設定して使うとProgressionコンポーネントに機能を追加して使うことができる。ロールオーバー時にラベルでアニメーションとかもスクリプト不要で楽。
- 任意の文字コードを使ってファイルを読み書きしたい場合はByteArrayクラスのreadMultiByte()、writeMultiByte()メソッドを利用。
- AIRから印刷枚数を変更したい場合は、PrintJob.addPage()を枚数分繰り返すことで実現可能。
- キーボードイベントを取得したい場合、 StageDisplayStateをFULL_SCREEN_INTERACTIVEにしたうえで、以下のように強制的にstageにフォーカスする。
focusRect = false; //フォーカス枠なし stage.focus = this; //thisにフォーカス
- AIRアプリ間の通信にはflash.net.LocalConnectionクラスを使用。sendメソッドに渡す引数は以下の通り。
_sendCon.send("接続名", "受信側のメソッド名", 引数...)
接続名の前には送信先アプリケーションIDと発行者IDと接続名を「app#送信先アプリケーションID.発行者ID:接続名」の書式で追加して指定する。
※発行者IDはAIRアプリがインストールされるディレクトリ内にある「META-INF/AIR/publisherid」に記述されている。 - 今回はローカルで動かすアプリなのでファイルサイズの制限がゆるく、デザイン重視でフォントを埋め込みまくったが、書き出しの際に異常に時間がかかりイライラした。いくつかのサイトを参考にしてコンパイル済みムービークリップにして流用する裏技を使おうとしたのだがうまくいかず……。タイムアップで必要なテキストフィールド全てに埋め込んでしまった。もうちょっとスマートにできなかったのか残念でならない。現在のFlashが持つフォント埋め込み関係の機能が貧弱すぎるのが最大の要因なのは間違いないので、今後の改善を期待する。
- 最後におまけ。普通にアイテムを削除して保存してもflaファイルのサイズは変わらない。[やり直し] コマンドで元に戻せるように維持されるようだ。削除したアイテムをドキュメントから永久に削除し、ドキュメントのファイルサイズを小さくするには、[ファイル]-[保存して最適化] を選択すればよい。自分はよく使うが、同僚は知らなかったようなのでメモ。
当初EXE書き出ししたものを納品する予定だったが、個人的な趣味でAIRアプリにさせてもらった。苦労もあったが、それ以上に得るものも大きかったように思う。AIR用に拡張された機能が無ければ、要望どおりのものは作り上げることができなかっただろう。
必要に迫られて二人で作った、Webカメラ画像取り込みクラス、ルビ付きテキストフィールド生成クラス、EXCELが生成する特殊なCSV(改行まじりだと””でくくったりするやつ)を読み込んでArrayに変換するクラス、ローカルの特定ディレクトリ以下の画像をリストアップして時系列にソートするクラスなどは今後もコアを再利用できそうで楽しみだ。