2010-05-20 3 views
0

Je rencontre un problème étrange avec la bande entre certaines couleurs d'un dégradé.Problème de baguage de dégradé ActionScript

Pour créer le dégradé, je dessine des coins de cercle régulièrement espacés du centre vers la bordure, et remplit chaque coin de cercle à partir d'un pixel de gradient de ligne bitmap dans une boucle.

Je crée un cercle avec 3600 coins, bien qu'il ne semble pas basé sur la capture d'écran dans la couleur orange qui est produite à partir de la gradation du rouge au nombre jaune. l'ajout d'un nombre orange entre le rouge et le jaune n'aide pas. mais si je crée le cercle avec seulement 360 coins, la bande de gradient est beaucoup plus évidente. 3600 est probablement exagéré, et n'ajoute pas vraiment plus de détails sur, par exemple, faire le cercle de 1440 coins, mais je ne connais pas d'autre moyen d'élever légèrement ce problème de bande.

des idées comment je peux résoudre ce problème, ou ce que je fais mal? pourrait-il être causé par la rotation circleMatrix?

alt text http://www.freeimagehosting.net/uploads/7e3382befe.jpg

+0

a dû modifier quelques erreurs de copier-coller – TheDarkIn1978

Répondre

1

Edit: En raison d'une erreur de précision un artefact peut apparaître puisque vous avez seulement une gamme de 255 valeurs distribuer.

Pour atténuer cet effet visuel que vous pouvez essayer d'ajouter un peu de flou à votre bande de couleur, mais méfiez-vous de la jonction entre la gauche et le côté droit:

//... 

//Assign bitmapData to the leftToRightLine 
var leftToRightLineBitmapData:BitmapData = 
        new BitmapData(leftToRightLine.width,leftToRightLine.height); 
leftToRightLineBitmapData.draw(leftToRightLine); 

// add some blur filter to the color band 
leftToRightLine.filters=[new BlurFilter(2,0, 3)]; 

// copy the color band on the bitmap but but starting at 1 pixel right to avoid 
// the blur on the start 
leftToRightLineBitmapData.draw(leftToRightLine, new Matrix(1,0,0,1, 1)); 

for(var i:int = 1; i < (DEFAULT_BANDING_QUALITY + 1); i++) 
{ 
    //... 

Sans code complet pour tester, difficile de savoir si je vise dans la bonne direction;)

  • il y a une erreur dans votre conversion radians c'est i*Math.pi/180 et non /1800, maintenant vous peut aller à 360 et non 3600
  • pourquoi commencer à partir de 1 et non de 0?

  • essayer de jouer avec l'épaisseur de la ligne et utilisez les lineGradientStyle

  • Vous referer à un objMatrix mais créer un circleMatrix

+0

J'ai édité mon code pour tout montrer. J'espère que vous pouvez m'aider à comprendre l'erreur – TheDarkIn1978

+0

@ TheDarkIn1978 Ok, j'ai édité ma réponse – Patrick

+0

merci. J'espérais que ça ne devrait pas arriver à utiliser un filtre, mais ça fait l'affaire. plutôt que de l'ajouter à l'image bitmap, j'ai juste jeté un filtre 2px x 2px sur l'ensemble du sprite.aussi, j'ai réduit la qualité de bande par défaut à 720, car il semble identique à 3600, mais se charge beaucoup plus vite. Je suppose qu'ils ont l'air identiques en fonction de cette limite que vous avez mentionnée? Pouvez-vous donner une explication sur cette limite de distribution de 255, et que se passait-il réellement? – TheDarkIn1978

0

Je pense que le cerclage est causé par vos rapports.

Essayez ceci:

graphics.beginGradientFill(GradientType.LINEAR, [nColor, nColor], [1, 1], [0, 255], objMatrix) 

Aussi, devrait objMatrix être effectivement circleMatrix?

Vous pouvez voir la différence entre [127, 255] et [0, 255] dans le LiveDoc's

+0

les rapports sont de la centre dehors. J'ai mis à jour mon code pour que vous puissiez le faire entièrement. – TheDarkIn1978