Класс Texture является фундаментальным элементом
рендеринга в библиотеке PixiJS. Он представляет собой текстуру
изображения, которую можно использовать для спрайтов, тайлов и других
визуальных объектов. Основная задача Texture — хранение и
управление графическим содержимым, оптимизированным для WebGL и
Canvas.
Текстура в PixiJS создаётся на основе источника (изображение, канвас
или другое текстурное представление) и предоставляет доступ к ключевым
свойствам, таким как размер, рамки (frame) и область
обрезки (trim). Благодаря этому возможно эффективное
использование спрайт-листов и атласов.
Самый простой способ — использовать готовое изображение:
const texture = PIXI.Texture.from('assets/sprite.png');
Метод Texture.from автоматически создаёт текстуру из URL
или HTMLImageElement. Если изображение ещё не загружено, PixiJS
использует встроенный менеджер загрузки, создавая текстуру после
завершения загрузки.
Текстуру можно создать из HTMLCanvasElement или PIXI.Graphics:
const graphics = new PIXI.Graphics();
graphics.beginFill(0xff0000);
graphics.drawRect(0, 0, 100, 100);
graphics.endFill();
const texture = PIXI.Texture.from(graphics.generateCanvasTexture());
Такой подход позволяет динамически генерировать текстуры без необходимости загружать отдельные файлы.
Для работы с атласами спрайтов используется метод
Texture.from с указанием имени фрейма:
const texture = PIXI.Texture.from('spritesheet.json#hero_idle');
Здесь spritesheet.json — JSON-атлас, а
hero_idle — имя фрейма в атласе. PixiJS автоматически
выделяет нужный прямоугольник изображения.
BaseTexture, который хранит данные изображения и параметры
загрузки.Rectangle, определяющий
область исходного изображения, используемую для текстуры.Прямой доступ к этим свойствам позволяет реализовать сложные эффекты, такие как анимация или смена фреймов на лету.
clone()Создаёт копию текстуры с теми же параметрами, но отдельной ссылкой:
const cloneTexture = texture.clone();
Это полезно, если необходимо использовать одну и ту же базовую текстуру с разными рамками или параметрами.
update()Принудительно обновляет текстуру, если содержимое источника изменилось:
texture.update();
Применяется, например, после динамического изменения канваса, связанного с текстурой.
destroy()Очищает ресурсы, связанные с текстурой, освобождая память GPU:
texture.destroy({ baseTexture: true });
Важно управлять текстурами вручную при работе с большим количеством ресурсов, чтобы избежать утечек памяти.
BaseTextureКаждая текстура основана на BaseTexture. Этот объект
отвечает за сам источник изображения и может использоваться несколькими
текстурами. Основные моменты:
BaseTexture, экономя память.scaleMode, mipmap и wrapMode
влияют на визуальное качество при масштабировании и повторении
текстуры.BaseTexture
генерирует события loaded и error, что
упрощает асинхронную работу с ресурсами.Пример создания BaseTexture вручную:
const base = new PIXI.BaseTexture.from('assets/texture.png');
const texture = new PIXI.Texture(base);
После создания текстуры она может быть назначена спрайту:
const sprite = new PIXI.Sprite(texture);
sprite.x = 100;
sprite.y = 50;
app.stage.addChild(sprite);
Применение разных фреймов одной базовой текстуры позволяет анимировать спрайт без загрузки дополнительных изображений. Для анимаций часто создают массив текстур:
const textures = [];
for (let i = 0; i < 4; i++) {
textures.push(PIXI.Texture.from(`frame${i}.png`));
}
const animatedSprite = new PIXI.AnimatedSprite(textures);
animatedSprite.play();
app.stage.addChild(animatedSprite);
BaseTexture
экономит память при одинаковых изображениях в разных объектах.destroy() предотвращает утечки памяти.Класс Texture в PixiJS — ключевой инструмент для работы
с графикой, предоставляющий гибкий и эффективный способ управления
изображениями, фреймами и анимациями, с оптимизацией под GPU и
асинхронную загрузку ресурсов.