Flashでは,自作のクラス(カスタム・クラス)をムービークリップ・シンボル(以下,ムービークリップと呼びます)に関連付けることによって,Flashドキュメント側にスクリプトを書かなくてもムービークリップの動きを制御できます。この際,自作のクラスをムービークリップに関連付けて使用する際には,少し独特な操作を行う必要があります。今回はこの操作の方法と特徴をご紹介します。

 図1のムービーをご覧ください。実はこのムービーのFlashドキュメントには,スクリプトは書かれていません。それにもかかわらず,画面をクリックして矢印キーを押すと,その方向へとムービークリップが移動しますね。

図1: カスタム・クラスの使用(クリックするとムービーを表示します。Flash8で読み込めるソース・ファイルsample1.zipをこちらからダウンロードできます

 この動きを制御するスクリプトは,すべて,外部のカスタム・クラス・ファイルに記述されています。Flashドキュメント側では,そのカスタム・クラスを利用したムービークリップをステージに配置するだけでOKなのです。

 ActionScript2.0では,画面に表示し,スクリプトで動かすものの基本の単位は,なんといってもムービークリップです。このムービークリップにカスタム・クラスを関連付けることにより,オリジナルのコンポーネントを使うような感覚で処理を行うことができるようになります。

MovieClipを継承したクラスを作成する

 では,さっそくカスタム・クラスを作成し,ムービークリップに関連付ける手順を説明しましょう。

 まず新規Flashドキュメントを作成し,任意のフォルダに保存します。次に,簡単な絵を一つ描き,ライブラリにムービークリップとして登録します(図2)。

図2: ムービークリップを用意してムービークリップ・シンボルとして登録する

 ムービークリップに関連付けるカスタム・クラスは,「MovieClipクラスを継承して,その上で,自分の使いたい処理を追加していく」という考え方がベースとなります。今回はとりあえず,「配置すると,右側に移動するクラス」を作成してみましょう。名前はそうですね「ClayDollクラス」とでもしてみましょう。ClayDollクラスはMovieClipクラスを継承するので,基本としてこんなコードになります(図3)。

図3: ムービークリップに関連付けるカスタム・クラスの“枠組み”

 このクラスに,右側に移動する処理を付け加えましょう。コンストラクタ関数内で,移動のスピードや折り返し地点の座標等の設定,さらにはonEnterFrameイベントハンドラへの関数の割り当てなどを行います。できあがったコードは図4のようになります。

図4: 右側に移動する処理を追加したClayDollクラス

 ClayDollクラスは,MovieClipクラスを継承しているので,おなじみの「_xプロパティ」や「onEnterFrameイベントハンドラ」を使って,ムービークリップを操作するコードを記述することができるわけです。

 では,ClayDollクラスをムービークリップに割り当ててみましょう。まず,ClayDollクラスをFlashドキュメントと同じフォルダ内に保存します。次に,Flashドキュメントの[ライブラリ]パネルで先ほど作成したムービークリップを選択し,右クリックして表示されるメニューから[リンケージ…]を選択します(*1)。

 [リンケージプロパティ]ダイアログボックスが表示されますので,[リンケージ]欄の「ActionScriptに書き出し」にチェックを入れます。さらに[識別子]欄にActionScriptからこのムービークリップを生成する際に使用する名前である「識別子」を入力します(図5)。

 ここまでは,attachMovieメソッドを使ってムービークリップをステージに追加できるようにするための下準備と同じですね。今回は,カスタム・クラスを関連付けますので,さらに[AS 2.0クラス]欄に,関連付けたいクラス名を入力します。今回は先ほど作成したClayDollクラスを使用しますので「ClayDoll」と入力すればOKです。これで準備は完了です。

図5: 識別子を入力し,カスタム・クラスを関連付ける

 ライブラリのムービークリップを元に,インスタンスを二つステージに配置します(図6)。さらにスクリプト用のレイヤーを一つ追加し,1フレーム目に次のようなコードを記述します(リスト1)。

図6: ステージに直接インスタンスを配置

リスト1: スクリプト用レイヤーの1フレーム目に書くコード

var _piyo:MovieClip;
for(var i:Number=0;i<4;i++){
  //カスタム・クラスを割り当てたムービークリップのインスタンスを
  //識別子を使って生成
  _piyo=_root.attachMovie("Piyosan","piyo"+i,i)
  //初期位置のセット(MovieClipクラスのプロパティの利用)
  _piyo._x=Math.random()*100
  _piyo._y=230-50*i
}

 ムービープレビューで動きを確認してみましょう。あらかじめステージに配置しておいた二つのインスタンスと,スクリプトから配置した四つのインスタンス,合計六つのインスタンスが画面上を右方向へと移動することが確認できます(図7)。

図7: 実行結果(クリックするとムービーを表示します)

 この時の[出力]パネルを見てみましょう。「コンストラクタ実行」と6回表示されていますね(図8)。つまり,直接ステージへと配置したインスタンスも,スクリプトからattachMovieメソッドを使って配置したインスタンスも,その両方がムービークリップに関連付けられたクラスである「ClayDollクラス」の処理をきちんと実行している,ということを確認できます。

図8: [出力]パネル

 Flash8では,このように,リンケージの設定を行ったムービークリップに,さらにカスタム・クラスを関連付けることによって,そのムービークリップからインスタンスを生成した際に,カスタム・クラスに用意した処理を利用できるようになります。