« オーバーライド/ポリモーフィズム | メイン | ダイナミッククラスを作る »
MovieClipクラスの拡張
MovieClipクラスを拡張する場合には、リンケージプロパティでムービークリップシンボルとクラス定義ファイルとの関連付けを行うことができます。関連付けを行うと、シンボルからムービークリップインスタンスを作るだけで、そのインスタンスではアクションを書き込まずとも関連付けておいたクラスのプロパティとメソッドを利用できるようになります。この場合にもパブリッシュしたswfにクラス定義ファイルを付けて配布する必要はありません。
次のRolloverクラスには、ムービークリップインスタンスにカーソルをロールオーバーするとインスタンスの縦横サイズが150%に拡大し、ロールアウトすると元の100%のサイズに戻す2つの機能があります。extends MovieClipのようにMovieClipクラスを継承している点に注目してください。
sample→ex04-03/exMC/Rollover.as
クラス定義ファイル:Rollover.as
//MovieClipクラスの継承
class Rollover extends MovieClip {
//コンストラクタ
function Rollover(){
}
//ロールオーバーしたら150%サイズ
function onRollOver() {
_xscale = 150;
_yscale = 150;
}
//ロールアウトしたら100%サイズ
function onRollOut() {
_xscale = 100;
_yscale = 100;
}
}
このRolloverクラスをムービークリップシンボルと関連付けるには、ムービークリップシンボルをライブラリウィンドウで選択して[リンケージ...]を開きます。続いて[ActionScriptに書き出し]をチェックし[識別子]と[AS2.0クラス]を指定します。[AS2.0クラス]フィールドにはクラス名のRolloverを入力します。
図4-3-2 ムービークリップシンボルのリンケージプロパティを開き、識別子とAS2.0クラスを設定します。
ムービークリップシンボルとクラスとの関連付けが終わったならば、シンボルをステージにドロップしてインスタンスを作ります。ムービーをプレビューするとロールオーバー/ロールアウトでRolloverクラスで指定しているようにサイズが変わることがわかります。
sample→ex04-03/exMC/rollovermc.fla
図4-3-3 シンボルから作ったインスタンスはロールオーバーで拡大します。
もう1つサンプルを試してみましょう。次のRotorクラスはクリックで回転と停止を切り替える機能があります。このRotorクラスもまたMovieClipクラスを継承しています。
sample→ex04-03/exMC/RotorMC.as
クラス定義ファイル:RotorMC.as
//MovieClipクラスを継承する
//MovieClipクラスを継承する
class RotorMC extends MovieClip {
var speed:Number = 10;
//コンストラクタ
function RotorMC() {
}
//クリックでスイッチング
function onPress() {
if (typeof (onEnterFrame) == "function") {
//回転を止める
delete onEnterFrame;
} else {
//回転し続ける
onEnterFrame = function () {
_rotation += speed;
};
}
}
}
続いて、Rollクラスのときと同じようにRotorクラスをムービークリップシンボルのリンケージパネルを開いて関連付けます。
図4-3-4 ムービークリップシンボルのリンケージプロパティを開き、識別子とAS2.0クラスを設定します。
ムービークリップシンボルとクラスとの関連付けが終わったならば、シンボルをステージにドロップしてインスタンスを作ります。ムービーをプレビューしてインスタンスをクリックすると回転と停止が切り替わります。
図4-3-5 クリックで回転と停止が切り替わります。
attachMovie()メソッドを使えば、ムービークリップのインスタンスをスクリプトで作ることができます。次のスクリプトは、ムービーを再生中にリンケージシンボルstarMCからインスタンスを3個作ります。リンケージシンボルstarMCにはRotorMCクラスが関連付けてあるので、クリックで回転と停止が切り替わるインスタンスになります。
フレームアクション:attachmc.fla
this.makemc();
function makemc() {
for (i = 1; i <= 3; i++) {
var depth = this.getNextHighestDepth();
var x = 50 * i;
var y = 30 * i;
var props = {_x:x, _y:y};
var mcname = "star" + depth;
//ムービークリップシンボルのインスタンスを作る
this.attachMovie("starMC", mcname, depth, props);
}
}
図4-3-6 attachMovie()メソッドを使ってリンケージシンボルからインスタンスを作成します。
note:
ムービークリップシンボルとクラスの関連付けはObject.registerClass()を使って行うこともできますが、ActionScript2.0ではリンケージプロパティで関連付けます。
*訂正 (2006.06.19 )
初版のp.141のスクリプトに間違いがありました。
誤:
class RotorMC extends MovieClip{
正:
class Rollover extends MovieClip {
投稿者 oshige : 2005年2月23日 10:38