В Two.js все элементы сцены можно объединять в
группы с помощью объекта Two.Group. Группы позволяют
управлять сразу несколькими объектами как единым целым: трансформации,
стили и анимации применяются ко всем дочерним элементам группы
одновременно. Это особенно полезно для построения сложных структур,
таких как механизмы, сцены с множеством объектов или анимированные
персонажи.
const group = new Two.Group();
После создания группы объекты добавляются в неё методом
add:
const circle = two.makeCircle(0, 0, 50);
const rect = two.makeRectangle(0, 0, 100, 50);
group.add(circle, rect);
two.add(group);
Теперь трансформации группы будут автоматически применяться к кругу и прямоугольнику одновременно.
Группы поддерживают те же свойства трансформации, что и отдельные
объекты: translation, rotation,
scale. Применение этих свойств к группе влияет на все
дочерние элементы относительно центра группы.
group.translation.set(200, 150);
group.rotation = Math.PI / 4;
group.scale = 1.5;
Группы можно вкладывать друг в друга, создавая иерархическую структуру. Вложенные группы наследуют трансформации родительской группы:
const parentGroup = new Two.Group();
const childGroup = new Two.Group();
const circle = two.makeCircle(0, 0, 30);
childGroup.add(circle);
parentGroup.add(childGroup);
two.add(parentGroup);
parentGroup.translation.set(300, 200);
childGroup.rotation = Math.PI / 6;
В этом примере childGroup вращается относительно своей
локальной оси, а parentGroup перемещает всю структуру по
сцене.
Группы могут управлять стилевыми свойствами дочерних объектов. При
изменении свойств группы, таких как fill или
stroke, эти изменения применяются ко всем объектам внутри
группы, если объекты не переопределяют эти свойства индивидуально.
group.fill = 'rgba(100, 150, 200, 0.5)';
group.stroke = '#333';
group.linewidth = 4;
Дочерние элементы будут автоматически наследовать цвет заливки, обводки и толщину линий, что облегчает массовое изменение внешнего вида сложных сцен.
Объекты можно динамически добавлять и удалять из группы, что позволяет создавать интерактивные сцены:
const rect = two.makeRectangle(0, 0, 50, 50);
group.add(rect); // добавление
group.remove(rect); // удаление
После удаления объекта из группы он больше не наследует трансформации
группы, но остаётся в сцене до явного удаления через
two.remove().
Для управления отдельными объектами внутри группы можно использовать
свойство children группы. Оно содержит массив всех дочерних
объектов:
group.children.forEach(child => {
child.rotation += 0.01;
});
Такой подход позволяет анимировать отдельные объекты внутри группы, сохраняя общие трансформации родителя.
Вложенные группы особенно полезны для анимации сложных систем. Например, при создании солнечной системы можно использовать иерархию:
const solarSystem = new Two.Group();
two.add(solarSystem);
const earthGroup = new Two.Group();
const earth = two.makeCircle(100, 0, 20);
earthGroup.add(earth);
solarSystem.add(earthGroup);
const moon = two.makeCircle(30, 0, 5);
earthGroup.add(moon);
Теперь вращение earthGroup будет вращать Землю и Луну
вместе, а вращение solarSystem — всю планетарную
систему.
Группы в Two.js обеспечивают гибкий и мощный способ управления сложными сценами, позволяя легко создавать иерархии, управлять стилями и анимациями сразу для нескольких объектов.