MovieClipクラスのサブクラスを作成する

実演

コード

mtasc07.as
class mtasc07
{
    // カウンター
    static var n:Number=0;
    
    public static function main()
    {
        // 毎フレーム次の処理を行う
        _root.onEnterFrame = function()
        {
            // 20フレームに一回、花が散る
            if(mtasc07.n++%20==0) { mtasc07.addFlour(); }
        }
        // マウスが動いても花が散る
        _root.onMouseMove = function() { if(mtasc07.n%5==0) { mtasc07.n++; mtasc07.addFlour(); } }
    }
    
    public static function addFlour()
    {
        // 花を追加する
        var flour:MovieClip = _root.attachMovie(Flour.SymbolName, "flour"+mtasc07.n, _root.getNextHighestDepth());
        flour._x = _root._xmouse;
        flour._y = _root._ymouse;
    }
}
flour.as
class Flour extends MovieClip
{
    // AttachMovieで追加するのに必要
    static var SymbolName = "__Packages.Flour";
    static var SymbolOwner = Flour;
    static var SymbolLinked = Object.registerClass(SymbolName, SymbolOwner);
    
    // 花の画像
    var pic : MovieClip;
    
    // コンストラクタ
    function Flour()
    {
        // 花の画像を読み込み
        createEmptyMovieClip("pic", getNextHighestDepth());
        pic.createEmptyMovieClip("pic2", pic.getNextHighestDepth());
        pic.pic2.loadMovie("pic.swf");
        pic._x = -120;
        pic._y = -120;
        
        // 大きさはランダム
        _xscale = _yscale = Math.random()*10+20;
        
        // 最初は透明
        _alpha = 0;
    }
    
    // 毎フレーム呼び出される関数
    function onEnterFrame()
    {
        // 下に落ちていく
        _y += 5;

        // もし、透明なら少しずつ見えるように
        _alpha+=5;

        // 一番下まで落ちたら自分自身を削除する
        if(_y-_height > 480)
        {
            unloadMovie()
        }
        
        // 回る
        _rotation += 10;
    }
}

解説

MovieClipクラスを継承して、固有の機能を持ったMovieClipを作成することができます。継承とは、オブジェクト指向の概念の一つです。詳しくは継承(マクロメディア社のASリファレンス)をご覧下さい。
MTASCでは、一つのクラスを一つのファイルに記述します。今回はMovieClipクラスを継承したFlourクラスをflour.asに記述しています。Flourクラスは、花の画像を回転落下しながら表示するという機能を持ったMovieClipのサブクラスです。
MovieClipクラスのサブクラス(MovieClipを継承したクラス)は、生成の仕方が普通のクラスと異なります。まず、クラスを定義している部分(flour.as)に次の記述を追加します。
// AttachMovieで追加するのに必要
static var SymbolName = "__Packages.Flour";
static var SymbolOwner = Flour;
static var SymbolLinked = Object.registerClass(SymbolName, SymbolOwner);
一行目と二行目のFlourには、クラスの名前が入ります。三行目で、このクラスを登録しています。登録されたクラスは、AttachMovieで呼び出すことができます。
呼び出し側(mtasc07.as)には次のように記述します。
<Flourを追加したいMovieClip>.attachMovie(Flour.SymbolName, <インスタンス名>, <深度>);
attachMovieのid部分にFlourのスタティック変数Flour.SymbolNameを指定することで、Flourクラスを生成・表示することができます。サンプルでは、一定時間毎、またマウスが動くたびにFlourムービークリップを生成しています。生成されたFlourムービークリップは、自動的に回転しながら落下していきます。
上記サンプルは二つの部品に分かれています。Flourクラスとmtasc07クラスです。Flourクラスには花がどのように落ちるか。例えば、回転や落下に必要なプログラムが書かれています。一方、mtasc07クラスには、どのタイミングでFlourクラスを作成するのかが、書かれています。プログラムを部品に分けることでコードが見やすくなり、開発が効率的になります。これがオブジェクト指向の良いところです。オブジェクト指向については、クラス(マクロメディア社のASリファレンス)をご覧下さい。

サンプルファイル

mtasc07.zip (66.8KB)

<<   戻る   >>

(c)ひだちのいろ 2004-2007