我正在尝试使用beginGradientFill
和drawRect
在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
的范围内时,一切正常:
但是,如果矩形位于容器边界之外,则根本不绘制渐变。例如,如果代码更改为:
...
var x:Number = 10;
var y:Number = 10;
...
然后渐变消失:
如果不需要在父级边界内绘制框来进行数学运算(并修正渐变以使其看起来正确),有什么办法可以解决这个问题吗?
答案 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
对象的对象。