В PixiJS рендеринг управляется через объекты
Renderer или Application, которые
создают контекст WebGL или Canvas для отображения графики. Каждый
рендерер отвечает за свой холст (canvas) и поддерживает
собственный цикл обновления сцены. В крупных проектах может возникнуть
необходимость иметь несколько рендереров и переключаться между ними в
зависимости от условий (например, разные слои интерфейса или разные
игровые сцены).
Рендерер создаётся через конструктор PIXI.Renderer:
const renderer1 = new PIXI.Renderer({
width: 800,
height: 600,
backgroundColor: 0x1099bb
});
const renderer2 = new PIXI.Renderer({
width: 400,
height: 300,
backgroundColor: 0xffcc00
});
document.body.appendChild(renderer1.view);
document.body.appendChild(renderer2.view);
Ключевые моменты:
width и height определяют размеры
холста.backgroundColor задаёт цвет фона рендерера.renderer.view — это HTML-элемент
<canvas>, который вставляется в DOM.В PixiJS нет встроенного глобального флага «активного рендерера», поэтому активный рендерер определяется вручную через переменную:
let activeRenderer = renderer1;
// Переключение рендерера
activeRenderer = renderer2;
Использование такой переменной позволяет централизованно управлять рендерингом сцены:
activeRenderer.render(stage);
Где stage — корневой контейнер
PIXI.Container для объектов сцены.
При необходимости динамического переключения рендереров в анимации важно корректно управлять контекстом:
function animate() {
requestAnimationFrame(animate);
// Обновление сцены
updateScene(stage);
// Выбор рендерера на основе условий
if (someCondition) {
activeRenderer = renderer1;
} else {
activeRenderer = renderer2;
}
activeRenderer.render(stage);
}
animate();
Особенности:
requestAnimationFrame обеспечивает плавный цикл
обновления.Разделение UI и игрового мира Один рендерер можно использовать для интерфейса, другой — для основного мира. Это облегчает работу с различными размерами холста и слоями.
Разные разрешения для мобильных и десктопных версий Позволяет создавать отдельные рендереры с оптимизированными размерами и настройками производительности.
Отдельные эффекты постобработки Один рендерер для базовой сцены, другой для эффектов, например, размытия или фильтров.
Если используется PIXI.Application, активный
рендерер можно получить через свойство app.renderer:
const app1 = new PIXI.Application({ width: 800, height: 600 });
const app2 = new PIXI.Application({ width: 400, height: 300 });
let activeApp = app1;
activeApp.renderer.render(stage);
// Переключение
activeApp = app2;
activeApp.renderer.render(stage);
Отличия от чистого Renderer:
PIXI.Application создаёт свой рендерер
автоматически.app.ticker.const renderers = [renderer1, renderer2];
let activeIndex = 0;
function switchRenderer() {
activeIndex = (activeIndex + 1) % renderers.length;
}
function mainLoop() {
requestAnimationFrame(mainLoop);
updateScene(stage);
renderers[activeIndex].render(stage);
}
mainLoop();
Такой подход обеспечивает простое и контролируемое переключение между рендерерами без конфликтов и потери производительности.