1

これは私の最初の投稿なので、すべてが正しくなり、問題の答えが見つかることを願っています。

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;
}
4

1 に答える 1

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

必要な効果が得られるまで、グラデーション ボックスの幅と高さをいじることができます。お役に立てれば!

于 2011-10-27T11:49:47.603 に答える