В PixiJS спрайт-лист (texture atlas) представляет собой набор текстур, объединённых в одно изображение, что позволяет оптимизировать рендеринг и уменьшить количество загрузок ресурсов. Ручное создание спрайт-листа полезно при необходимости полного контроля над структурой и размещением текстур, особенно при динамическом контенте или нестандартных игровых эффектах.
Для начала необходимо загрузить исходное изображение с помощью
PIXI.Texture.from. Это создаёт базовую текстуру, из которой
впоследствии можно вырезать отдельные спрайты.
const baseTexture = PIXI.Texture.from('spritesheet.png');
baseTexture хранит в себе полное изображение
спрайт-листа. Важно убедиться, что изображение полностью загружено до
дальнейшей работы с его регионами.
Каждый спрайт создаётся на основе прямоугольной области исходного
изображения с помощью PIXI.Texture и
PIXI.Rectangle:
const frame = new PIXI.Rectangle(0, 0, 64, 64);
const spriteTexture = new PIXI.Texture(baseTexture, frame);
const sprite = new PIXI.Sprite(spriteTexture);
Ключевые моменты:
Rectangle(x, y, width, height) задаёт область внутри
спрайт-листа.(x, y) — это верхний левый угол области
относительно всего изображения.При ручном создании важно систематизировать координаты фреймов. Для этого обычно используется структура данных:
const frames = {
heroIdle: { x: 0, y: 0, width: 64, height: 64 },
heroRun1: { x: 64, y: 0, width: 64, height: 64 },
heroRun2: { x: 128, y: 0, width: 64, height: 64 },
};
Доступ к текстурам реализуется через динамическое создание объектов:
const textures = {};
for (const key in frames) {
const f = frames[key];
textures[key] = new PIXI.Texture(baseTexture, new PIXI.Rectangle(f.x, f.y, f.width, f.height));
}
Такой подход упрощает создание анимаций и повторное использование текстур.
PixiJS поддерживает анимации через PIXI.AnimatedSprite,
используя массив текстур:
const runTextures = [textures.heroRun1, textures.heroRun2];
const runAnimation = new PIXI.AnimatedSprite(runTextures);
runAnimation.animationSpeed = 0.1;
runAnimation.loop = true;
runAnimation.play();
Особенности:
animationSpeed регулирует скорость проигрывания.loop определяет повторение цикла.Ручной спрайт-лист позволяет минимизировать количество загрузок и улучшить производительность, но требует внимательного контроля памяти. Следует учитывать:
PIXI.Texture вместо создания
новых объектов снижает нагрузку.destroy()
освобождает GPU-память:spriteTexture.destroy(true);
Параметр true удаляет также исходный
baseTexture, если он больше не нужен.
В PixiJS можно добавлять новые области в существующую текстуру во
время работы приложения. Для этого создаётся новая
PIXI.Texture, ссылающаяся на исходное изображение:
const extraFrame = new PIXI.Rectangle(192, 0, 64, 64);
textures.heroJump = new PIXI.Texture(baseTexture, extraFrame);
Такой метод удобен для модульных игр, где новые спрайты подгружаются постепенно.
baseTexture.Ручное создание спрайт-листа предоставляет полный контроль над структурой и использованием ресурсов, что особенно важно для игр с нестандартной графикой или динамически формируемыми элементами интерфейса.