В библиотеке PixiJS каждый объект, наследующийся от
PIXI.Container или PIXI.Sprite, имеет свойство
pivot, определяющее точку трансформации
объекта. Эта точка служит центром для вращения,
масштабирования и позиционирования.
Понимание работы pivot критично для точного управления
графическими элементами на сцене.
pivot.x и pivot.y
Определяют координаты точки трансформации относительно локальной системы
координат объекта. По умолчанию pivot равен
(0, 0), что соответствует верхнему левому
углу объекта.
position Свойство
position задаёт положение объекта на сцене относительно его
родителя. При изменении pivot положение визуально
изменяется, так как центр трансформации смещается.
anchor у спрайтов Для объектов типа
PIXI.Sprite свойство anchor выполняет ту же
роль, что и pivot, но его значения нормализованы от
0 до 1. Преобразование между
anchor и pivot выглядит так:
sprite.pivot.x = sprite.width * sprite.anchor.x;
sprite.pivot.y = sprite.height * sprite.anchor.y;Прямое присваивание координат позволяет смещать центр трансформации:
const sprite = PIXI.Sprite.from('character.png');
sprite.pivot.set(sprite.width / 2, sprite.height / 2); // центр объекта
sprite.position.set(400, 300);
sprite.rotation = Math.PI / 4; // вращение вокруг нового центра
В примере объект вращается вокруг середины, а не верхнего левого угла, что облегчает создание анимаций персонажей и вращающихся элементов интерфейса.
Вращение (rotation) Вращение всегда
происходит вокруг точки pivot. Если pivot не в
центре, вращение создаёт эффект орбитального движения.
Масштабирование (scale)
Масштабирование также происходит относительно pivot.
Смещение pivot к краю объекта приведёт к изменению положения видимого
центра при увеличении/уменьшении.
Комбинированные трансформации При одновременном
изменении position, rotation и
scale порядок операций имеет значение. PixiJS выполняет
сначала масштабирование и вращение относительно pivot, а
затем смещает объект по position.
Объекты внутри PIXI.Container наследуют локальные
трансформации родителя, включая смещение pivot. Это позволяет строить
сложные иерархии объектов, например:
const container = new PIXI.Container();
const wheel = PIXI.Sprite.from('wheel.png');
wheel.pivot.set(wheel.width / 2, wheel.height / 2); // центр колеса
wheel.position.set(100, 100);
container.addChild(wheel);
wheel.rotation = Math.PI / 6; // вращение колеса вокруг центра
Смещение pivot у одного элемента не влияет на другие
элементы контейнера, что позволяет изолировать трансформации.
Вращающиеся объекты Колёса, стрелки часов,
вентиляторы — все элементы вращаются относительно центра, установленного
через pivot.
Анимации персонажей Для скелетной анимации
pivot смещается к точкам сочленений (локоть, колено, плечо)
для реалистичного движения.
UI-элементы Кнопки и панели можно анимировать с
эффектом “выдвижения” или “поворота” вокруг конкретной точки, используя
pivot.
pivot, визуальное положение объекта
будет неожиданно смещаться при вращении или масштабировании.anchor менять
pivot напрямую можно, но нужно помнить о пересчёте:
pivot = width * anchor.x.pivot — центр трансформаций: вращение, масштаб,
смещение.anchor, автоматически
пересчитывающий pivot.Грамотное использование точки трансформации является ключевым инструментом при работе с PixiJS для динамических и интерактивных графических элементов.