Flash CS3のコンポーネント作成テスト
Flashでコンポーネント周りをやろうやろうとかなり前から思っていたのですが、ようやく踏ん切りがついたので、あれこれ調べつつ試してみました。
調べていて分かったのは、簡単なコンポーネントの作り方がなかなか見つからず、また、CS3ではそれまでのバージョンのコンポーネントとは若干作り方が変わっている、ということ。
一番参考になった「http://www.adobe.com/jp/devnet/flash/articles/67ws_creating_components.html」ですら、なぜか微妙にもっともシンプルなコンポーネントを作ることはしていないですし。
ということで、シンプルなコンポーネントを作って基本的な流れを把握するメモを残しておきます。
ちなみに、コンポーネントを作成するまでのワークフロー、データフローは次のようになります。
まずムービークリップを用意
simpleComp.flaファイルを作成し、その中にsimpleCompMCというムービークリップを作成します。その中にmTextFieldというダイナミックテキストを配置します。(このムービークリップsimpleCompMCをコンポーネントとして使えるようにします)
クラス化の準備
ライブラリタブ内でsimpleCompMCの「プロパティ」を選択して、リンケージの「ActionScriptに書き出し」にチェックを入れ、「クラス」に"simpleComp"と入力します。
次にこのクラスを定義するASファイル"simpleComp.as"を用意します。
simpleComp.flaファイルと同位置に"simpleComp.as"を作成し、中には次のようにコードを書きます。
// simpleComp.as package{ // 必要なパッケージの読み込み. import flash.display.MovieClip; import flash.text.TextField; public class simpleComp extends MovieClip{ // メンバ変数. protected var mText:String = "Hello, Component."; // <- Memo #01 // コンストラクタ. public function simpleComp(){ super(); updateText( "in Constructor" ); } // コンポーネントインスペクタで変更可能な変数のsetter. [Inspectable(defaultValue="Hello, Component.", name="Text Parameter")] public function set text_setter( aText:String ) :void { // 注:コンポーネントインスペクタで値を変更したときにのみ呼ばれ、 // デフォルト値のままのときは呼ばれません。 mText = aText; updateText( "in setter" ); } // テキストフィールドを更新. private function updateText( optStr:String ) { trace("["+mText+"] "+ optStr +"\n"); this["mTextField"].text = mText; // <- Memo #02 } } } // Memo // /* #01 インスペクタ[Text Parameter]に対応する値のデフォルト値. #02 this.mTextField.textと書くと「未定義のパラメータ」と言われエラーになる. なので、こんな回避策. */
.fla→.swc
simpleCompMCの「コンポーネント定義」を選択して、「クラス」に"simpleComp"と入力。ここで「OK」を押した瞬間にコンポーネントとしてのコンパイルが行われます。このとき、スクリプト等にエラーがあればコンパイルエラーが表示され、エラーが無ければ問題なく使えるようになります。
SWC(コンパイル済みSWFオブジェクト)として書き出します。
.swc + .mxi→.mxp(配布可能なコンポーネント)
最後にコンポーネント化します。
コンポーネントを外部から使えるようにするには.mxpファイルにして、Adobe Extension Managerを使ってFlashにインストールする方法が一般的のようですので、.mxpファイルにコンバートします。
.mxpファイルにするには、.mxiファイルが必要ですので、以下のような内容のファイルをsimpleComp.mxiとして作成します。
<macromedia-extension name="Test" version="1.0.0" type="flashcomponentswc"> <author name="octech" /> <products> <product name="Flash" version="9" primary="true" /> </products> <description> <![CDATA[ ただテキストを表示するだけのコンポーネントサンプルです。 ]]> </description> <ui-access> <![CDATA[ (c) octech ]]> </ui-access> <license-agreement> <![CDATA[ このコンポーネントは無保証、無サポートです。 ]]> </license-agreement> <files> <file source="simpleComp.swc" destination="$flash/Components/Test" /> </files> </macromedia-extension>
「ファイル」メニュー→「拡張機能を作成」で.mxiファイルを開き、書き出す.mxpファイル名を指定して書き出します。
これで、配布可能なmxpファイルが完成しました。
コンポーネント使用テスト
最後に読み込んでテストしてみます。
「ファイル」メニュー→「拡張機能をインストール」で、先ほど作成した.mxpファイルを指定すると、インストールが開始されます。インストールが完了したら、Flashを再起動(もしくはコンポーネントパネルのリロード)を行います。
適当な.flaファイルを開き、コンポーネントウィンドウを開くとその中に作成したコンポーネントが見つかります。
これをステージのドロップすると、作成したコンポーネントが使用可能になっていることが分かります。
また、コンポーネントインスペクタウィンドウを表示させ、パラメータがを変更すると、すぐにsetterが呼ばれるのが分かります。