Класс Transform в PixiJS отвечает за управление
положением, масштабом, поворотом и наклоном объектов в 2D-пространстве.
Он является базовым строительным блоком для всех визуальных элементов,
наследующихся от DisplayObject. Понимание его внутренней
структуры и методов критично для оптимизации графических приложений.
Transform содержит несколько ключевых свойств, которые
определяют его состояние:
PIXI.Point) — координаты
объекта в локальной системе отсчёта.PIXI.ObservablePoint) — масштаб
по осям X и Y. Может быть положительным или отрицательным для
отражения.number) — угол поворота в
радианах.PIXI.ObservablePoint) — наклон
по осям X и Y. Используется для создания эффектов перспективы и
деформации.PIXI.ObservablePoint) — точка
вращения и масштабирования относительно локальной системы координат
объекта.PIXI.Matrix) —
матрица, описывающая трансформацию объекта в локальных координатах.PIXI.Matrix) —
матрица, которая преобразует локальные координаты объекта в мировую
систему отсчёта сцены.Каждое свойство тесно связано с матрицами, что обеспечивает эффективное применение трансформаций к графическим элементам.
localTransformlocalTransform формируется на основе комбинации позиции,
масштаба, поворота, наклона и точки pivot. Алгоритм построения матрицы
следующий:
Применяется смещение на pivot:
T_pivot = Matrix.translation(-pivot.x, -pivot.y)Применяется масштабирование:
S = Matrix.scale(scale.x, scale.y)Применяется наклон (skew):
K = Matrix.skew(skew.x, skew.y)Применяется поворот:
R = Matrix.rotation(rotation)Применяется смещение по позиции:
T_pos = Matrix.translation(position.x, position.y)Финальная локальная матрица:
localTransform = T_pos * R * K * S * T_pivotЭтот порядок критичен: изменение последовательности операций приводит к совершенно другим визуальным результатам.
worldTransformworldTransform формируется умножением локальной матрицы
на матрицу родителя:
worldTransform = parent.worldTransform * localTransform
Если объект не имеет родителя, мировая матрица равна локальной.
worldTransform используется для рендеринга и вычисления
глобальных координат, коллизий и hit-тестов.
Класс Transform содержит несколько ключевых методов для
работы с матрицами:
position,
scale, rotation, skew,
pivot). Вызывается автоматически при изменении этих
свойств.position, scale,
rotation, skew) исходя из переданной матрицы.
Полезно для восстановления состояния объекта из сохранённых данных.Для повышения производительности Transform использует
флаги кеширования:
Если идентификаторы совпадают, пересчёт матриц не производится. Это позволяет минимизировать лишние вычисления при анимации и трансформациях сцен с большим количеством объектов.
Родительские и дочерние объекты: Изменяя
position родителя, все дочерние объекты автоматически
наследуют трансформацию через worldTransform.
Анимация: Для плавного вращения и
масштабирования объектов изменяют свойства rotation и
scale на каждом кадре, что приводит к автоматическому
пересчёту localTransform.
Hit-тесты и взаимодействие:
worldTransform используется для перевода координат курсора
или касания в локальные координаты объекта, что делает возможным точное
определение пересечений.
Класс Transform является частью иерархии сцены PixiJS и
тесно интегрирован с:
DisplayObject — базовый визуальный
объект, который содержит свойство transform.Container — объект, который может
иметь потомков; обновление мировых матриц распространяется на всех
детей.Matrix — класс, предоставляющий методы
умножения, инверсии и деформации матриц.Такое разделение обеспечивает гибкость и высокую производительность рендеринга даже сложных сцен с большим количеством объектов.