Масштабирование в Two.js представляет собой изменение размеров объектов на сцене без изменения их пропорций. Библиотека поддерживает как масштабирование отдельных объектов, так и групп объектов, что позволяет создавать сложные композиции с единым управлением размером.
В Two.js масштаб задается через свойства scale,
scaleX и scaleY объекта.
scale — общий коэффициент масштабирования по обеим
осям.scaleX — масштабирование по горизонтали.scaleY — масштабирование по вертикали.Пример задания масштаба для объекта:
let circle = two.makeCircle(100, 100, 50);
circle.scale = 2; // увеличиваем объект в 2 раза
circle.scaleX = 1.5; // горизонтальное растяжение
circle.scaleY = 0.5; // вертикальное сжатие
two.update();
Для удобного управления сложными сценами используется
Two.Group. Любой объект можно добавить в группу и изменять
масштаб всех объектов одновременно, сохраняя их
относительное положение.
let group = two.makeGroup();
let rect = two.makeRectangle(0, 0, 50, 50);
let circle = two.makeCircle(60, 0, 30);
group.add(rect, circle);
group.scale = 1.5;
two.update();
В данном примере прямоугольник и круг увеличены на 50% одновременно, при этом их координаты относительно группы сохраняются.
Масштабирование выполняется относительно центра объекта или
группы. В Two.js это определяется свойствами
translation и origin.
translation задает положение объекта на сцене.origin определяет точку, относительно которой
выполняются трансформации.Пример смещения центра масштабирования:
let rect = two.makeRectangle(100, 100, 80, 40);
rect.origin.set(0, 0); // верхний левый угол как точка отсчета
rect.scale = 2;
two.update();
Использование origin позволяет масштабировать
объект относительно любой точки, что особенно важно при
анимациях и интерактивных интерфейсах.
Two.js поддерживает плавные анимации с использованием функции
two.bind('update', callback). Для масштабирования можно
динамически изменять значения scale:
let square = two.makeRectangle(200, 200, 50, 50);
let factor = 1;
let growing = true;
two.bind('update', function(frameCount, delta) {
if (growing) {
factor += 0.01;
if (factor >= 2) growing = false;
} else {
factor -= 0.01;
if (factor <= 1) growing = true;
}
square.scale = factor;
}).play();
Этот код создает пульсирующее увеличение и уменьшение квадрата, сохраняя плавность анимации.
Важный аспект — порядок применения трансформаций. В Two.js объекты
могут иметь несколько свойств трансформации одновременно:
translation, rotation, scale.
resetTransform или менять
origin.Пример комбинированной трансформации:
let triangle = two.makePolygon(300, 300, 40, 3);
triangle.rotation = Math.PI / 4; // поворот на 45 градусов
triangle.scale = 1.5; // масштабирование после поворота
two.update();
vertices, оно
применяет матрицу трансформации на рендер-уровне. Это важно при расчетах
коллизий или интерактивных взаимодействиях.origin позволяет точно управлять точкой
масштабирования, что облегчает создание эффектов «выхода из центра»,
вращения с масштабированием и пульсирующих объектов.Two.js позволяет масштабировать текст через объект
Two.Text. Масштабирование работает аналогично
геометрическим объектам:
let text = two.makeText("Two.js", 100, 50, { size: 20 });
text.scale = 3; // текст увеличивается в 3 раза
two.update();
Важно учитывать, что увеличение текста также увеличивает толщину линий, если используется stroke.
При рендеринге в SVG объекты Two.js используют атрибут
transform, который включает все трансформации
(translate, rotate, scale). Это
позволяет экспортировать анимации или управлять ими через сторонние
SVG-инструменты.
let circle = two.makeCircle(150, 150, 30);
circle.scale = 2;
console.log(circle._renderer.elem.getAttribute('transform'));
// Результат: "translate(150 150) scale(2)"
Такой подход обеспечивает точное соответствие визуальных эффектов между Canvas и SVG.
Эти принципы масштабирования позволяют создавать гибкие, анимированные и интерактивные сцены в Two.js, управляя размерами объектов и групп с максимальной точностью и контролем.