Класс PIXI.Container в библиотеке
PixiJS является фундаментальным строительным блоком для
организации сцены и управления иерархией графических объектов. Он
представляет собой контейнер, способный хранить
дочерние элементы, такие как спрайты, графику, текст и другие
контейнеры. Через контейнеры реализуется концепция сцены как
дерева объектов, где каждый дочерний элемент наследует
трансформации родителя.
Создать контейнер можно следующим образом:
const container = new PIXI.Container();
Контейнер сам по себе ничего не рисует, но становится группой для других объектов, позволяя управлять их позициями, масштабом и вращением как единым целым.
Пример добавления спрайтов в контейнер:
const sprite1 = PIXI.Sprite.from('image1.png');
const sprite2 = PIXI.Sprite.from('image2.png');
container.addChild(sprite1);
container.addChild(sprite2);
Метод addChild добавляет объект в контейнер, после чего
он отображается на сцене относительно контейнера.
Свойства трансформации контейнера включают:
x, y — координаты позиции контейнера на
сцене.scale — объект с x и y,
задающий масштаб по осям.rotation — угол вращения в радианах.pivot — точка поворота и масштабирования.alpha — прозрачность контейнера (наследуется дочерними
объектами).visible — видимость контейнера и всех его детей.Методы управления иерархией:
addChild(child) — добавляет один или несколько дочерних
объектов.addChildAt(child, index) — вставляет объект на
конкретную позицию.removeChild(child) — удаляет объект из контейнера.removeChildren(beginIndex, endIndex) — удаляет
несколько объектов сразу.getChildAt(index) — возвращает дочерний объект по
индексу.getChildByName(name) — поиск дочернего объекта по
имени.Пример изменения позиции дочернего объекта через контейнер:
container.x = 100;
container.y = 50;
Все дочерние объекты автоматически смещаются вместе с контейнером.
Контейнеры могут содержать другие контейнеры, создавая дерево сцены:
const parentContainer = new PIXI.Container();
const childContainer = new PIXI.Container();
parentContainer.addChild(childContainer);
const sprite = PIXI.Sprite.from('image.png');
childContainer.addChild(sprite);
В этом случае:
Для динамических сцен часто требуется управлять массивом дочерних объектов:
container.children.forEach(child => {
child.rotation += 0.01;
});
Контейнер предоставляет доступ к массиву children, что
позволяет:
По умолчанию порядок отрисовки определяется порядком добавления дочерних объектов. Для управления поверхностью:
sprite1.zIndex = 10;
sprite2.zIndex = 5;
container.sortChildren();
zIndex определяет визуальный приоритет.sortChildren пересчитывает порядок отрисовки в
контейнере на основе zIndex.Контейнеры поддерживают события, но сами по себе не интерактивны без включения:
container.interactive = true;
container.on('pointerdown', (event) => {
console.log('Контейнер нажат');
});
interactive = true позволяет обрабатывать
события мыши и касаний.Контейнеры могут влиять на производительность, особенно при большом количестве объектов:
Container для группировки объектов с
общими трансформациями.cacheAsBitmap:container.cacheAsBitmap = true;
Это позволяет рендерить контейнер один раз в текстуру, экономя ресурсы при повторной отрисовке.
Контейнеры активно применяются для:
Пример слоев с контейнерами:
const backgroundLayer = new PIXI.Container();
const gameLayer = new PIXI.Container();
const uiLayer = new PIXI.Container();
app.stage.addChild(backgroundLayer, gameLayer, uiLayer);
Каждый слой можно перемещать и изменять независимо, сохраняя общую структуру сцены.
Класс PIXI.Container является основой
гибкой и мощной иерархии объектов, позволяя создавать сложные сцены с
минимальными усилиями и обеспечивая удобное управление трансформациями,
видимостью и порядком отрисовки дочерних объектов.