PixiJS предоставляет гибкий механизм загрузки ресурсов через менеджер
загрузки Loader. Для упрощения работы с большим количеством
ресурсов используется пакетная загрузка с помощью
метода loadBundle. Это позволяет структурировать ассеты,
группировать их по категориям и загружать единым пакетом, повышая
читаемость и управляемость кода.
Бандл (bundle) — это набор ресурсов, идентифицируемых уникальным
именем. Для его создания используется метод add объекта
Loader с параметром bundle. Пример:
const loader = new PIXI.Loader();
loader.add('background', 'assets/bg.png', { bundle: 'main' });
loader.add('hero', 'assets/hero.png', { bundle: 'main' });
loader.add('enemy', 'assets/enemy.png', { bundle: 'main' });
loader.add('music', 'assets/music.mp3', { bundle: 'audio' });
В этом примере создаются два бандла: main с графикой и
audio с музыкой. Каждый ресурс получает имя для удобного
доступа после загрузки.
Метод loadBundle запускает загрузку конкретного бандла.
Если не указать имя бандла, можно загрузить сразу все ресурсы:
loader.loadBundle('main', (loader, resources) => {
const bg = resources.background.texture;
const hero = resources.hero.texture;
const enemy = resources.enemy.texture;
const spriteBg = new PIXI.Sprite(bg);
const spriteHero = new PIXI.Sprite(hero);
const spriteEnemy = new PIXI.Sprite(enemy);
app.stage.addChild(spriteBg, spriteHero, spriteEnemy);
});
Ключевые моменты:
resources содержит все загруженные ресурсы бандла в
виде объекта: ключ — имя ресурса, значение — объект с данными
(Texture, BaseTexture, Audio, и
т. д.).async/awaitВ современных проектах удобно использовать промисы и
async/await для управления загрузкой:
async function loadMainBundle() {
await loader.loadBundle('main');
const resources = loader.resources;
const bg = new PIXI.Sprite(resources.background.texture);
const hero = new PIXI.Sprite(resources.hero.texture);
app.stage.addChild(bg, hero);
}
loadMainBundle();
Преимущества такого подхода:
try/catch.В больших приложениях часто ресурсы зависят друг от друга. PixiJS позволяет запускать загрузку одного бандла после другого:
loader.loadBundle('main', () => {
console.log('Main bundle загружен');
loader.loadBundle('audio', () => {
console.log('Audio bundle загружен');
});
});
Можно реализовать цепочку загрузки:
main).audio).Такой подход снижает вероятность обращения к ресурсам, которые ещё не загружены.
Метод loadBundle поддерживает обработку ошибок через
стандартные события Loader:
loader.onError.add((error, loader, resource) => {
console.error(`Ошибка при загрузке ${resource.url}: ${error.message}`);
});
loader.loadBundle('main', (loader, resources) => {
console.log('Загрузка завершена');
});
Можно комбинировать onError и
async/await:
try {
await loader.loadBundle('main');
} catch (err) {
console.error('Не удалось загрузить бандл main:', err);
}
Пример динамической загрузки при смене уровня:
async function loadLevel(levelName) {
await loader.loadBundle(levelName);
const res = loader.resources;
// Создание игровых объектов с использованием res
}
PixiJS автоматически определяет тип ресурса по расширению файла. Можно загружать:
.png, .jpg,
.gif, .webp.json или
.atlas.fnt и .xml.mp3, .ogg (с
дополнительными плагинами)При необходимости можно явно указывать
loader.add(name, url, options) с параметром
loadType для точного контроля обработки ресурса.
Использование loadBundle в PixiJS обеспечивает:
Грамотное применение бандлов ускоряет процесс разработки и улучшает опыт пользователей за счет минимизации времени ожидания при старте приложения.