В PixiJS порядок отрисовки определяется
последовательностью добавления объектов в контейнер и их
z-индексом. Каждый визуальный элемент, будь то
Sprite, Graphics или Text,
принадлежит к контейнеру (Container). Контейнеры могут быть
вложенными, создавая иерархию сцены.
По умолчанию PixiJS отрисовывает объекты в порядке их добавления:
первый добавленный элемент находится на заднем плане,
последний — на переднем. Этот порядок можно изменять с
помощью свойства zIndex, что позволяет гибко управлять
слоями независимо от последовательности добавления в контейнер.
const sprite1 = new PIXI.Sprite(texture1);
const sprite2 = new PIXI.Sprite(texture2);
container.addChild(sprite1);
container.addChild(sprite2);
sprite1.zIndex = 2;
sprite2.zIndex = 1;
container.sortChildren(); // Пересортировка по zIndex
Ключевой момент: после изменения zIndex
необходимо вызвать sortChildren(), иначе порядок визуально
не изменится.
zIndex и
его влияниеСвойство zIndex задает положение объекта по оси
Z относительно других объектов в том же контейнере. Чем выше
значение zIndex, тем ближе к переднему плану отображается
элемент.
Особенности использования zIndex:
container.sortChildren().const bg = new PIXI.Sprite(bgTexture);
bg.zIndex = -1;
const player = new PIXI.Sprite(playerTexture);
player.zIndex = 5;
container.addChild(bg);
container.addChild(player);
container.sortChildren();
Вложенные контейнеры наследуют порядок отрисовки от родителя, но внутри себя сортируются отдельно. Это позволяет создавать слои с внутренней сортировкой, не нарушая общий порядок сцены.
const uiLayer = new PIXI.Container();
uiLayer.zIndex = 10;
const gameLayer = new PIXI.Container();
gameLayer.zIndex = 1;
app.stage.addChild(gameLayer);
app.stage.addChild(uiLayer);
gameLayer.sortChildren();
uiLayer.sortChildren();
app.stage.sortChildren();
Примечание: для корректного отображения важно
сортировать всех контейнеров сцены, если используется
zIndex.
Для крупных сцен часто используют псевдослои, когда объекты группируются по смыслу (фон, враги, игроки, эффекты, интерфейс) в отдельные контейнеры. Это облегчает управление порядком и повышает производительность:
zIndex = 0zIndex = 1zIndex = 2zIndex = 10Псевдослои позволяют изменять порядок целых групп объектов, не сортируя каждый объект отдельно.
PixiJS использует painter’s algorithm, поэтому объекты с прозрачностью могут накладываться визуально иначе, чем ожидается, если z-индексы не выставлены корректно. При работе с полупрозрачными элементами:
alpha < 1 должны располагаться на верхних
слоях.Фильтры и маски создают новые рендер-пасс и могут изменять порядок визуального наложения:
Это важно учитывать при работе с эффектами постобработки или сложными визуальными сценами.
sortChildren().zIndex вместо повторного
удаления и добавления объектов в контейнер.| Свойство / Действие | Эффект на отрисовку |
|---|---|
addChild() |
Добавление в конец контейнера |
zIndex (без sortChildren) |
Визуально не влияет |
zIndex + sortChildren() |
Сортировка по значению zIndex |
| Отрицательные zIndex | Объект перемещается за базовый слой |
| Вложенные контейнеры | Сортируются отдельно, порядок родителя сохраняется |
| Альфа < 1 | Может накладываться неправильно без правильного zIndex |
Эффективное управление порядком отрисовки и z-индексом позволяет создавать сложные сцены в PixiJS с корректным наложением объектов, прозрачностью и фильтрами, обеспечивая оптимизацию и визуальную предсказуемость.