В Babylon.js анимация спрайтов реализуется через объект
Sprite и менеджер спрайтов SpriteManager.
Спрайты позволяют отображать 2D-изображения в 3D-сцене и создавать
сложные анимационные эффекты без использования тяжелых 3D-моделей.
Ключевой метод для управления анимацией спрайта —
playAnimation.
sprite.playAnimation(from, to, loop, delay);
true — бесконечный цикл, false —
один прогон).Перед созданием спрайтов необходим SpriteManager, который управляет текстурой и количеством спрайтов:
const spriteManager = new BABYLON.SpriteManager(
"playerManager",
"textures/player.png", // текстура со спрайтами
10, // максимальное количество спрайтов
{width:64, height:64}, // размер одного кадра
scene
);
После создания менеджера можно добавлять отдельные спрайты:
const player = new BABYLON.Sprite("player", spriteManager);
player.position.y = 1;
player.size = 2;
Метод playAnimation позволяет задать последовательность
кадров и управлять цикличностью:
player.playAnimation(0, 5, true, 100);
loop = true).Для однократного воспроизведения достаточно установить
loop = false:
player.playAnimation(6, 10, false, 80);
Спрайт может иметь несколько анимационных последовательностей,
например, «ходьба», «атака», «прыжок». Для переключения между ними
используется playAnimation с разными диапазонами
кадров:
function playWalk() {
player.playAnimation(0, 5, true, 100);
}
function playAttack() {
player.playAnimation(6, 10, false, 80);
}
Использование разных диапазонов кадров позволяет экономно хранить все состояния персонажа в одном spritesheet.
Параметр delay определяет скорость смены кадров. Меньшее значение увеличивает частоту смены кадров, создавая более быструю анимацию. Например:
player.playAnimation(0, 5, true, 50); // анимация в два раза быстрее
Для динамического изменения скорости можно сохранять идентификатор анимации и корректировать delay через таймер:
let frame = 0;
let speed = 50;
scene.onBeforeRenderObservable.add(() => {
frame++;
if(frame % speed === 0){
player.playAnimation(0, 5, true, speed);
}
});
SpriteManager для группы однотипных
спрайтов.playAnimation без необходимости
— метод автоматически перезапускает анимацию, что может вызывать
визуальные «тормоза».Babylon.js позволяет отслеживать конец анимации через
onAnimationEndObservable:
player.onAnimationEndObservable.add(() => {
console.log("Анимация завершена");
player.playAnimation(0, 5, true, 100); // возвращаемся к ходьбе
});
Это удобно для перехода между состояниями персонажа, особенно когда
loop = false.
Эта функциональность делает playAnimation центральным
инструментом для создания интерактивных 2D-анимаций в 3D-сцене
Babylon.js, позволяя эффективно управлять поведением персонажей и
объектов, сохраняя при этом производительность.