В PixiJS управление временем и синхронизация
анимаций являются ключевыми аспектами работы с игровыми сценами и
интерактивной графикой. Основные свойства для работы с временными
интервалами — это deltaTime, deltaMS и
elapsedMS, доступные через объект Ticker.
Их правильное понимание позволяет реализовывать плавные анимации,
независимые от производительности устройства.
deltaTimedeltaTime — это множитель времени,
выраженный в количестве кадров относительно базовой скорости 60 FPS. Его
основная цель — нормализовать движение объектов при различных FPS.
Формула расчета:
deltaTime = deltaMS / (1000 / 60)
deltaTime будет примерно
2, что позволяет компенсировать снижение частоты
кадров.Пример использования:
app.ticker.add((deltaTime) => {
sprite.x += 5 * deltaTime;
});
В этом примере объект sprite перемещается на одинаковое
расстояние в единицу времени, независимо от частоты кадров.
Ключевой момент: deltaTime удобен для
кратких, быстрых расчетов, когда важно поддерживать скорость анимации
относительно «идеального» FPS.
deltaMSdeltaMS — это реальное время между
кадрами в миллисекундах. Оно не нормализовано и напрямую
отражает задержку, возникающую при рендеринге:
deltaMS = текущее_время - время_прошлого_кадра
Пример использования:
app.ticker.add((deltaTime, deltaMS) => {
sprite.x += 0.1 * deltaMS;
});
deltaMS = 16.67 (приблизительно 60 FPS)
объект переместится на 0.1 * 16.67 ≈ 1.667 пикселей.deltaMS ≈ 33.33, и объект
переместится на 3.333 пикселя, компенсируя падение частоты
кадров.Особенности:
elapsedMSelapsedMS — это общее время, прошедшее с начала
работы Ticker, выраженное в миллисекундах. Оно постоянно растет
и служит для отслеживания абсолютного времени.
Пример использования:
app.ticker.add(() => {
console.log(app.ticker.elapsedMS);
});
Ключевой момент: elapsedMS не зависит
от FPS и не нормализуется — это чистый таймер от старта Ticker.
| Свойство | Тип значения | Зависимость от FPS | Основное применение |
|---|---|---|---|
deltaTime |
Безразмерное | Нормализовано | Плавное движение и анимация относительно 60 FPS |
deltaMS |
Миллисекунды | Не нормализовано | Физика, временные эффекты, точные расчеты скорости |
elapsedMS |
Миллисекунды | Не нормализовано | Отслеживание абсолютного времени, таймеры, события |
Для анимаций спрайтов и визуальных эффектов:
Использовать deltaTime для краткости кода и удобства, когда
важно сохранить скорость движения при разных FPS.
Для физики или точных временных расчетов:
Использовать deltaMS, чтобы движения и столкновения
оставались корректными при нестабильной частоте кадров.
Для отслеживания общего времени и циклов:
Использовать elapsedMS, например, для запуска событий через
заданные интервалы или для синхронизации музыки и анимаций.
Смешанное использование: Часто удобно
комбинировать deltaTime и elapsedMS, используя
deltaTime для смещения объектов, а elapsedMS —
для проверки условий или таймеров.
app.ticker.add((deltaTime, deltaMS) => {
// Плавное смещение спрайта с нормализацией FPS
sprite.x += 2 * deltaTime;
// Физика объекта с учетом реального времени
velocity += acceleration * (deltaMS / 1000);
sprite.y += velocity * (deltaMS / 1000);
// Вызов события каждые 2 секунды
if (Math.floor(app.ticker.elapsedMS / 2000) !== Math.floor((app.ticker.elapsedMS - deltaMS) / 2000)) {
console.log('Событие прошло каждые 2 секунды');
}
});
В этом примере одновременно используются все три свойства:
deltaTime для визуальной анимации, deltaMS для
физики и elapsedMS для таймера. Такой подход обеспечивает
точность и плавность, независимо от производительности устройства.