0

赤い円を表す次のクラスがあります。

public class AElement extends UIComponent {

    public var radius:int;

    override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
        graphics.beginFill(0xFF0000);
        graphics.drawCircle(x, y, radius);
        graphics.endFill();
    }

}

円の色を変更するメソッドを追加したいので、この解決策を思いつきました。

    public function updateColor(color:uint):void {
        graphics.beginFill(color);
        graphics.drawCircle(x, y, radius);
        graphics.endFill();
    }

それは機能しますが、これは最初の円の上に別の円を描くだけだと思います。

別の円を描く代わりに、最初の円の色を変更する方法はありますか?

4

1 に答える 1

3

描画を開始する前に.clear()を呼び出すだけです

public function updateColor(color:uint):void {
    graphics.clear();
    graphics.beginFill(color);
    graphics.drawCircle(x, y, radius);
    graphics.endFill();
}

その後、新しい色で再描画できます。

編集:

オブジェクトの色を変更するには、ColorTransformを使用できます。

myDisplayObject.transform.colorTransform = new ColorTransform(0, 0, 0, 0, r, g, b, a);

ここで、r、g、bは色の赤、緑、青の部分であり、aはアルファ値(すべて0〜255)です。例えば:

public function updateColor(color:uint):void {
    var a:int = (color&0xFF000000)>>24;
    var r:int = (color&0x00FF0000)>>16;
    var g:int = (color&0x0000FF00)>>8;
    var b:int = (color&0x000000FF);
    this.transform.colorTransform = new ColorTransform(0, 0, 0, 0, r, g, b, a);
}

またはアルファなしの色の場合:

public function updateColor(color:uint):void {
    var r:int = (color&0xFF0000)>>16;
    var g:int = (color&0x00FF00)>>8;
    var b:int = (color&0x0000FF);
    this.transform.colorTransform = new ColorTransform(0, 0, 0, 0, r, g, b, 255);
}

ただし、これは、グラフィックに描画されるものだけでなく、表示オブジェクト全体とすべての子に影響します。したがって、クラスに他のビジュアルオブジェクトが含まれていると仮定すると、clear()オプション(imho)を使用する方が適切です。

于 2013-01-23T14:22:02.977 に答える