AS3: beginGradientFIll () не делает меня градиентом! - PullRequest
2 голосов
/ 03 июля 2011

Я пытаюсь сделать круг с радиальным градиентом, но я не могу понять это.

var bkgdGrad:Shape = new Shape();
bkgdGrad.graphics.beginGradientFill(GradientType.RADIAL, [0x0000FF, 0x00FF00], [1, 1], [0, 255],null,"pad");
bkgdGrad.graphics.drawCircle(0,0,r+200);
bkgdGrad.graphics.endFill();
this.addChild(bkgdGrad);

Приведенный выше код отображает для меня сплошной зеленый круг. Если я изменю массив после цветов на [1,0] (альфа-массив), я получу прозрачную заливку. Я не могу заставить вспышку нарисовать радиальный градиент, вышеописанное работает без проблем для GradientType.LINEAR

Ответы [ 3 ]

2 голосов
/ 03 июля 2011

Попробуйте, может быть, это вам поможет:

package  
{  
    import flash.display.Sprite;  
    import flash.display.GradientType;  
    import flash.geom.Matrix;  

    public class RadialGradient extends Sprite  
    {  
        private var gType:String;  
        private var matrix:Matrix;  

        private var bound:Sprite;  

        public function RadialGradient()  
        {  
            var gType:String = GradientType.RADIAL;  

            var matrix:Matrix = new Matrix();  
            matrix.createGradientBox(550,400,0,0,0);  

            var gColors:Array = [0x0000FF, 0x00FF00];  
            var gAlphas:Array = [1,1];  
            var gRatio:Array = [0,255];  

            var bound:Sprite = new Sprite();  
            bound.graphics.beginGradientFill(gType,gColors,gAlphas,gRatio,matrix);  
            bound.graphics.drawCircle(0,0,r+200);
            bound.x = bound.y = 0;  
            addChild(bound);  
        }  
    }  
}  
2 голосов
/ 03 июля 2011

Вам нужен объект Matrix, а также метод createGradientBox().

Я создал класс с именем RadialGraident, который создает объект Shape с кругом, имеющим радиальный градиент.Все, что вам нужно сделать, это проанализировать радиус, цвета, альфа и отношения при создании объекта, как в следующем примере:

package 
{
    import flash.display.Sprite;
    import flash.events.Event;

    public class Main extends Sprite 
    {
        public function Main():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);

        }// end function

        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);

            var radialGradient:RadialGradient = new RadialGradient(200, [0x0000FF, 0x00FF00], [1, 1], [0, 255]);
            addChild(radialGradient);

        }// end function

    }// end class

}// end package

import flash.display.GradientType;
import flash.display.Shape;
import flash.geom.Matrix;

internal class RadialGradient extends Shape
{   
    public function RadialGradient(radius:Number, colors:Array, alphas:Array, ratios:Array)
    {
        var matrix:Matrix = new Matrix();
        matrix.createGradientBox(radius * 2, radius * 2);
        graphics.beginGradientFill(GradientType.RADIAL, colors, alphas, ratios, matrix);
        graphics.drawCircle(radius, radius, radius);
        graphics.endFill();

    }// end function

}// end class
1 голос
/ 03 июля 2011

создайте градиентный блок с новым Matrix объектом и назначьте новый матричный объект вашему параметру beginGradientFill matrix:

flash.geom.Matrix.createGradientBox ()


[EDIT] : вот простое онлайн-руководство, которое должно помочь объяснить больше:

Градиентное рисование градиентов в AS3

...