2011-10-27 4 views
1

이것은 내 첫 번째 게시물이므로 모든 것을 올바르게 얻고 내 문제에 대한 답변을 찾으십시오.플래시 AS3 선형 그래디언트 회전 문제

플래시 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; 
} 

당신은 그래디언트 상자의 폭과 높이 함께 놀러 수 : 이것이 당신이 찾고있는 것을 있는지 경우

이 코드를 사용해보십시오. 희망이 도움이!