В PixiJS сцена строится иерархически: каждый объект
может содержать другие объекты — дочерние. Управление этой иерархией
осуществляется через контейнеры (PIXI.Container),
которые позволяют добавлять, удалять и изменять порядок дочерних
элементов, влияя на их отображение и обработку событий.
Добавление дочерних объектов
Для добавления объекта в контейнер используется метод
addChild:
const container = new PIXI.Container();
const sprite = PIXI.Sprite.from('image.png');
container.addChild(sprite);
Ключевые моменты:
- Объект, добавленный в контейнер, автоматически наследует
трансформации контейнера: позицию, масштаб, вращение.
- Метод addChild возвращает добавленный объект, что
позволяет использовать цепочку вызовов.
- Можно добавлять сразу несколько объектов:
container.addChild(sprite1, sprite2, sprite3);
- Если объект уже был дочерним другого контейнера, он автоматически
удаляется из старого контейнера перед добавлением в новый.
Удаление дочерних объектов
Удаление выполняется методом removeChild:
container.removeChild(sprite);
Особенности:
- После удаления объект остается в памяти, но больше не отображается
на сцене.
- Для полного удаления с очисткой ресурсов используется метод
destroy:
sprite.destroy({ children: true });
Параметр children: true гарантирует, что все дочерние
объекты будут уничтожены вместе с родителем.
- Удаление нескольких объектов одновременно возможно через передачу
нескольких аргументов:
container.removeChild(sprite1, sprite2);
- Метод removeChildAt(index) удаляет объект по
индексу в массиве children контейнера.
Управление порядком
дочерних объектов
Порядок дочерних элементов в контейнере определяет, какой объект
отображается поверх других. Основные методы:
- addChildAt(child, index) — вставляет объект в
контейнер на указанную позицию:
container.addChildAt(sprite, 0); // Добавить на самый нижний слой
- setChildIndex(child, index) — меняет индекс
существующего объекта, перемещая его по слоям:
container.setChildIndex(sprite, container.children.length - 1); // Переместить наверх
- swapChildren(child1, child2) — меняет местами два
объекта.
- swapChildrenAt(index1, index2) — меняет местами
объекты по индексам.
- getChildIndex(child) — возвращает текущий индекс
объекта.
- getChildAt(index) — возвращает объект по
индексу.
Очистка контейнера
Для удаления всех дочерних элементов используется
removeChildren:
container.removeChildren();
- Можно указать диапазон индексов:
container.removeChildren(0, 5) удалит первые шесть
объектов.
- После удаления объекты остаются в памяти, пока их явно не уничтожить
через destroy.
Динамическое управление
сценой
Работа с дочерними объектами особенно важна при динамическом создании
сцен, анимации или интерфейсов:
- Создание и удаление объектов в процессе игры:
const enemies = new PIXI.Container();
function spawnEnemy(texture) {
const enemy = new PIXI.Sprite(texture);
enemies.addChild(enemy);
}
function removeEnemy(enemy) {
enemies.removeChild(enemy);
enemy.destroy();
}
- Управление слоями интерфейса и эффектов:
const background = new PIXI.Sprite.from('bg.png');
const uiLayer = new PIXI.Container();
const effectsLayer = new PIXI.Container();
app.stage.addChild(background, effectsLayer, uiLayer);
Слой uiLayer всегда будет отображаться поверх
effectsLayer, а фон — на заднем плане.
Важные нюансы
- Наследование трансформаций: позиция, масштаб и
вращение дочернего объекта считаются относительно родителя.
- События и интерактивность: события, такие как клики
или наведение мыши, распространяются через иерархию, если объект
интерактивен.
- Оптимизация: частое добавление и удаление объектов
может влиять на производительность, особенно при большом количестве
спрайтов. Используются пулы объектов для повторного использования.
Практические
методы для управления дочерними объектами
- addChild — добавление объекта.
- removeChild / removeChildAt — удаление объекта по
ссылке или индексу.
- addChildAt / setChildIndex / swapChildren —
управление порядком отображения.
- removeChildren — массовое удаление.
- destroy — очистка ресурсов.
Эти методы формируют основу работы с иерархией объектов в
PixiJS, позволяя строить сложные сцены, интерфейсы и
анимации с гибким управлением слоев и ресурсов.