2011-10-27 10 views
1

これは私の最初の投稿ですので、私はすべてのものが正しいことを願っています。Flash AS3リニアグラジエントローテーションの問題

Flash AS3では、矩形内にダイナミックグラデーションを作成しています。私は26度の回転を持つ勾配が必要です。私の問題は、回転が私の四角形の幅/高さに基づいて変化するようだということです。私はそれを適用するサイズの四角形に関係なく、回転が実際に26度である必要があります。あなたの問題は、このラインである

var rect:Shape=new Shape(); 
this.addChild(rect); 
rect.x=40; 
rect.y=70; 
var rectWidth:Number=200; 
var rectHeight:Number=100; 

drawShapes(); 

function drawShapes():void { 
var mat:Matrix; 
var colors:Array; 
var alphas:Array; 
var ratios:Array; 
//We proceed to draw 'rect'. 
mat=new Matrix(); 
colors=[0xFF0000, 0x00FF00, 0x001eff]; 
alphas=[1,1,1]; 
ratios=[0,120,255]; 

mat.createGradientBox(rectWidth,rectHeight,toRad(26)); 
rect.graphics.lineStyle(); 
rect.graphics.beginGradientFill(GradientType.LINEAR,colors,alphas,ratios,mat); 
rect.graphics.drawRect(0,0,rectWidth,rectHeight); 
rect.graphics.endFill(); 
} 

function toRad(a:Number):Number { 
return a*Math.PI/180; 
} 
+0

いくつかのスクリーンショットであなたのポイントを証明できますか? – Kodiak

答えて

0

:ここ

は、私が使用しているコードだ

mat.createGradientBox(rectWidth,rectHeight,toRad(26)); 

グラデーションボックス変化の大きさならばあなたの勾配が変化します。グラデーションが常に同じ角度を持つようにするには、矩形の寸法に関係なく、同じグラデーションボックスの寸法を維持します。グラデーションを26度(または何でも)にするには、四角形のグラデーションボックスを作成します。それ以外の場合は、グラデーションラインの角度と回転角度は等しくありません。

これはあなたが探しているものであるかどうかを確認する場合は、このコードを試してみてください:あなたが欲しい効果を得るまで、あなたはグラデーションボックスの幅と高さで遊ぶことができます

import flash.display.Shape; 

var rect:Shape; 
var gradSize:uint = 100; 

for(var i:uint=0;i<3;i++) 
{ 
    rect = new Shape(); 
    this.addChild(rect); 
    rect.x=20; 
    rect.y=i*100+10; 
    var rectWidth:Number=100+i*50; 
    var rectHeight:Number=50; 

    drawShapes(rect); 
} 

function drawShapes(rect:Shape):void 
{ 
    var mat:Matrix; 
    var colors:Array; 
    var alphas:Array; 
    var ratios:Array; 
    //We proceed to draw 'rect'. 
    mat=new Matrix(); 
    colors=[0xFF0000, 0x00FF00, 0x001eff]; 
    alphas=[1,1,1]; 
    ratios=[0,120,255]; 

    mat.createGradientBox(gradSize,gradSize,toRad(26)); 
    rect.graphics.lineStyle(); 
    rect.graphics.beginGradientFill(GradientType.LINEAR,colors,alphas,ratios,mat); 
    rect.graphics.drawRect(0,0,rectWidth,rectHeight); 
    rect.graphics.endFill(); 

} 

function toRad(a:Number):Number 
{ 
    return a*Math.PI/180; 
} 

。お役に立てれば!