2011-10-27 85 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; 
} 

,直到你得到你想要的效果,您可以玩的漸變框的寬度和高度。希望這可以幫助!