0

を拡張するカスタム クラスがありますMovieClip。アイデアは、追加の変数と に関する情報を格納できるようにすることですMovieClip

public class MapObject extends MovieClip
{
    private var cellX:int;
    private var cellY:int;

    public function MapObject()
    {
    }
 }

MovieClips実行時にロードする (.swf ファイル)がいくつかあります。問題は、これらの MovieClip オブジェクトを実際にオブジェクトにするにはどうすればよいかということMapObjectです。

私はもう試した :

var mapObject:MapObject = myMovieClip as MapObject;

しかし、それは与えますnull

PS。MovieClips に変数を動的に追加できることは知っていますが、実際にはそうしたくありません。

4

1 に答える 1

2

コードを変更せずにクラス階層を変更することはできません。MapObject親クラスをの代わりに変更するには、各クラス定義に移動する必要がありMovieClipます。

デコレータを使用することで構成される簡単でクリーンなソリューションがあります。

public class MapObject {

    private var mc:MovieClip;
    private var cellX:int;
    private var cellY:int;

    public class MapObject(mc:MovieClip) {
        this.mc = mc;
    }

    public function get movieClip():MovieClip {
        return mc;
    }
}
...

var wrapper:MapObject = new MapObject(new MyMovieClip());
...

container.addChild(wrapper.movieClip);

これは、機能を追加するために別のクラス(この場合はMovieClip)のインスタンスを取得するラッパーです。変更するたびに各サブクラスに移動して変更する必要がないため、非常に強力ですMapObject。この原則は、継承よりも合成と呼ばれます。

あなたの場合、のすべてのメソッドとプロパティはパブリックであるため、の代わりにMovieClip書くだけです。mc.play()this.play()

デコレータデザインパターンの詳細を参照してください。

于 2012-10-29T12:31:41.740 に答える