В основе работы с внешними файлами в PixiJS лежит
модуль @pixi/assets, пришедший на смену устаревшему
Loader. Современная система загрузки построена на понятии
парсеров ресурсов — специализированных обработчиков,
которые преобразуют загруженные данные в объекты, пригодные для
использования в графическом движке.
Парсер выполняет две ключевые задачи:
Texture, BaseTexture,
SpriteSheet, BitmapFont, Sound и
др.).Таким образом, механизм загрузки разделяется на два этапа:
Процесс загрузки ресурса проходит через несколько стадий:
Система устроена модульно. Каждый парсер регистрируется внутри
Assets и может быть отключён или заменён.
Пример загрузки ресурса:
import { Assets } from 'pixi.js';
const texture = await Assets.load('images/player.png');
В зависимости от расширения .png автоматически будет
задействован соответствующий парсер изображений.
Встроенный парсер изображений обрабатывает:
Парсер создаёт:
BaseTextureTextureЗагруженное изображение автоматически кешируется. Повторный вызов
Assets.load() с тем же URL вернёт уже существующий
объект.
Пример:
const texture = await Assets.load('hero.png');
const sprite = new PIXI.Sprite(texture);
createImageBitmap, если доступен, что
ускоряет декодирование.resolution.hero@2x.png).JSON-файлы в PixiJS имеют особое значение, так как часто используются как метаданные для других ресурсов.
const data = await Assets.load('config.json');
Парсер JSON определяет структуру содержимого и, при необходимости, передаёт обработку специализированному парсеру (например, для атласов).
Текстурный атлас — это изображение, содержащее множество спрайтов, плюс JSON-файл с координатами каждого фрагмента.
{
"frames": {
"walk_01.png": {
"frame": { "x": 0, "y": 0, "w": 64, "h": 64 }
}
},
"meta": {
"image": "atlas.png"
}
}
SpriteSheet.Texture для каждого кадра.Пример загрузки:
const sheet = await Assets.load('atlas.json');
const sprite = new PIXI.Sprite(sheet.textures['walk_01.png']);
BitmapFont используется для высокопроизводительного рендеринга текста.
Пример загрузки:
await Assets.load('font.fnt');
После загрузки шрифт регистрируется в системе
BitmapFont.
BitmapText.Создание текста:
const text = new PIXI.BitmapText('SCORE: 100', {
fontName: 'ArcadeFont'
});
SVG-файлы обрабатываются иначе, чем растровые изображения.
Image.Canvas.Texture.SVG подходит для иконок и масштабируемых элементов интерфейса.
PixiJS поддерживает загрузку видеофайлов в качестве текстур.
Пример:
const texture = await Assets.load('intro.mp4');
const videoSprite = new PIXI.Sprite(texture);
BaseTexture.Особенности:
При подключении пакета @pixi/sound добавляется парсер
аудиофайлов.
Поддерживаемые форматы:
Пример:
import { sound } from '@pixi/sound';
await Assets.load('jump.mp3');
sound.play('jump.mp3');
Парсер создаёт объект звука и регистрирует его в системе управления аудио.
Файлы .txt, .glsl, .frag,
.vert загружаются как строки.
Это особенно важно для:
Пример загрузки шейдера:
const fragmentShader = await Assets.load('shader.frag');
Полученный текст можно передать в PIXI.Filter.
Система определяет подходящий парсер по:
Приоритет парсеров задаётся при их регистрации. Более специфичные обработчики имеют больший приоритет.
После успешного парсинга ресурс помещается в кеш
Assets.cache.
Повторная загрузка:
const texture1 = await Assets.load('enemy.png');
const texture2 = await Assets.load('enemy.png');
texture1 и texture2 будут ссылаться на один
и тот же объект.
Очистка кеша:
Assets.unload('enemy.png');
Это освобождает связанные текстуры и GPU-память.
Система поддерживает группировку ресурсов в бандлы:
Assets.addBundle('level1', {
background: 'bg.png',
atlas: 'atlas.json'
});
await Assets.loadBundle('level1');
Каждый ресурс внутри бандла проходит через соответствующий встроенный парсер.
Некоторые парсеры зависят друг от друга:
Такая композиция делает систему расширяемой и независимой от конкретных типов ресурсов.
Ключевые механизмы оптимизации:
createImageBitmap.При работе с большим количеством ресурсов рекомендуется:
Встроенные парсеры являются лишь частью системы. Архитектура позволяет:
Каждый парсер реализует интерфейс с методами проверки и загрузки, что делает систему гибкой и пригодной для сложных проектов.
Встроенные парсеры ресурсов образуют фундамент механизма загрузки в PixiJS, обеспечивая автоматическую интерпретацию изображений, атласов, шрифтов, видео, аудио и текстовых данных с единым интерфейсом и централизованным управлением кешем.