Timer

Наследует: Node < Object

Обратный таймер.

Описание

Узел Timer — это таймер обратного отсчета, представляющий собой простейший способ обработки временной логики в движке. Когда таймер достигает конца своего wait_time, он испускает сигнал timeout.

После добавления таймера в дерево сцены его можно запустить вручную с помощью start(). Узел таймера также запускается автоматически, если autostart имеет значение true.

Без большого количества кода узел таймера можно добавить и настроить в редакторе. Сигнал timeout, который он испускает, также можно подключить через панель сигналов в редакторе:

func _on_timer_timeout():
    print("Пора атаковать!")

Примечание: Чтобы создать одноразовый таймер без создания экземпляра узла, используйте SceneTree.create_timer().

Примечание: Таймеры зависят от Engine.time_scale, если только ignore_time_scale не имеет значения true. Чем выше временной масштаб, тем быстрее закончатся таймеры. Частота обработки таймера может зависеть от частоты кадров или Engine.physics_ticks_per_second.

Обучающие материалы

Свойства

bool

autostart

false

bool

ignore_time_scale

false

bool

one_shot

false

bool

paused

TimerProcessCallback

process_callback

1

float

time_left

float

wait_time

1.0

Методы

bool

is_stopped() const

void

start(time_sec: float = -1)

void

stop()


Сигналы

timeout() 🔗

Издается, когда таймер достигает конца.


Перечисления

enum TimerProcessCallback: 🔗

TimerProcessCallback TIMER_PROCESS_PHYSICS = 0

Обновлять таймер каждый кадр физического процесса (см. Node.NOTIFICATION_INTERNAL_PHYSICS_PROCESS).

TimerProcessCallback TIMER_PROCESS_IDLE = 1

Обновлять таймер каждый обработанный (отрисованный) кадр (см. Node.NOTIFICATION_INTERNAL_PROCESS).


Описания свойств

bool autostart = false 🔗

  • void set_autostart(value: bool)

  • bool has_autostart()

Если true, таймер запустится немедленно при входе в дерево сцены.

Примечание: После того, как таймер входит в дерево, это свойство автоматически устанавливается в false.

Примечание: Это свойство ничего не делает, когда таймер работает в редакторе.


bool ignore_time_scale = false 🔗

  • void set_ignore_time_scale(value: bool)

  • bool is_ignoring_time_scale()

Если true, таймер проигнорирует Engine.time_scale и обновит значение реального прошедшего времени.


bool one_shot = false 🔗

  • void set_one_shot(value: bool)

  • bool is_one_shot()

Если true, таймер остановится после достижения конца. В противном случае, как и по умолчанию, таймер автоматически перезапустится.


bool paused 🔗

  • void set_paused(value: bool)

  • bool is_paused()

Если true, таймер приостанавливается. Приостановленный таймер не будет выполняться, пока это свойство не будет возвращено к значению false, даже при вызове start(). См. также stop().


TimerProcessCallback process_callback = 1 🔗

Указывает, когда обновляется таймер во время основного цикла.


float time_left 🔗

Оставшееся время таймера в секундах. Это всегда 0, если таймер остановлен.

Примечание: Это свойство доступно только для чтения и не может быть изменено. Оно основано на wait_time.


float wait_time = 1.0 🔗

  • void set_wait_time(value: float)

  • float get_wait_time()

Время, необходимое для завершения таймера, в секундах. Это свойство также можно устанавливать каждый раз при вызове start().

Примечание: Таймеры могут обрабатываться только один раз на физический или процессный кадр (в зависимости от process_callback). Нестабильная частота кадров может привести к неравномерному завершению таймера, что особенно заметно, если время ожидания меньше примерно 0.05 секунд. Для очень коротких таймеров рекомендуется писать собственный код вместо использования узла Timer. На таймеры также влияет Engine.time_scale.


Описания метода

bool is_stopped() const 🔗

Возвращает true, если таймер остановлен или не запущен.


void start(time_sec: float = -1) 🔗

Запускает таймер или сбрасывает его, если он уже был запущен. Завершается сбоем, если таймер не находится внутри дерева сцены. Если time_sec больше 0, это значение используется для wait_time.

Примечание: Этот метод не возобновляет приостановленный таймер. См. paused.


void stop() 🔗

Останавливает таймер. См. также paused. В отличие от start(), этот метод можно безопасно вызывать, если таймер не находится внутри дерева сцены.

Примечание: Вызов stop() не генерирует сигнал timeout, поскольку считается, что таймер не истёк. Если это необходимо, используйте $Timer.timeout.emit() после вызова stop(), чтобы вручную сгенерировать сигнал.