2010-11-19 1 views
0

は私がbeginGradientFilldrawRectを使用してFlashでのグラデーションを描画しようとしているが、描かれている矩形は親の境界外の一部であるとき、勾配は全く描かれていません。Flash:グラデーションの塗りが親の境界の外に描画されると消えますか?

は、例えば、以下のコードを検討:矩形がcontainerの範囲内で嘘を描かれているとき

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

を、すべてが動作します:

working gradient

をしかし、矩形が外側にある場合コンテナの境界のうち、勾配はまったく描画されません。

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

はその後勾配が消える:たとえば、コードに変更された場合

親の境界内部ボックスを描画するために必要な計算を行う(定着の

broken gradient

ショートそれが正しいようにグラデーションをアップ)、これに対処する方法はありますか?

答えて

1

私はあなたの問題は、あなたの比率計算でのx/y座標を使用していて、それが範囲外の値につながる可能ということだと思います。

のx/yが両方ともゼロであるとき、あなたは素敵ななめらかなグラデーションを取得し、あなたの比率CALCを使用して:

ratios = [0,255]しかし

、あなたは、例えば、10にX/Yを設定すると、お使いの比配列は無効である

ratios = [25.5,280.5]

となります。 ratiosは、0〜255の整数の線形シリーズである必要があります。境界を超過すると、変数は無視されます。

x/yの位置に関係なく、一定のグラデーションボックスを使用する場合は、ratios varをハードコードするか、比の配列に入力する値を境界として0-255の範囲であることを確認します。

グラフィックオブジェクト上でdrawRectを呼び出すとき、x/y /幅/高さは、graphicsオブジェクトを操作しているオブジェクトからの相対値であることに注意してください。助け

希望。

関連する問題