PixiJS — это мощная библиотека для рендеринга 2D-графики в браузере
на основе WebGL с автоматическим падением на Canvas. Основой любого
приложения на PixiJS является создание экземпляра
Application, управление ресурсами и организация жизненного
цикла сцены. Ключевым аспектом современной разработки является
использование асинхронного метода init, который позволяет
корректно загружать ресурсы и инициализировать элементы сцены до её
отображения.
Создание нового приложения начинается с инициализации объекта
PIXI.Application:
const app = new PIXI.Application({
width: 800,
height: 600,
backgroundColor: 0x1099bb,
resolution: window.devicePixelRatio || 1,
});
document.body.appendChild(app.view);
Ключевые параметры:
width и height — размеры канваса.backgroundColor — фон сцены.resolution — масштабирование в зависимости от DPI
экрана.view — HTML-элемент <canvas>, на
который производится рендеринг.После создания приложения жизненный цикл состоит из нескольких этапов: загрузка ресурсов, инициализация сцены, основной цикл рендеринга, обработка событий и освобождение ресурсов.
Метод init чаще всего используется для подготовки
ресурсов перед запуском игры или визуального приложения. Асинхронная
загрузка гарантирует, что все текстуры, шрифты и спрайты будут готовы до
начала рендеринга.
Пример использования async init:
async function init() {
const loader = new PIXI.Loader();
loader.add('hero', 'assets/hero.png');
loader.add('background', 'assets/background.jpg');
await new Promise((resolve, reject) => {
loader.load((loader, resources) => {
if (!resources.hero || !resources.background) {
reject('Ошибка загрузки ресурсов');
} else {
resolve(resources);
}
});
});
const background = new PIXI.Sprite(loader.resources.background.texture);
const hero = new PIXI.Sprite(loader.resources.hero.texture);
hero.x = app.screen.width / 2;
hero.y = app.screen.height / 2;
hero.anchor.set(0.5);
app.stage.addChild(background);
app.stage.addChild(hero);
return { hero, background };
}
Особенности подхода:
async/await делает код линейным и
понятным.PIXI.Loader поддерживает добавление нескольких ресурсов
и управление приоритетом загрузки.resources содержит ссылки на загруженные
текстуры, которые можно использовать для создания спрайтов.Жизненный цикл приложения в PixiJS можно условно разделить на следующие этапы:
init) — загрузка
ресурсов и создание основных объектов сцены.stage.addChild) —
объекты становятся видимыми на канвасе.ticker) — основной цикл,
который обновляет логику и отрисовку.PIXI.Ticker обеспечивает плавное обновление сцены на
каждом кадре. Метод add позволяет добавить функцию
обновления:
app.ticker.add((delta) => {
hero.rotation += 0.01 * delta;
});
Особенности:
delta показывает относительное смещение между кадрами,
что позволяет корректно рассчитывать движение при изменении FPS.Сочетание async init и жизненного цикла приложения
позволяет организовать правильный порядок действий:
async function main() {
const { hero, background } = await init();
app.ticker.add((delta) => {
hero.x += 2 * delta;
if (hero.x > app.screen.width) hero.x = 0;
});
}
main();
Преимущества такого подхода:
ticker не выполняется до того, как
объекты сцены созданы.Для больших проектов важно своевременно удалять ненужные текстуры и объекты:
app.stage.removeChild(hero);
hero.destroy({ texture: true, baseTexture: true });
destroy({ texture: true, baseTexture: true }) полностью
освобождает память GPU.init — базовая точка
подготовки ресурсов.Такой подход позволяет создавать масштабируемые, быстрые и стабильные приложения с использованием PixiJS, где асинхронная инициализация и управление жизненным циклом сцены составляют фундамент архитектуры.