ActionScript 3.0で始めるオブジェクト指向スクリプティング

第22回 MovieClipシンボルにクラスを定義する

この記事を読むのに必要な時間:およそ 6.5 分

では,まずは空のカスタムクラスEllipticMotionを定義して,MovieClipシンボルにそのクラスを設定してみよう。EllipticMotionクラスの定義は,以下のようになる。コンストラクタメソッド内には,確認のためにtrace()ステートメントを記述して,クラスが設定されたインスタンスのxy座標値とインスタンス自身の参照を[出力]することにした。なお,クラス定義ファイルは,それを設定するMovieClipシンボルが[ライブラリ]に納められているFlashムービー(FLA)ファイルと同階層に保存する。

// ActionScript 3.0クラス定義ファイル: EllipticMotion.as
package {
  import flash.display.MovieClip;
  public class EllipticMotion extends MovieClip {
    public function EllipticMotion() {
      trace(x, y, this);
    }
  }
}

このままではまだクラスEllipticMotionとMovieClipシンボルの間には何の関わりもない。このふたつを関連づけるには,[ライブラリ]のMovieClipシンボルを選び,[シンボルプロパティ]のダイアログボックスで[クラス]フィールドにカスタムクラス名"EllipticMotion"を入力する必要がある※2⁠。

図3 [シンボルプロパティ]のダイアログボックスで[クラス]を設定

図3 [シンボルプロパティ]のダイアログボックスで[クラス]を設定

クラスの設定されたMovieClipシンボルのインスタンスは,スクリプトで動的につくることにしよう。ステージには何も置かず,MovieClipシンボルが納められたFlashムービー(FLA)ファイルに以下のフレームアクションを記述する。このステートメントは,クラスEllipticMotionのコンストラクタメソッドを呼出し,インスタンスを生成している。

var my_mc:EllipticMotion = new EllipticMotion();

[ムービープレビュー]を行うと,コンストラクタ内でtrace()関数に渡したインスタンスのDisplayObject.xとDisplayObject.yプロパティ値,ならびにインスタンスのthis参照が[出力]パネルに表示される。しかし,インスタンスがステージに表れない図4⁠。

図4 xy座標値と参照は[出力]されてもインスタンスがステージに表示されない

図4 xy座標値と参照は[出力]されてもインスタンスがステージに表示されない

これはインスタンスを作成しただけではまだそれはメモリ上の存在で,いずれのタイムラインにも属していないからだ。Flash Playerのステージは,Stageインスタンスを頂点としたインスタンスのツリー構造でできあがっている図5⁠。ステージ上に表示されるためには,いずれかのインスタンスの子として,このツリー構造に加わらなければならない。

そのためには,親とすべきインスタンスを参照して,DisplayObjectContainer.addChild()メソッドを呼出し,その引数に子として追加したいインスタンスを渡す。なお,そうして加えられた子インスタンスは,親インスタンスの「表示リスト」という容れ物に納められる※3⁠。

親インスタンス.addChild(子インスタンス)

図5 ステージはStageインスタンスを頂点としたツリー構造

図5 ステージはStageインスタンスを頂点としたツリー構造

では,フレームアクションにDisplayObjectContainer.addChild()メソッドの呼出しをステートメントとして加える。ターゲットはスクリプトを記述しているメインタイムラインなので,参照は省略した。[ムービープレビュー] してみると,今度はインスタンスがステージ上に表示される図6⁠。なお,インスタンスのxy座標も,ステージ中央に設定した。

var my_mc:EllipticMotion = new EllipticMotion();
addChild(my_mc);
my_mc.x = stage.stageWidth / 2;
my_mc.y = stage.stageHeight / 2;

図6 表示リストに加えられてステージに表示されたインスタンス

図6 表示リストに加えられてステージに表示されたインスタンス

※2)
[シンボルプロパティ]ダイアログボックスを表示するには,[ライブラリ]のオプションポップアップメニュー(もしくはシンボルを右クリックしてショートカットメニュー)から[プロパティ]を選択する。[リンケージ]の[ActionScript用に書き出し]をチェックすると,[クラス]が入力できる (デフォルトで,[1フレーム目に書き出し]がチェックされる)。
※3)
「表示リスト」に入れてステージ上に表示できるのは,DisplayObjectクラス(およびそのサブクラス)のインスタンスだ。他方で,⁠表示リスト」を備え,子インスタンスをもつことができるのは,DisplayObjectContainerクラス(およびそのサブクラス)のインスタンスである。なお,DisplayObjectContainerは,DisplayObjectクラスを継承する。

著者プロフィール

野中文雄(のなかふみお)

ソフトウェアトレーナー,テクニカルライター,オーサリングエンジニア。上智大学法学部卒,慶応義塾大学大学院経営管理研究科修士課程修了(MBA)。独立系パソコン販売会社で,総務・人事,企画,外資系企業担当営業などに携わる。その後,マルチメディアコンテンツ制作会社に転職。ソフトウェアトレーニング,コンテンツ制作などの業務を担当する。2001年11月に独立。Web制作者に向けた情報発信プロジェクトF-siteにも参加する。株式会社ロクナナ取締役(非常勤)。

URLhttp://www.FumioNonaka.com/

著書