« クラス定義からインスタンスを作る | メイン | プロパティのインライン初期化 »

メソッドとプロパティ

クラス定義のもう少し具体的な例として、メンバーすなわちメソッドやプロパティをもったクラスを定義してみましょう。メンバーにはクラスメンバーとインスタンスメンバーがありますが、ここではインスタンスメンバーだけを使っています。両者の違いとクラスメンバーについては改めて説明します(クラスメンバーとインスタンスメンバー→p.??)。
次のMyClass01クラス定義には、プロパティmcとcircleメソッドが定義してあります。mcは操作対象となるムービークリップインスタンスの参照でクラスからインスタンスを作る際に引数から受け取って値を入れます。スクリプトで示すようにプロパティはコンストラクタ関数より前にvarで宣言します。circleメソッドは引数で指定したxy座標を中心とする半径rの円周上を回転角度dずつインスタンスを移動させるメソッドです。インスタンスは円周に沿った座標移動と同時に円の中心点を向くように自転します。

sample→ex04-01/MyClass01フォルダ

クラス定義ファイル:MyClass01.as
//MyClass01クラス
class MyClass01 {
//プロパティ
var mc:MovieClip;
//コンストラクタ
function MyClass01(target:MovieClip) {
mc = target;
}
//常に中心(x,y)を向くように円周を回る
function circle(x:Number, y:Number, r:Number, d:Number):Void {
//d度ずつ回転
mc._rotation += d;
var rad = mc._rotation * Math.PI / 180;
//中心座標(x,y)、半径rの円のradラジアン回転した点の座標
mc._x = x + r * Math.cos(rad);
mc._y = y + r * Math.sin(rad);
}
}

次のムービーでは、このMyClass01クラスを使ってムービークリップインスタンスのアニメーションを行っています。ステージには正方形のcenter_mcと長方形のbar_mcの2つのインスタンスがあります。ムービーをパブリッシュして確認するとbar_mcを引数としてMyClass01クラスのbarObjが作られるので、barObjのmcプロパティの値がbar_mcになります。
フレームが進むたびにbar_mcインスタンスのonEnterFrameイベントハンドラが実行されるので、barObjのcircle()メソッドが実行されてcenter_mcの周りをbar_mcが回ります。

フレームアクション:methodTest2.fla
//MyClass01クラスからインスタンスbarObjを作る
var barObj:MyClass01 = new MyClass01(bar_mc);
//毎フレームに実行
bar_mc.onEnterFrame = function() {
var x = center_mc._x;
var y = center_mc._y;
var r = 100;
var d = 10;
//barObjインスタンスのcircle()メソッドを実行する
barObj.circle(x, y, r, d);
};


図4-1-7 center_mcを円の中心としてその周りをbar_mcが回ります。

さらにcenter_mcもcircle()メソッドで動くようにすると、bar_mcの動きは公転する地球の周りを月が回るような動きになります。利用するクラス定義ファイルは同じなのでフレームアクションだけを書き換えます。

フレームアクション:methodTest3.fla
//インスタンスの生成
var centerObj:MyClass01 = new MyClass01(center_mc);
var barObj:MyClass01 = new MyClass01(bar_mc);
//円を描くようにcenter_mcを動かす
center_mc.onEnterFrame = function() {
var x = Stage.width / 2;
var y = Stage.height / 2;
var r = 100;
var d = 5;
var centerObj.circle(x, y, r, d);
};
//center_mcの周りを回る
bar_mc.onEnterFrame = function() {
var x = center_mc._x;
var y = center_mc._y;
var r = 100;
var d = 10;
barObj.circle(x, y, r, d);
};

図4-1-8 円を描いて回るcenter_mcの周りをbar_mcが回ります。どちらもMyClass01()クラスのcircle()メソッドを使っています。

なお、Windows版でムービープレビューを行った場合にはcenter_mcがステージからはみだした位置で円を描きますが、ブラウザまたはFlash Playerでswfを再生すればステージの中央を中心点として円を描きます。

投稿者 oshige : 2005年2月21日 11:16