Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 04.02.2011, 13:35
Alex_McX вне форума Посмотреть профиль Отправить личное сообщение для Alex_McX Найти все сообщения от Alex_McX
  № 1  
Ответить с цитированием
Alex_McX

Регистрация: Nov 2010
Сообщений: 23
По умолчанию Динамическое рисование градиентной линии

Добрый день.

Код 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);
}
В результате должна получиться градиентная линия Безьє. Но не тут-то было, и получается однотонная линия Безьє. Как правильно решить эту задачу.
Спасибо.

Старый 04.02.2011, 15:43
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 2  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
У вас при задании альфы, всего два значения, [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);
}


Последний раз редактировалось samana; 04.02.2011 в 15:46.
Старый 04.02.2011, 16:24
Alex_McX вне форума Посмотреть профиль Отправить личное сообщение для Alex_McX Найти все сообщения от Alex_McX
  № 3  
Ответить с цитированием
Alex_McX

Регистрация: Nov 2010
Сообщений: 23
Огромное спасобо.

Создать новую тему Ответ Часовой пояс GMT +4, время: 23:12.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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