Пример геометрии: применение матричного преобразования к экранному объектуFlash Player 9 и более поздних версий, Adobe AIR 1.0 и более поздних версий В качестве примера приводится приложение DisplayObjectTransformer, которое демонстрирует ряд функций, используемых в классе Matrix для преобразования экранного объекта. Среди этих функций следующие:
Приложение предоставляет интерфейс для настройки параметров матричного преобразования, как показано ниже. ![]() При нажатии кнопки Transform (Преобразовать) приложение выполняет заданные преобразования. ![]() Исходный экранный объект и экранный объект, повернутый на -45° и уменьшенный на 50 % Получить файлы приложения для этого примера можно на странице www.adobe.com/go/learn_programmingAS3samples_flash_ru. Файлы приложения DisplayObjectTransformer находятся в папке Samples/DisplayObjectTransformer. Приложение состоит из следующих файлов.
Определение класса MatrixTransformerКласс MatrixTransformer включает статические методы, которые применяют геометрические преобразования к объектам Matrix. Метод transform()Метод transform() включает параметры для нижеследующего:
Возвращаемое значение — результирующая матрица. Метод transform() вызывает следующие статические методы этого класса:
Каждый из них возвращается в исходную матрицу с примененным преобразованием. Метод skew()Метод skew() вносит в матрицу корректировку наклона, задавая свойства матрицы b и c. Дополнительный параметр unit задает единицы измерения угла наклона — при необходимости в этом методе возможно конвертирование значения угла angle в радианы. if (unit == "degrees")
{
angle = Math.PI * 2 * angle / 360;
}
if (unit == "gradients")
{
angle = Math.PI * 2 * angle / 100;
}
Матричный объект skewMatrix создается и корректируется для применения преобразования наклона. Первоначально это единичная матрица: var skewMatrix:Matrix = new Matrix(); Параметр skewSide определяет сторону, к которой применяется преобразование наклона. Если задана правая сторона "right", свойство матрицы b устанавливает следующий код: skewMatrix.b = Math.tan(angle); Нижний край наклоняется заданием свойства матрицы c: skewMatrix.c = Math.tan(angle); Результирующий наклон применяется к исходной матрице за счет объединения двух матриц, как показано в следующем примере: sourceMatrix.concat(skewMatrix); return sourceMatrix; Метод scale()Как показано в следующем примере, метод scale() сначала задает коэффициент масштабирования, если он представлен в процентах, затем метод scale() применяется к объекту Matrix: if (percent)
{
xScale = xScale / 100;
yScale = yScale / 100;
}
sourceMatrix.scale(xScale, yScale);
return sourceMatrix;
Метод translate()Метод translate() просто применяет коэффициенты преобразования dx и dy путем вызова метода translate() матричного объекта, как показано ниже: sourceMatrix.translate(dx, dy); return sourceMatrix; Метод rotate()Метод rotate() конвертирует входной коэффициент поворота в радианы (если он представлен в градусах или единицах градиента), а затем вызывает метод rotate() матричного объекта: if (unit == "degrees")
{
angle = Math.PI * 2 * angle / 360;
}
if (unit == "gradients")
{
angle = Math.PI * 2 * angle / 100;
}
sourceMatrix.rotate(angle);
return sourceMatrix;
Вызов метода MatrixTransformer.transform() в приложенииПриложение содержит интерфейс, с помощью которого пользователь вводит параметры преобразования. Затем приложение передает эти значения вместе со свойствами экранного объекта matrix и transform методу Matrix.transform(), как показано ниже: tempMatrix = MatrixTransformer.transform(tempMatrix,
xScaleSlider.value,
yScaleSlider.value,
dxSlider.value,
dySlider.value,
rotationSlider.value,
skewSlider.value,
skewSide );
После этого приложение применяет возвращаемое значение к свойству matrix свойства transform экранного объекта, осуществляя преобразование: img.content.transform.matrix = tempMatrix; |
|