1

flash.display.Graphicsクラスが最終的なものであり、拡張することも、スプライト内のオブジェクトを置き換えることもできないことを私は知っています。しかし、その動作を変更するか、変更された動作を偽造する必要があります。通常、OOP では、クラスを拡張し、そのメソッドをオーバーライドして、必要に応じてスーパー メソッドを呼び出します。しかし、それは不可能なので、それGraphicsを達成するための最良のテクニックは何ですか?

  • プロトタイピングは、私が望むようにクラスを変更するGraphics方法ですか?


円の代わりに四角形を描きたいとしましょう:

public class Graphics2 extends Graphics
{
    override public function drawCircle(x: NUmber, y: Number, radius: Number): void
    {
        super.drawRect(x - radius, y - radius, 2 * radius, 2 * radius);
    }
}

これが私がやりたかったことです。どうすればそれを偽造できますか? 最後に、さまざまな描画スタイルを表すオブジェクトが必要です。オブジェクトを置き換えると、Graphics2描画スタイル全体が変更されます (円が四角に変わるなど)。

4

1 に答える 1

1

独自のクラスを、拡張できないメソッドにマップしてみませんか?

public class Graphics2 {
    import flash.display.Graphics;
    public static function drawCircle(obj:DisplayObject, x:Number, y:Number, r:Number):void  {
        obj.Graphics.drawRect(x - radius, y - radius, 2 * radius, 2 * radius);
    }
}

オーバーライドできないクラスは常にそのままであり、それを拡張するクラスは常にその最終メソッドを使用するため、変更は実際の関数 (IMHO) にマップする必要があります。

于 2013-10-17T19:03:44.300 に答える