PixiJS использует структуру графа отображения (display list) для организации и управления визуальными объектами на сцене. Граф отображения представляет собой иерархию объектов, где каждый объект может быть контейнером для других объектов, создавая древовидную структуру. Эта архитектура обеспечивает эффективное управление рендерингом, обработку событий и трансформаций.
DisplayObject Базовый класс для всех визуальных элементов. Обеспечивает:
x, y)scale.x, scale.y)rotation)alpha)visible)Все объекты в сцене, будь то текстуры, спрайты или контейнеры, наследуют DisplayObject.
Sprite Представляет собой графический объект, основанный на текстуре. Основные особенности:
const sprite = PIXI.Sprite.from('image.png');
sprite.x = 100;
sprite.y = 150;
sprite.scale.set(0.5, 0.5);Container Контейнер используется для группировки объектов, формируя ветви графа отображения. Он позволяет:
const container = new PIXI.Container();
container.addChild(sprite);
container.x = 50;
container.y = 50;Graphics Объект для отрисовки примитивов: прямоугольников, кругов, линий и сложных фигур. Позволяет создавать динамические формы без текстур.
const graphics = new PIXI.Graphics();
graphics.beginFill(0xff0000);
graphics.drawRect(0, 0, 100, 100);
graphics.endFill();
container.addChild(graphics);В графе отображения свойства трансформации наследуются от родительского объекта. Положение, масштаб и вращение дочернего объекта комбинируются с аналогичными свойствами контейнера. Это позволяет создавать сложные композиции без необходимости вручную рассчитывать координаты каждого элемента.
Пример комбинированной трансформации:
const parent = new PIXI.Container();
parent.x = 100;
parent.y = 100;
const child = new PIXI.Sprite.from('icon.png');
child.x = 50;
child.y = 50;
parent.addChild(child);
// Фактическая позиция child на сцене будет (150, 150)
setChildIndex:container.setChildIndex(sprite, 0); // перемещает sprite на задний план
Все объекты графа отображения могут быть интерактивными при установке
свойства interactive = true. События, такие как
click, pointerdown или
pointermove, распространяются по иерархии
графа и учитывают вложенные трансформации.
sprite.interactive = true;
sprite.on('pointerdown', () => {
console.log('Sprite нажат');
});
Контейнеры также могут быть интерактивными, что позволяет обрабатывать события на группах объектов.
sprite.filters = [new PIXI.filters.BlurFilter()];
const mask = new PIXI.Graphics();
mask.beginFill(0xffffff);
mask.drawCircle(75, 75, 50);
mask.endFill();
container.mask = mask;
Маски наследуются, и вложенные объекты отображаются только внутри заданной области.
cacheAsBitmap для
статичных контейнеров ускоряет отрисовку:container.cacheAsBitmap = true;
removeChild освобождает память и предотвращает лишние
вычисления.PixiJS строит сцену как древовидный граф объектов, где каждый объект:
Эта архитектура обеспечивает гибкость в построении сцен, от простых спрайтов до сложных многослойных интерфейсов и анимаций.