PDA

Просмотр полной версии : Проблемы с изменением размера Shape


advk
08.01.2010, 11:45
Собственно имеется задача, необходимо программно нарисовать прямоугольник с градиентом, а потом программно изменять его размеры и подвигать.
Написал вот такой код:

var x = 0;
var y = 400;
var w = 500;
var h = 100;
var type:String = GradientType.LINEAR;
var colors:Array = [0xF00000, 0x970000];
var alphas:Array = [1, 1];
var ratios:Array = [0, 255];
var gradientBoxMatrix:Matrix = new Matrix();
gradientBoxMatrix.createGradientBox(w, h, Math.PI/2, x, y );
var rect:Shape = new Shape();
rect.graphics.beginGradientFill(type,
colors,
alphas,
ratios,gradientBoxMatrix);
rect.graphics.lineStyle(1, 0x000000);
rect.graphics.drawRect(x, y, w, h);
rect.graphics.endFill();
addChild(rect);
rect.height = 50;


Прямоугольник изначально рисуется такой какой нужно и там где нужно, но если
изменить height(rect.height=50), то он сильно сдвигается наверх.
Собственно как это побороть? Или эту задачу лучше решить каким-нибудь другим способом?

silin
08.01.2010, 12:09
если нарисовать прямоугольник от начала координат шейпа, а сам шейп поставить в нужные координаты, то все будет проще:
gradientBoxMatrix.createGradientBox(w, h, Math.PI/2, 0, 0 );
var rect:Shape = new Shape();
rect.graphics.beginGradientFill(type,
colors,
alphas,
ratios,gradientBoxMatrix);
rect.graphics.lineStyle(1, 0x000000);
rect.graphics.drawRect(0, 0, w, h);
rect.x = x;
rect.y = y;
но все от задачи зависит, канеш,
короче, геометрия и только

gloomyBrain
08.01.2010, 12:11
Опередили =)

advk
08.01.2010, 12:23
Спасибо, теперь нормально заработало :)

Есть еще вот такой вопрос. Если мне нужно сделать одновременное плавное изменение высоты и ширины нескольких прямоугольников, то это делается через Timer и пошаговое изменение параметров? Или есть какой-то способ задать начальное-конечное состояние, чтобы прямоугольники изменялись автоматически в заданный промежуток времени?

Psycho Tiger
08.01.2010, 12:26
это зачастую полезно
Это зачастую в разы быстрее.

Добавлено через 54 секунды
Или есть какой-то способ задать начальное-конечное состояние, чтобы прямоугольники изменялись автоматически в заданный промежуток времени?
Любые твиновые фреймворки, хоть Адоубовский Tween.
Я пользуюсь TweenLite.