3

みなさん、こんにちは。ActionScript3でマルチカラーグラデーションを描くのは初めてです。

したがって、このコードはヘルプドキュメントから取得しましたが、回転に使用する数式や数値に関係なく、垂直方向のグラデーションを取得できないようですが、デフォルトの水平方向のグラデーションのままです:(

私のコード:

あなたは私が試した回転コードをトレースで見ることができます...

package
{
import flash.display.DisplayObject;
import flash.display.GradientType;
import flash.display.SpreadMethod;
import flash.display.MovieClip;
import flash.display.Graphics;
import flash.display.Sprite;
import flash.display.Shape;
import flash.geom.Matrix;
import flash.events.*;

public class MyGradient extends MovieClip
{
    private var colorHolder:MovieClip = new MovieClip();
    private var colorGrad:MovieClip = new MovieClip();
    private var fillType:String     = GradientType.LINEAR;
    private var colors:Array        = [0xFF0000, 0x4F8EEC];
    private var alphas:Array        = [1, 1];
    private var ratios:Array        = [0x00, 0xFF];
    private var matr:Matrix         = new Matrix();
    private var spreadMethod:String = SpreadMethod.PAD;


    public function MyGradient():void
    {
        if (stage) init();
        else addEventListener(Event.ADDED_TO_STAGE, init);
    }

    private function init():void
    {
        colorHolder = new MovieClip();
        colorGrad   = new MovieClip();

        //matr.rotate(30*Math.PI/180);
        //matr.rotate(45);
        //matr.rotate(90);
        //matr.rotate(Math.PI/90);
        matr.rotate(Math.PI/9);
        matr.createGradientBox(200, 200, 0, 0, 1);
        colorGrad.graphics.beginGradientFill(fillType, colors, alphas, ratios, matr, spreadMethod);        
        colorGrad.graphics.drawRect(0,0,200,200);

        colorHolder.addChild(colorGrad);
        addChild(colorHolder);
        }

    }

}

深く関与した修正:

matr.createGradientBox(200, 200, Math.PI/2, 0, 0);

代替テキスト

4

3 に答える 3

3

このコード行は、回転値をゼロに戻します。

matr.createGradientBox(200, 200, 0, 0, 1);

関数によって受け入れられるパラメーターを見ると、3番目のパラメーターが回転であることがわかります。したがって、次のことを試してください。

matr.createGradientBox(200, 200, Math.PI/9, 0, 1);

また、y値を1ピクセル換算する理由はありますか?

お役に立てれば。幸運を!

于 2010-03-02T16:59:32.607 に答える
1

たくさんの絵を描いている場合は、degrafaもチェックする必要があります。

http://www.degrafa.org/

于 2010-03-02T18:32:08.053 に答える
1

この2行の順序を変更してみると、次のようになります。

matr.createGradientBox(200, 200, 0, 0, 1);
matr.rotate((Math.PI/180)*90);
于 2010-03-02T17:08:29.820 に答える