我有以下课程,代表一个红色圆圈:
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();
}
它有效,但我相信这只会在第一个圈子之上绘制另一个圈子。
有没有办法改变第一个圆圈的颜色而不是画另一个颜色?
答案 0 :(得分: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()选项(imho)。