ActionScript drawRoundRect渲染模糊角落

时间:2009-07-08 22:43:08

标签: actionscript-3

我正在使用AS3 drawRoundRect函数,如下面的代码片段所示:

g.lineStyle(1, 0x808080, 1, true);
g.drawRoundRect(0, 0, 100, 24, 12, 12);

如您所见,像素提示已开启。

我遇到的问题是角落反锯齿太多了,它们太模糊了,甚至在上面的片段中都不对称。坦率地说,drawRoundRect函数绘制了我见过的最丑的圆角矩形。

有没有办法让AS3绘制更清晰的矩形?

谢谢! :)

4 个答案:

答案 0 :(得分:3)

填充比线条好得多。正如你在这里看到的那样:

const thickness:Number = 1;
g.beginFill(0x080808);
g.drawRoundRect(0, 0, 100, 24, 12);
g.drawRoundRect(thickness, thickness, 100 - 2 * thickness, 24 - 2 * thickness, 12 - thickness);
g.endFill();
g.lineStyle(thickness, 0x080808, 1, true);
g.drawRoundRect(0, 50, 100, 24, 12);
好吧,它不是SOOOOOOOOOOO难以置信的更好......: - S ......但至少它的对称......而角落上的污迹更像是小珠...... :-D

格尔茨

back2dos

答案 1 :(得分:1)

过去我遇到过类似的问题。它通常归结为显示路径上的一个动画片段不在偶数像素上。然后,Flash会尝试渲染无法做到的小数像素,这会导致失真和模糊。

所以,确保所有的动画片段/精灵都在偶数像素上(我知道你在偶数像素上绘制矩形,但是如果它所属的显示对象,或者它的任何父素都不在偶数像素上,这会导致问题)。

答案 2 :(得分:1)

我也有同样的交易。您可以尝试的一个hacky技巧是对父对象应用次要模糊过滤器。

看起来你正在使用Graphics类的drawRoundRect方法。

如果您正在使用的对象是UIComponent,则可以尝试使用UIComponent的drawRoundRect方法。它需要一个Object作为cornerRadius值,而不是设置椭圆的宽度和高度值。我不是100%确定cornerRadius值没有转换为椭圆的宽度和高度,但似乎有点尝试。

此外,您可以尝试使用GraphicsUtil类的drawRoundRectComplex。每个角的半径需要一个数字。同样,并不完全确定它最终不会使用与drawRoundRect相同的基础机制。

答案 3 :(得分:1)

使用drawRoundRect时,将X设置为厚度的一半,然后厚度将为圆角像素。在这种情况下尝试:

g.lineStyle(1, 0x808080, 1, true);
g.drawRoundRect(0.5, 0.5, 99, 23, 12, 12);