Пытаюсь нарисовать прямоугольный треугольник с градиентом, направленным от вершины прямого угла к гипотенузе (т.е. повёрнутого на 45 градусов). Код под 8й флэш.
Код:
import flash.geom.Matrix;
createEmptyMovieClip('mc', getNextHighestDepth());
matrix = new Matrix();
matrix.createGradientBox(128, 128, Math.PI / 4, 0, 0);
mc.beginGradientFill('linear', [0xff0000, 0x000000], [100, 100], [0, 255], matrix);
mc.moveTo(0, 0);
mc.lineTo(256, 0);
mc.lineTo(0, 256);
mc.lineTo(0, 0);
mc.endFill();
Получается совсем не то что надо. Для сравнения - то же самое, сделанное заливкой градиентом без всяких поворотов, а потом поворачивается уже сам MovieClip, всё выглядит как надо:
Код:
createEmptyMovieClip('mc2', getNextHighestDepth());
var k = 256 * Math.sqrt(2);
matrix.createGradientBox(k/2, k/2, 0, 0, 0);
mc2.beginGradientFill('linear', [0xff0000, 0x000000], [100, 100], [0, 255], matrix);
mc2.moveTo(0, 0);
mc2.lineTo(k/2, -k/2);
mc2.lineTo(k/2, k / 2);
mc2.lineTo(0, 0);
mc2.endFill();
transform_matrix = mc2.transform.matrix;
transform_matrix.rotate(Math.PI / 4);
mc2.transform.matrix = transform_matrix;
Почему в первом примере не удаётся добиться того же результат, что и во втором? Более-менее похоже, если сделать:
Код:
matrix.createGradientBox(128 * Math.sqrt(2), 128 * Math.sqrt(2), Math.PI / 4, -128 / (4*Math.sqrt(2)), -128 / (4*Math.sqrt(2)));
но это как-то совсем от балды...