В PixiJS анимации обычно реализуются с помощью класса
PIXI.AnimatedSprite, который позволяет
управлять последовательностью кадров из текстур. Для создания анимации
необходимо собрать массив текстур:
const textures = [];
for (let i = 0; i < 10; i++) {
const texture = PIXI.Texture.from(`frame${i}.png`);
textures.push(texture);
}
const animSprite = new PIXI.AnimatedSprite(textures);
Ключевые параметры:
animationSpeed — скорость воспроизведения, где
1 соответствует исходной частоте кадров (обычно 60
FPS).loop — логическое значение, определяющее, будет ли
анимация зациклена.play() — запускает воспроизведение с текущего
кадра.stop() — останавливает воспроизведение на текущем
кадре.gotoAndPlay(frameNumber) — перемещает анимацию на
указанный кадр и запускает воспроизведение.gotoAndStop(frameNumber) — перемещает анимацию на
указанный кадр и останавливает её.play()Метод play() запускает анимацию с
текущего кадра. Если объект только что создан и метод
play() ещё не вызывался, воспроизведение начнётся с первого
кадра.
animSprite.loop = true;
animSprite.animationSpeed = 0.5;
animSprite.play();
play() не вызывает сдвига или перезапуска.stop()Метод stop() приостанавливает
воспроизведение на текущем кадре:
animSprite.stop();
console.log(animSprite.currentFrame); // выводит текущий кадр
stop() можно использовать
gotoAndPlay() или gotoAndStop() для точного
управления кадром.gotoAndPlay() и gotoAndStop()Эти методы позволяют мгновенно перейти к конкретному кадру:
animSprite.gotoAndPlay(5); // с 5-го кадра воспроизводить дальше
animSprite.gotoAndStop(2); // перейти на 2-й кадр и остановиться
Особенности использования:
gotoAndPlay() автоматически запускает воспроизведение
независимо от предыдущего состояния.gotoAndStop() удобно использовать для
интерактивных элементов интерфейса, где требуется
отображение конкретного состояния (например, кнопка в состоянии
hover).Скорость воспроизведения
(animationSpeed) регулируется числом с плавающей
точкой:
animSprite.animationSpeed = 0.2; // замедление анимации
animSprite.play();
1 соответствует стандартной частоте
кадров.1 замедляют анимацию, больше
1 ускоряют.Цикличность анимации (loop) управляет
повторением:
animSprite.loop = false; // анимация выполнится один раз
animSprite.onCompl ete = () => {
console.log("Анимация завершена");
};
animSprite.play();
onComplete срабатывает при окончании не
зацикленной анимации.gotoAndPlay() можно реализовать
динамическое воспроизведение разных участков спрайта.PixiJS позволяет реагировать на события анимации:
onFrameChange — вызывается при смене кадра:animSprite.onFrameCha nge = (currentFrame) => {
console.log(`Сменился кадр на ${currentFrame}`);
};
onLoop — вызывается при завершении одного цикла
воспроизведения зацикленной анимации:animSprite.onL oop = () => {
console.log("Цикл завершён");
};
Эти события полезны для синхронизации звуков, визуальных эффектов и игровой логики.
spritesheets) вместо отдельных файлов, так как это снижает
нагрузку на GPU.gotoAndPlay() и stop()
позволяет создавать сложные сценарии воспроизведения,
где анимация может быть интерактивно управляемой и изменяться в
зависимости от состояния игры.animationSpeed вместе с игровым таймером
обеспечивает гибкое управление временем анимации.animSprite.loop = false;
animSprite.animationSpeed = 0.3;
animSprite.onCompl ete = () => {
animSprite.gotoAndPlay(0); // повторяем с первого кадра
};
animSprite.gotoAndPlay(3); // начинаем с кадра 3
В этом примере анимация запускается с конкретного кадра, проходит до конца, а затем автоматически перезапускается. Это позволяет создавать циклические анимации с произвольной точкой начала.