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 是 alpha 值(都在 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);
}

或者对于没有 alpha 的颜色:

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() 选项(恕我直言)。

于 2013-01-23T14:22:02.977 回答