2009-07-08 6 views
1

j'utilise la fonction drawRoundRect AS3 comme dans l'extrait suivant:ActionScript drawRoundRect rendu les coins floues

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

Comme vous pouvez le voir, laissant entendre de pixel est allumé. Le problème que j'ai est que les coins sont trop anti-aliasés, ils sont trop flous et pas même symétriques sur l'extrait ci-dessus. Franchement, la fonction drawRoundRect dessine les rectangles arrondis les plus laids que j'ai jamais vus.

Existe-t-il un moyen de faire en sorte que l'AS3 dessine des rectangles plus nets?

Merci! :)

Répondre

3

Les remplissages sont rendus beaucoup mieux que les lignes. comme vous pouvez le voir ici:

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

, il est sooooooooooo unincredibly mieux ...: -S ... mais au moins son ... et les symetric sur les coins des taches sont plus comme des petites perles. .. :-D

greetz

back2dos

+0

J'ai utilisé votre astuce avec la fonction drawRoundRectComplex de rhtx, en superposant le plus petit rectangle sur un rectangle légèrement plus grand, qui sert de bordure. Ce n'est pas parfait, mais au moins semble un peu mieux. –

1

J'ai eu des problèmes similaires dans le passé. En général, l'un des MovieClips de la piste d'affichage ne se trouvait pas sur un pixel pair. Flash essaie alors de rendre les pixels fractionnaires, ce qui ne peut pas être fait, ce qui provoque une distorsion et un flou. Donc, assurez-vous que tous vos MovieClips/Sprites sont sur un pixel pair (je sais que vous dessinez le rect sur les pixels pairs, mais si l'objet d'affichage auquel il appartient, ou l'un de ses parents ne sont pas sur un pair pixel, cela causerait le problème).

+0

Je m'assurais que je dessine sur des pixels pairs, pas de valeurs comme 1,5 etc. J'ai essayé de jouer avec des valeurs différentes, mais en vain. –

1

J'ai eu la même affaire, aussi bien. Une astuce hacky que vous pourriez essayer est d'appliquer un filtre de flou mineur à l'objet parental.

Il semble que vous utilisiez la méthode drawRoundRect de la classe Graphics.

Si l'objet que vous utilisez est un composant UIComponent, vous pouvez essayer d'utiliser la méthode drawRoundRect de UIComponent. Il prend un objet pour la valeur cornerRadius, plutôt que de définir des valeurs de largeur et de hauteur d'ellipse. Je ne suis pas sûr à 100% que la valeur cornerRadius n'est pas convertie en ellipse largeur et hauteur, mais il semble que ce serait quelque chose à essayer.

En outre, vous pouvez essayer le drawRoundRectComplex de la classe GraphicsUtil. Il faut un nombre pour le rayon de chaque coin. Encore une fois, pas tout à fait sûr qu'il n'utilise pas finalement la même mécanique sous-jacente que drawRoundRect.

+0

Votre commentaire a beaucoup aidé, la fonction drawRoundRectComplex est au moins, beaucoup plus symétrique que l'autre drawRoundRect. –

1

Lorsque vous utilisez drawRoundRect ensemble X à la moitié de l'épaisseur, puis sera épaisseur être sur pixel arrondi. Dans ce cas, essayez:

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

Ca marche pour moi! Je ne comprends pas vraiment pourquoi mais ... ça marche! – tibo