В Phaser таймеры являются мощным инструментом для управления временем в игровом цикле. Они позволяют запускать функции через определённый интервал, создавать повторяющиеся действия и управлять сложными последовательностями событий.
this.time.addEventМетод addEvent объекта time используется
для создания таймера с определёнными параметрами. Его базовый синтаксис
выглядит следующим образом:
this.time.addEvent({
delay: 1000, // задержка в миллисекундах
callback: myFunction, // функция, вызываемая по истечении задержки
callbackScope: this, // контекст выполнения функции
repeat: 0, // количество повторений (0 — один раз)
loop: false // повторять бесконечно
});
this, который
будет использоваться внутри функции. Если не указан, используется
глобальный контекст.repeat: 2 вызовет функцию трижды
(первый вызов + 2 повторения).true, событие будет
повторяться бесконечно с указанной задержкой.this.time.addEvent({
delay: 2000,
callback: () => {
console.log('Событие сработало через 2 секунды');
},
callbackScope: this
});
В этом примере функция выполнится один раз через 2 секунды после добавления события.
repeatДля повторяющихся действий используется параметр repeat.
Например, если необходимо выполнить действие пять раз с интервалом 1
секунда:
this.time.addEvent({
delay: 1000,
callback: () => {
console.log('Повторяющееся событие');
},
repeat: 4,
callbackScope: this
});
Особенности:
delay.loopДля создания бесконечных таймеров используется параметр
loop. Это удобно для периодического обновления состояния
игры, анимаций или спавна объектов:
this.time.addEvent({
delay: 500,
callback: () => {
console.log('Бесконечный таймер каждые 0.5 секунды');
},
loop: true
});
repeat игнорируется, если установлен
loop: true.remove.Метод addEvent возвращает объект
TimerEvent, который предоставляет возможности
управления:
let timerEvent = this.time.addEvent({
delay: 1000,
callback: () => console.log('Таймер'),
loop: true
});
// Остановка таймера
timerEvent.remove(false); // false — не вызывает callback при удалении
// Пауза таймера
timerEvent.paused = true;
// Возобновление таймера
timerEvent.paused = false;
Ключевые свойства и методы
TimerEvent:
paused — булевое значение, останавливающее или
возобновляющее таймер.elapsed — количество времени, прошедшее с начала
таймера.repeatCount — количество повторений, уже выполненных
таймером.remove() — удаляет таймер из системы Phaser.Анимация или спавн врагов Таймеры идеально подходят для периодического создания объектов на сцене, например, спавна врагов каждые 3 секунды.
Отложенные эффекты Можно запускать события с задержкой, например, вспышки, выстрелы или таймеры для бонусов.
Секундомеры и обратный отсчёт Используя таймеры
с repeat, легко реализовать обратный отсчёт или
отслеживание времени уровня.
Комбинации повторяющихся и одноразовых действий Таймеры могут запускать одноразовое действие и после его завершения создавать новый повторяющийся таймер, обеспечивая гибкую последовательность событий.
loop для коротких интервалов может
нагружать цикл рендеринга; важно учитывать производительность при
высокой частоте обновлений.TimerEvent
позволяет динамически изменять поведение игры без пересоздания
событий.Таймеры Phaser интегрированы с игровым циклом (update) и
синхронизируются с scene.time. Это обеспечивает:
delay — определяет интервалcallback — функция, выполняемая по таймеруcallbackScope — контекст выполненияrepeat — количество повторенийloop — бесконечное повторениеpaused и remove() — управление
выполнениемЭта система обеспечивает гибкость и мощь для реализации любых временных сценариев в игре на Phaser.