Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Динамическое рисование градиентной линии (http://www.flasher.ru/forum/showthread.php?t=149985)

Alex_McX 04.02.2011 13:35

Динамическое рисование градиентной линии
 
Добрый день.

Код AS3:

var p1:Point = new Point();
var p:Point = new Point();
var p4:Point = new Point();       
var matr:Matrix = new Matrix();       
matr.createGradientBox(200, 40, 0, 0, 0);                               
 
draw.lineGradientStyle(GradientType.LINEAR, [0xFF0000, 0x00FF00, 0x0000FF], [1, 1], [0, 128, 255], matr);                               
 
// start point
p1.x = 0;
p1.y = 0;
 
// end point
p4.x = -800;
p4.y = -800;
 
points = [p1];
 
for (var j:int = 0; j < 2; j++) {
        p = new Point();
 
        p.x = -78 * j / 0,1;    // для примера (в оригинале статический класс генерит псевдослучайное число)
        p.y = -25 * j / 0,4//
 
        points.push(p);
}                               
 
points.push(p4);
 
var bezier:BezierSegment = new BezierSegment(points[1], points[2], points[3], points[4]);
 
draw.moveTo(p1.x, p1.y);
 
for (var t:Number = .01; t < 1.01 ; t+=.01){
        var val:Point = bezier.getValue(t);
 
        draw.lineTo(val.x,val.y);
}

В результате должна получиться градиентная линия Безьє. Но не тут-то было, и получается однотонная линия Безьє. Как правильно решить эту задачу.
Спасибо.

samana 04.02.2011 15:43

У вас при задании альфы, всего два значения, [1,1], а должно быть три [1,1,1], ведь цвета тоже три.
Если что-то не получается, то вот рабочий пример:
Код AS3:

var points:Array = [new Point(0, 0), new Point(100, 600), new Point(300, 0), new Point(800, 600)];
 
var bezier:BezierSegment = new BezierSegment(points[0], points[1], points[2], points[3]);
 
var matrix:Matrix = new Matrix();
matrix.createGradientBox(800, 600);
 
graphics.lineStyle(5);
graphics.lineGradientStyle(GradientType.LINEAR, [0xFF0000,0x00FF00,0x0000FF], [1,1, 1], [0, 128,255], matrix);
graphics.moveTo(0, 0);
 
for (var i:int = 0; i < 100; i++)
{
        var inc:Number = 1 / 100;
        var currentPoint:Point = bezier.getValue(inc * i);
        graphics.lineTo(currentPoint.x,currentPoint.y);
}


Alex_McX 04.02.2011 16:24

Огромное спасобо.


Часовой пояс GMT +4, время: 17:37.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.