В PixiJS управление циклом рендеринга и обновлением объектов сцены осуществляется с помощью класса Ticker. Он является центральным механизмом для создания анимаций, синхронизации логики игры и плавного обновления визуальных элементов. Ticker обеспечивает вызов функций с определённой частотой кадров, управляемой внутренним таймером, и позволяет строить независимые от скорости процессора анимации.
Объект Ticker создаётся через конструктор:
const ticker = new PIXI.Ticker();
или через глобальный синглтон:
const ticker = PIXI.Ticker.shared;
Ticker.shared используется для управления общим циклом приложения, что удобно, если требуется синхронизировать анимации разных объектов без создания множества отдельных тикеров.
Добавление функции для регулярного вызова выполняется методом:
ticker.add((deltaTime) => {
// Логика обновления объектов
});
Параметр deltaTime отражает количество тикеров, прошедших с последнего кадра, нормализованное относительно 60 FPS. Это позволяет создавать анимации с одинаковой скоростью на различных устройствах, независимо от реальной частоты обновления экрана.
Для контроля частоты кадров используется свойство ticker.speed, которое умножает значение deltaTime:
ticker.speed = 1.5; // Ускорение всех анимаций на 50%
Запуск и остановка тикера осуществляется методами:
ticker.start();
ticker.stop();
start() активирует внутренний цикл и начинает вызов добавленных функций, а stop() приостанавливает его, что полезно для пауз или оптимизации производительности при скрытых сценах.
Эти инструменты позволяют строить гибкую систему обновления, комбинируя постоянные анимации с одноразовыми эффектами и синхронизацией с пользовательской логикой.
Ticker применяется для:
ticker.add((delta) => {
sprite.x += 5 * delta;
sprite.rotation += 0.01 * delta;
});
let timeElapsed = 0;
ticker.add((delta) => {
timeElapsed += delta;
if (timeElapsed > 60) {
spawnEnemy();
timeElapsed = 0;
}
});
Ticker тесно связан с рендерером PixiJS. В большинстве случаев глобальный тикер добавляет в цикл метод renderer.render(stage), что позволяет автоматически обновлять сцену при каждом кадре:
ticker.add(() => {
app.renderer.render(app.stage);
});
ticker.start();
Это создаёт единый поток обновления, где логика анимаций и рендеринг выполняются согласованно, без необходимости вручную контролировать каждый кадр.
Ticker является ядром системы анимации и управления временем в PixiJS. Его правильное использование обеспечивает плавность визуальных эффектов, стабильность игрового процесса и эффективное распределение ресурсов.