В PixiJS обработка анимаций часто осуществляется через спрайт-листы — изображения, содержащие последовательность кадров, которые формируют анимацию. Работа со спрайт-листами позволяет значительно повысить производительность и упростить управление графикой.
Спрайт-лист обычно сопровождается JSON-файлом или другим форматом
данных, описывающим координаты и размеры каждого кадра. В PixiJS для
загрузки спрайт-листа используется PIXI.Loader:
const loader = new PIXI.Loader();
loader.add('character', 'assets/character.json').load((loader, resources) => {
const sheet = resources.character.spritesheet;
});
Ключевой момент: JSON-файл должен содержать данные о
каждом кадре: его позицию в изображении, размеры, и при необходимости
точки привязки (anchor). PixiJS автоматически преобразует эти данные в
объекты PIXI.Texture.
После загрузки спрайт-листа можно создавать анимированные спрайты
через класс PIXI.AnimatedSprite:
const frames = [];
for (let i = 0; i < 4; i++) {
frames.push(PIXI.Texture.from(`walk_${i}.png`));
}
const walkingSprite = new PIXI.AnimatedSprite(frames);
walkingSprite.animationSpeed = 0.1;
walkingSprite.play();
app.stage.addChild(walkingSprite);
frames — массив текстур, полученных из
спрайт-листа.animationSpeed — скорость анимации. Значение
1 соответствует стандартной частоте кадра.play() запускает анимацию. Для остановки используется
метод stop().PixiJS предоставляет гибкие инструменты для управления анимациями:
loop — определяет, будет ли анимация повторяться:
walkingSprite.loop = false;onComplete — колбэк при завершении воспроизведения:
walkingSprite.onCompl ete = () => {
console.log('Анимация завершена');
};gotoAndStop(index) и gotoAndPlay(index) позволяют перейти к конкретному кадру:
walkingSprite.gotoAndStop(2);
walkingSprite.gotoAndPlay(0);Для повышения производительности рекомендуется использовать текстурные атласы, объединяющие несколько спрайт-листов в один большой PNG. PixiJS эффективно работает с такими атласами, минимизируя переключение текстур в WebGL.
Также полезно:
PIXI.BaseTexture для
повторного применения одной текстуры в нескольких спрайтах.Loader до
начала анимации, чтобы избежать мерцаний и задержек.Анимированные спрайты наследуют все свойства
PIXI.Sprite:
position — позиция на сцене:
walkingSprite.x = 100;
walkingSprite.y = 200;scale — масштаб:
walkingSprite.scale.set(1.5, 1.5);rotation — вращение:
walkingSprite.rotation = Math.PI / 4;anchor — точка привязки для вращения и позиционирования:
walkingSprite.anchor.set(0.5, 0.5);Если спрайт-лист содержит несколько анимаций (например, ходьба, прыжок, атака), рекомендуется создавать отдельные массивы текстур для каждой анимации:
const animations = {
walk: [],
jump: []
};
for (let i = 0; i < 4; i++) animations.walk.push(PIXI.Texture.from(`walk_${i}.png`));
for (let i = 0; i < 3; i++) animations.jump.push(PIXI.Texture.from(`jump_${i}.png`));
const sprite = new PIXI.AnimatedSprite(animations.walk);
sprite.play();
Переключение между анимациями можно выполнять через:
sprite.textures = animations.jump;
sprite.play();
Анимированные спрайты можно сочетать с интерактивными событиями:
walkingSprite.interactive = true;
walkingSprite.buttonMode = true;
walkingSprite.on('pointerdown', () => {
walkingSprite.textures = animations.jump;
walkingSprite.play();
});
Это позволяет создавать игровые элементы, реагирующие на нажатие или наведение мыши, сохраняя плавность анимации.
PixiJS использует WebGL для рендеринга спрайтов. Преимущество работы со спрайт-листами в том, что WebGL переключает текстуру только один раз на весь атлас, даже если анимированный спрайт состоит из десятков кадров. Это критически важно для производительности на мобильных устройствах и при больших сценах.
Основы работы с кадрами из спрайт-листа в PixiJS позволяют создавать
плавные, управляемые анимации, интегрируемые в интерактивные сцены.
Правильное использование атласов, оптимизация количества кадров и
управление анимацией через PIXI.AnimatedSprite обеспечивают
стабильное и высокопроизводительное отображение графики.