Flash:渐变填充在其父级边界之外绘制时会消失吗?

时间:2010-11-19 21:15:39

标签: flash gradient

我正在尝试使用beginGradientFilldrawRect在Flash中绘制渐变,但是当绘制的rect部分位于父级的边界之外时,根本不会绘制渐变。

例如,请考虑以下代码:

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

当绘制的矩形位于container的范围内时,一切正常:

working gradient

但是,如果矩形位于容器边界之外,则根本不绘制渐变。例如,如果代码更改为:

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

然后渐变消失:

broken gradient

如果不需要在父级边界内绘制框来进行数学运算(并修正渐变以使其看起来正确),有什么办法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

我认为您的问题是您在比率计算中使用x / y位置,这可能会导致越界值。

使用你的比率calc,当x / y都为零时,你得到一个很好的平滑渐变:

ratios = [0,255]

但是,例如,当您将x / y设置为10时,您的比率数组将变为

ratios = [25.5,280.5]

无效。 ratios需要是0-255之间的线性整数系列。超出边界会导致忽略变量。

如果您想要一致的渐变,无论其x / y位置如何,都可以硬编码您的ratios var,或者对您在比率数组中输入的值进行一些检查以确保它们在0-之间255。

请记住,在图形对象上调用drawRect时,x / y / width / height是相对于您正在操作的graphics对象的对象。

希望有所帮助。