MovieClip Inheritance Total Solution Experiment v1.08


Download the source file


"MovieClip Inheritance Total Solution"はFlashオーサリングの一つの方法を提案するものです。
目的はコードとデザインの完全分離、及びパフォーマンスの効率化で、各ムービークリップには何一つ記述せず、すべてカスタムクラスから継承という方法を取ります。
又より直感的にするため、カスタムクラスをムービークリップと同様の階層構造にします。
これらのことを"TK Event Engine"(ステージに置かれているカラのMC "eventEngine")と "Inheritance All-Rounder"を使って実現している例がこの"MovieClip Inheritance Total Solution"です。

下はソースファイルからパブリッシュされた、簡単な例を示すswfファイルです。

 



- _root上にシングルフレームのムービークリップ"holder"
- その"holder"の中にシングルフレームのムービークリップ"asterisk1" と "asterisk2"
- _root上に以下のコードが書かれたstart/stop button

on(press) {
        onPress();
}

- ステージ上にMC"eventEngine"(コードは#include)
- "Inheritance All-Rounder" は_rootのフレームに#include
- _rootのフレーム2に以下のコード


////////////////////////// MovieClip Inheritance Total Solution 1.08 ////////////////////////////
//					                                      Jan.24.2002 Tatsuo Kato
/////////////////////////////////////////////////////////////////////////////////////////////////

/*
ムービークリップと同じ又は同様の名前を持つクラスを定義。
そしてより直感的にするために、ムービークリップと同じ階層構造を成すようにクラスをネスト。
そして最後に全てまとめて各ムービークリップがそれぞれ対応するクラスを継承。
クラスは他のクラスから継承可。
*/

//_rootが継承するクラスを定義
Root = function (oArgs) {
        this.centerX = oArgs.centerX;
        this.centerY = oArgs.centerY;

        //mc 'holder'が継承するクラスを定義
        var Holder = function () {
                this._x = _parent.centerX;
                this._y = _parent.centerY;
                
                //mc 'asterisk1' と 'asterisk2' が継承するクラスを定義
                var Asterisk = function (oArgs) {
                        this._x = oArgs.posX;
                }

                //'Asterisk"クラスに'Holder'クラスを継承させる
                Object.inheritPrototype(Asterisk, arguments.callee);

                //mc 'asterisk1' と 'asterisk2' に'Asterisk"クラスから継承させる
                this.asterisk1.inherit(Asterisk, {posX: -50});
                this.asterisk2.inherit(Asterisk, {posX: 50});
        }

        //mc'holder'が使うメソッドをHolder.prototypeに定義
    //そしてそれは同時に'Asterisk'クラス経由でmc 'asterisk1' と 'asterisk2' にも継承。
        Holder.prototype.rotate = function (oArgs) {
                _rotation += oArgs.degree * oArgs.dir;
        }

    //'Holder'クラスに'Root'クラスから継承させる。
        Object.inheritPrototype(Holder, arguments.callee);

        //mc 'holder' に'Holder'クラスから継承させる。
        this.holder.inherit(Holder);
}

//動作確認のためmc "asterisk1" と "asterisk2" が使うメソッドを'Root'クラスに定義して
//'Holder'クラスと'Asterisk'クラス経由でmc "asterisk1" と "asterisk2" に継承。
Root.prototype.changeAlpha = function () {
        if (changed = !changed) {
                _alpha = 30;
        } else {
                _alpha = 100;
        }
}

//_rootに置かれたstart/stopボタンが使うメソッドを定義
Root.prototype.onPress = function () {
        if (pressed = !pressed) {
                eventEngine.subscribe("enterFrame", "_root.holder.asterisk1.rotate", {degree:10, dir:-1});
                eventEngine.subscribe("enterFrame", "_root.holder.asterisk2.rotate", {degree:10, dir:-1});
                eventEngine.subscribe("enterFrame", "_root.holder.rotate", {degree:2, dir:1});
                _root.holder.asterisk1.changeAlpha();
                _root.holder.asterisk2.changeAlpha();
        } else {
                delete eventEngine["enterFrame"];
        }
}

//_rootに'Root'クラスから継承させる。これは同時に上記の全ての継承を実行。
_root.inherit(Root, {centerX:200, centerY:75});
delete Root;
/////////////////////////////////////////////////////////////////////////////////////////////////

Back to Flash Home

Copyright©2000-2002 STUDIO FIRST RAYS. All rights reserved