Sprite — один из ключевых классов библиотеки PixiJS,
предназначенный для отображения текстурированных объектов на сцене.
Спрайт представляет собой прямоугольную область, на которую
накладывается текстура. В отличие от графических примитивов, создаваемых
через Graphics, спрайт ориентирован на работу с
изображениями и оптимизирован для быстрого рендеринга.
Класс Sprite наследуется от Container, что
означает поддержку:
x, y)scale)rotation)alpha)Это делает Sprite базовым строительным блоком для
2D-игр, интерфейсов и интерактивной графики.
Спрайт не существует без текстуры. Текстура (Texture) —
это область изображения, загруженного в память видеокарты. Внутри
системы рендеринга она используется повторно разными спрайтами без
дублирования данных.
Типовая цепочка:
Image → BaseTexture → Texture → Sprite
В актуальных версиях PixiJS используется система
Assets:
import { Application, Assets, Sprite } from 'pixi.js';
const app = new Application();
await app.init({ width: 800, height: 600 });
document.body.appendChild(app.canvas);
const texture = await Assets.load('images/player.png');
const sprite = new Sprite(texture);
app.stage.addChild(sprite);
После загрузки текстуры создаётся экземпляр Sprite,
которому передаётся объект Texture.
Для быстрого создания спрайта используется фабричный метод:
const sprite = Sprite.from('images/player.png');
Метод from() автоматически создаёт текстуру и связывает
её со спрайтом. Этот подход удобен для небольших проектов или
прототипирования.
sprite.x = 200;
sprite.y = 150;
или
sprite.position.set(200, 150);
Координаты задаются относительно родительского контейнера.
sprite.scale.set(2); // равномерное масштабирование
sprite.scale.x = 1.5;
sprite.scale.y = 0.5;
Масштаб влияет только на отображение, исходная текстура не изменяется.
sprite.rotation = Math.PI / 4;
Значение задаётся в радианах.
sprite.alpha = 0.5;
Диапазон значений: от 0 (полностью прозрачный) до
1 (непрозрачный).
По умолчанию спрайт позиционируется относительно левого верхнего
угла. Для изменения используется свойство anchor.
sprite.anchor.set(0.5);
Значения:
(0, 0) — левый верхний угол(0.5, 0.5) — центр(1, 1) — правый нижний уголТочка привязки особенно важна при вращении и масштабировании, так как трансформации выполняются относительно неё.
Размер можно задать напрямую:
sprite.width = 300;
sprite.height = 200;
Следует учитывать, что изменение width и
height фактически изменяет масштаб (scale), а
не исходную текстуру.
Получение исходных размеров:
sprite.texture.width
sprite.texture.height
Sprite поддерживает события взаимодействия.
sprite.eventMode = 'static';
sprite.cursor = 'pointer';
sprite.on('pointerdown', () => {
sprite.scale.set(1.2);
});
Основные события:
pointerdownpointeruppointermovepointeroverpointeroutСистема событий унифицирована и поддерживает мышь, сенсорные экраны и стилусы.
В крупных проектах применяется текстурный атлас — единое изображение с набором спрайтов. Это снижает количество переключений текстур в GPU.
Пример загрузки атласа:
const sheet = await Assets.load('images/atlas.json');
const hero = new Sprite(sheet.textures['hero_idle.png']);
Атлас обычно создаётся внешними инструментами и содержит JSON-описание областей.
Sprite оптимизирован для пакетной отрисовки (batching). Для максимальной производительности:
Если объект не меняется, можно применить кэширование:
sprite.cacheAsBitmap = true;
Это преобразует объект в текстуру и ускоряет рендеринг сложных композиций.
Так как Sprite наследуется от Container,
возможно создание иерархии:
const container = new PIXI.Container();
container.addChild(sprite);
Все трансформации родителя влияют на дочерние элементы. Это позволяет создавать сложные составные объекты: персонажи, интерфейсы, анимационные группы.
Sprite может выступать маской для других объектов:
const maskSprite = Sprite.from('mask.png');
target.mask = maskSprite;
Маска определяет видимую область целевого объекта. Это применяется для эффектов обрезки, отображения прогресса и интерфейсных элементов.
К спрайту можно применять графические фильтры:
import { BlurFilter } from 'pixi.js';
sprite.filters = [new BlurFilter(5)];
Фильтры реализуются через WebGL-шейдеры и позволяют создавать эффекты размытия, свечения, цветокоррекции и искажения.
Для освобождения ресурсов:
sprite.destroy();
При необходимости можно удалить текстуру:
sprite.destroy({ texture: true, baseTexture: true });
Важно корректно управлять жизненным циклом объектов в динамических сценах, чтобы избежать утечек памяти.
В игровых проектах часто создаются собственные классы на основе
Sprite:
class Player extends Sprite {
constructor(texture) {
super(texture);
this.speed = 5;
}
move(dx, dy) {
this.x += dx * this.speed;
this.y += dy * this.speed;
}
}
Такой подход позволяет инкапсулировать поведение и создавать архитектурно чистую структуру проекта.
Класс Sprite является фундаментальным элементом
рендеринга в PixiJS. Понимание принципов работы текстур, трансформаций и
взаимодействия со сценой формирует основу для разработки
производительных 2D-приложений и игр.