ProgressBar не меняет значение, остается 100%

Работаю в Godot 4.2.2. Я делаю Тамагочи, нужны были шкалы для голода, сна и гигиены. Сделала шкалу, хотела, чтобы каждые 5 секунд значение падало на 1. Но к сожалению, у меня не получается, просто так и остается 100%. Программа не пишет ошибок.

func _ready():
await get_tree().create_timer(5.0).timeout
$Golod.value -= 1

Ответы (1 шт):

Автор решения: Oyunsky

Ваш вариант кода, создает таймер, который срабатывает один раз (SceneTreeTimer). Для того, чтобы он срабатывал множество раз, нужно использовать Timer.

Есть 2 простых способа создать таймер.

  1. Создать объекта Timer внутри скрипта.
var counter: int = 0

func _ready() -> void:
    var timer = Timer.new()

    # Если значение равно `true` таймер автоматически запуститься, после создании сцены
    timer.autostart = true

    # Для ручного запуска таймера, используеться метод `start()`
    # timer.start()
    # И аналогично, для остановки таймера, метод `stop()`
    # timer.stop()

    # Время ожидания в секундах
    timer.wait_time = 5.0

    # Подключаем функцию, которая будет выполняться, после истечении времени таймера
    # Параметр `timeout`, это название сигнала (константная)
    timer.connect("timeout", decrease_counter)

func decrease_counter() -> void:
   counter -= 1

В данном примере, таймер уменьшает значение переменного counter на 1.

  1. Создать объекта Timer в редакторе сцен.
  • Добавляем Timer в сцену и задаем параметры таймеру.

Добавляем таймер в сценуЗадаем параметры таймеру

  • Создаем скрипт для сцены.

Создаем скрипт для сценыСоздаем скрипт для сцены

  • Подключаем сигнал timeout (сигналы находятся в окне Node) из объекта Timer к скрипту.

Выбираем сигнал timeoutПодключаем сигнал к скрипту

  • Пишем код, который будет выполнятся после истечении времени таймера.
func _on_timer_timeout() -> void:
    pass # Заменить на функциональный код.
→ Ссылка