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が呼ばれるのが分かります。