В библиотеке PixiJS каждый объект сцены (спрайт,
контейнер, графика) обладает системой трансформаций, которая управляет
положением, масштабом, поворотом и другими свойствами объекта. Эти
трансформации рассчитываются автоматически при рендеринге сцены, но
иногда возникает необходимость ручного управления обновлением
трансформаций, для чего предназначен метод
updateTransform.
updateTransformМетод updateTransform выполняет расчет мировых
координат объекта, учитывая его локальные трансформации и
трансформации всех родителей в иерархии сцены. При вызове этого метода
происходит:
worldTransform), используемой для
рендеринга.Стандартный вызов рендеринга делает это автоматически, однако вручную метод позволяет получать актуальные мировые координаты без перерисовки сцены.
Пример использования:
const sprite = new PIXI.Sprite(texture);
sprite.position.set(100, 50);
sprite.scale.set(2, 2);
// Ручное обновление трансформации
sprite.updateTransform();
console.log(sprite.worldTransform);
В результате sprite.worldTransform будет содержать
точную матрицу с учётом всех трансформаций, даже если сцена ещё не была
отрендерена.
Применение изменений до рендеринга При сложных
анимациях или физическом моделировании иногда нужно вычислить новые
позиции объектов до вызова renderer.render(stage).
Доступ к мировым координатам дочерних объектов
Если объект вложен в несколько контейнеров и требуется точное положение
в глобальной системе координат, updateTransform гарантирует
корректный расчёт.
Оптимизация рендеринга В некоторых случаях можно заранее обновлять трансформации объектов, избегая повторных вычислений во время рендера.
Контейнеры в PixiJS автоматически обновляют трансформации всех
дочерних элементов при вызове updateTransform контейнера.
Это означает, что один вызов на верхнем уровне
распространяется на всю иерархию:
const container = new PIXI.Container();
const child = new PIXI.Sprite(texture);
container.addChild(child);
container.position.set(50, 50);
child.position.set(20, 30);
// Обновление всей иерархии
container.updateTransform();
console.log(child.worldTransform); // учтены трансформации контейнера и самого спрайта
Это свойство удобно использовать при динамических сценах с большим количеством вложенных объектов.
setTransform(x, y, scaleX, scaleY, rotation) — удобный
метод для задания всех трансформаций за один вызов. После него часто
требуется updateTransform для расчёта мировых
координат.toLocal(position, from, point, skipUpdate) — метод,
преобразующий координату из одной системы в другую. Параметр
skipUpdate=false по умолчанию заставляет PixiJS
автоматически вызвать updateTransform, но при больших
сценах можно вызвать его вручную для оптимизации.updateTransform не вызывает перерисовку текстур или
сцены, оно работает только с математической частью трансформации.PixiJS строит граф сцены и при рендеринге автоматически обновляет трансформации только при изменении позиции, масштаба или поворота объекта. Иногда можно обойтись ручным обновлением только нужных объектов, что позволяет:
Пример частичного обновления:
const movingSprite = new PIXI.Sprite(texture);
const staticSprite = new PIXI.Sprite(texture);
movingSprite.position.x += 5;
// Обновляем только изменившийся объект
movingSprite.updateTransform();
В этом примере staticSprite не будет пересчитывать
мировую матрицу, что экономит ресурсы.
updateTransform не обновляет внутренние
текстуры или визуальные элементы, а только матрицы
трансформации.updateTransform на объекте без родителей
ведёт себя корректно, возвращая мировую матрицу относительно сцены.updateTransform в контейнерах идёт сверху вниз
— сначала родитель, потом дети. Если вызвать на дочернем объекте без
предварительного обновления родителя, матрица может быть
некорректной.В игровых движках PixiJS метод updateTransform активно
используется для:
updateTransform обновляет мировую матрицу объекта.renderer.render(stage).Метод updateTransform является ключевым инструментом
контроля трансформаций в PixiJS, обеспечивая точность
координат и гибкость при работе со сложными иерархиями объектов.