AnimatedSprite — это специализированный класс
библиотеки PixiJS, предназначенный для создания анимации на основе
последовательности текстур. Он наследует функциональность от
Sprite и добавляет возможности проигрывания кадров,
управления скоростью и цикличностью анимации.
Для создания анимированного спрайта требуется массив текстур:
const textures = [
PIXI.Texture.from('frame1.png'),
PIXI.Texture.from('frame2.png'),
PIXI.Texture.from('frame3.png')
];
const animatedSprite = new PIXI.AnimatedSprite(textures);
PIXI.Texture. Каждая текстура соответствует одному кадру
анимации.PIXI.Loader.shared.add('spritesheet.json').load((loader, resources) => {
const sheet = resources['spritesheet.json'].spritesheet;
const anim = new PIXI.AnimatedSprite(sheet.animations['walk']);
});
animationSpeed — скорость анимации в
кадрах на тик (по умолчанию 1). Например,
animatedSprite.animationSpeed = 0.5 замедлит анимацию в два
раза.loop — булевое значение, определяющее,
будет ли анимация повторяться. По умолчанию true.playing — показывает текущее состояние
воспроизведения.textures — массив кадров анимации.
Можно менять динамически для изменения анимации на лету.totalFrames — общее количество кадров
в анимации.currentFrame — индекс текущего кадра.
Позволяет вручную управлять отображением.play() — запускает анимацию.stop() — останавливает анимацию на
текущем кадре.gotoAndStop(frameNumber) — перемещает
к указанному кадру и останавливает анимацию.gotoAndPlay(frameNumber) — перемещает
к указанному кадру и продолжает воспроизведение.animatedSprite.loop = false;
animatedSprite.animationSpeed = 0.3;
animatedSprite.play();
Класс поддерживает несколько событий для управления анимацией:
onComplete — вызывается после
завершения воспроизведения анимации (актуально, если
loop = false).onFrameChange — срабатывает при смене
кадра, передает индекс текущего кадра.animatedSprite.onCompl ete = () => {
console.log('Анимация завершена');
};
animatedSprite.onFrameCha nge = (currentFrame) => {
console.log('Текущий кадр:', currentFrame);
};
Спрайт-листы позволяют хранить несколько анимаций в одном JSON-файле с изображениями. После загрузки можно легко извлекать отдельные анимации:
PIXI.Loader.shared.add('character.json').load((loader, resources) => {
const sheet = resources['character.json'].spritesheet;
const walk = new PIXI.AnimatedSprite(sheet.animations['walk']);
const jump = new PIXI.AnimatedSprite(sheet.animations['jump']);
});
Преимущества:
textures.Свойство animationSpeed определяет, как
быстро меняются кадры относительно внутреннего тика
ticker:
animatedSprite.animationSpeed = 0.5; // Замедление в 2 раза
Для синхронизации с реальным временем можно использовать
delta из PIXI.Ticker:
app.ticker.add((delta) => {
animatedSprite.update(delta);
});
AnimatedSprite.autoUpdate (по умолчанию true)
позволяет отключить автоматическое обновление кадров, если необходимо
контролировать анимацию вручную.AnimatedSprite полностью поддерживает все возможности
Sprite:
const mask = new PIXI.Graphics();
mask.beginFill(0xffffff);
mask.drawCircle(50, 50, 50);
mask.endFill();
animatedSprite.mask = mask;
const blurFilter = new PIXI.filters.BlurFilter();
animatedSprite.filters = [blurFilter];
Эти инструменты позволяют создавать сложные визуальные эффекты без отдельного рендеринга каждого кадра вручную.
Текстуры можно менять в процессе выполнения для создания различных состояний персонажей или объектов:
animatedSprite.textures = sheet.animations['run'];
animatedSprite.play();
Смена текстур автоматически обновляет totalFrames и
сбрасывает currentFrame на 0, если не указано иное.
AnimatedSprite можно добавлять в контейнеры и сцены
PixiJS, как обычный Sprite:
const app = new PIXI.Application({ width: 800, height: 600 });
document.body.appendChild(app.view);
app.stage.addChild(animatedSprite);
animatedSprite.play();
Использование PIXI.Ticker обеспечивает плавное
воспроизведение анимации в цикле рендеринга.
AnimatedSprite — универсальный инструмент для создания
2D анимации в PixiJS, позволяющий:
Эти возможности делают его ключевым классом для интерактивных игр и визуальных эффектов на Canvas и WebGL.