В PixiJS объекты могут изменять свои размеры с помощью
масштабирования, что позволяет динамически изменять
визуальный вид спрайтов, контейнеров и графических примитивов без
изменения исходных текстур. Основными свойствами для управления
масштабом являются scale, scale.x (или
scaleX) и scale.y (или
scaleY).
scaleСвойство scale представляет собой объект типа
PIXI.ObservablePoint, содержащий значения по осям X и Y.
Оно задаёт коэффициенты масштабирования относительно
исходных размеров объекта:
sprite.scale.x = 2; // Увеличение ширины в 2 раза
sprite.scale.y = 0.5; // Уменьшение высоты в 2 раза
Альтернативно, можно использовать присвоение нового объекта:
sprite.scale.set(1.5, 1.5); // Масштабирование по обеим осям одинаково
При указании одного аргумента в методе set, масштаб
применяется одинаково по обеим осям:
sprite.scale.set(2); // Удвоение размеров по X и Y
Ключевые моменты:
1 соответствует исходному размеру.0 делает объект невидимым.<1 уменьшает объект, значение
>1 увеличивает.scaleX и
scaleYХотя в PixiJS нет прямых свойств scaleX и
scaleY у объектов, их часто используют как сокращённые
алиасы через sprite.scale.x и sprite.scale.y.
В современных проектах можно создать геттеры и сеттеры для удобства:
Object.defineProperty(sprite, 'scaleX', {
get: () => sprite.scale.x,
set: (value) => { sprite.scale.x = value; }
});
Object.defineProperty(sprite, 'scaleY', {
get: () => sprite.scale.y,
set: (value) => { sprite.scale.y = value; }
});
sprite.scaleX = 3; // Увеличение ширины в 3 раза
sprite.scaleY = -1; // Отражение по вертикали
Такое решение упрощает код при работе с множеством объектов и повышает читаемость.
Контейнеры (PIXI.Container) также поддерживают свойства
scale. При изменении масштаба контейнера все
дочерние элементы масштабируются пропорционально:
const container = new PIXI.Container();
container.scale.set(0.5); // Уменьшение всех дочерних спрайтов вдвое
Это позволяет создавать сложные сцены с иерархической структурой объектов, где масштабирование верхнего уровня автоматически влияет на вложенные элементы.
Масштабирование всегда происходит относительно точки привязки:
anchor (точка внутри
текстуры).pivot (локальная точка
отсчёта).sprite.anchor.set(0.5); // Центр спрайта
sprite.scale.set(2); // Увеличение относительно центра
Сдвиг pivot позволяет масштабировать объект относительно произвольной точки:
container.pivot.set(50, 50);
container.scale.set(2); // Увеличение относительно точки (50, 50)
Масштаб часто анимируется для создания эффектов появления, пульсации или взрыва:
app.ticker.add(() => {
sprite.scale.x += 0.01;
sprite.scale.y += 0.01;
});
Для более сложных эффектов используют библиотеки анимации, такие как
GSAP, напрямую изменяя свойства scale.x и
scale.y.
PIXI.Graphics с множеством примитивов.cacheAsBitmap) для статичных объектов,
чтобы снизить нагрузку на рендеринг.scale.set(x, y) для одновременного задания
обеих осей.anchor и pivot для контроля
точки масштабирования.Масштабирование в PixiJS является мощным инструментом для управления
визуальной композицией, а правильное использование scale,
scale.x и scale.y позволяет создавать гибкие и
динамичные сцены с высокой производительностью.