ActionScript drawRoundRect рендеринг размытых углов - PullRequest
1 голос
/ 09 июля 2009

Я использую функцию AS3 drawRoundRect, как показано в следующем фрагменте:

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

Как видите, пиксельная подсказка включена.

Проблема, с которой я сталкиваюсь, состоит в том, что углы слишком сильно сглаживаются, они слишком размытые и даже не симметричные на приведенном фрагменте. Честно говоря, функция drawRoundRect рисует самые уродливые скругленные прямоугольники, которые я когда-либо видел.

Есть ли способ заставить AS3 рисовать больше четких прямоугольников?

Спасибо! :)

Ответы [ 4 ]

3 голосов
/ 09 июля 2009

заливки отображаются намного лучше, чем строки. как вы можете видеть здесь:

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);

ну, это не СООООООООООО невероятно лучше ...: -S ... но, по крайней мере, его симметрично ... и пятна на углах больше похожи на маленькие бусинки ...: -D

Greetz

back2dos

1 голос
/ 11 января 2012

Когда вы используете drawRoundRect, установите X равным половине толщины, и тогда толщина будет на округленном пикселе. В этом случае попробуйте:

g.lineStyle(1, 0x808080, 1, true);
g.drawRoundRect(0.5, 0.5, 99, 23, 12, 12);
1 голос
/ 09 июля 2009

У меня тоже была такая же сделка. Один из хакерских приемов, который вы можете попробовать, - применить фильтр незначительных размытостей к родительскому объекту.

Похоже, вы используете метод drawRoundRect класса Graphics.

Если объект, с которым вы работаете, является UIComponent, вы можете попробовать использовать метод drawRoundRect UIComponent. Для значения cornerRadius требуется объект, а не значения ширины и высоты эллипса. Я не уверен на 100%, что значение cornerRadius не преобразуется в ширину и высоту эллипса, но, похоже, стоит попробовать.

Также вы можете попробовать drawRoundRectComplex класса GraphicsUtil. Требуется число для радиуса каждого угла. Опять же, не совсем уверен, что в конечном итоге он не использует ту же базовую механику, что и drawRoundRect.

1 голос
/ 09 июля 2009

У меня были подобные проблемы в прошлом. Обычно это сводилось к тому, что один из видеороликов вдоль пути показа не находился на четном пикселе. Затем Flash пытается отобразить дробные пиксели, чего не может сделать, что привело к искажению и размытости.

Итак, убедитесь, что все ваши мувиклипы / спрайты находятся на четном пикселе (я знаю, что вы рисуете прямоугольник на четных пикселях, но если объект отображения, которому он принадлежит, или любой из его родителей не находится на четном пикселе , это будет причиной проблемы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...