2010-11-19 29 views
0

J'essaie de dessiner un dégradé dans Flash en utilisant beginGradientFill et drawRect, mais lorsque le rect tracé est partiellement en dehors des limites du parent, le dégradé n'est pas dessiné du tout.Flash: le remplissage dégradé disparaît lorsqu'il est dessiné hors des limites de son parent?

Par exemple, considérons le code ci-dessous:

function testGradient():void { 
    var g:Graphics = container.graphics; 
    var width:Number = container.width; 
    var height:Number = container.height; 
    var y:Number = 0; 
    var x:Number = 0; 
    var ratios:Array = [255 * y/height, 255 * (y + height)/height]; 
    g.beginGradientFill(GradientType.LINEAR, [0xFF, 0xFF], [0.6, 0], 
         ratios, null); 
    g.lineStyle(1, 0xFF0000); 
    g.drawRect(x, y, width, height); 
    g.endFill(); 
} 

Lorsque le rectangle en cours se trouve dans les limites de container, tout fonctionne:

working gradient

Cependant, si le rectangle se trouve à l'extérieur des limites du conteneur, le gradient n'est pas dessiné du tout. Par exemple, si le code est remplacé par:

... 
var x:Number = 10; 
var y:Number = 10; 
... 

Ensuite, le gradient disparait:

broken gradient

court de faire le calcul nécessaire pour dessiner la boîte à l'intérieur des limites de la société mère (et la fixation en haut du dégradé, cela semble correct), y a-t-il un moyen de gérer cela?

Répondre

1

Je pense que votre problème est que vous utilisez les positions x/y dans vos calculs de rapport, ce qui peut conduire à des valeurs hors limites.

en utilisant votre rapport calc, lorsque x/y sont tous deux à zéro, alors vous obtenez un gradient bien lisse:

ratios = [0,255]

cependant, lorsque, par exemple, définir x/y à 10, votre tableau ratios devient

ratios = [25.5,280.5]

qui est invalide. ratios doit être une série linéaire d'entiers de 0 à 255. Le dépassement des limites entraîne l'ignorance de la variable. Soit vous codez en dur votre ratios var si vous voulez des dégradés consistants pour votre boîte quelle que soit sa position x/y, ou faites des bornes en vérifiant les valeurs que vous entrez dans le tableau de ratio pour vous assurer qu'elles sont comprises entre 0 et 255. N'oubliez pas que lorsque vous appelez drawRect sur un objet graphique, les valeurs x/y/width/height sont relatives à l'objet dont vous manipulez l'objet graphics.

espérons que cela aide.