5 способов добавить задержки в GDScript: заставить код ждать как профессионал!

В GDScript иногда необходимо добавлять задержки или паузы в выполнении кода. Если вы хотите создать плавную анимацию, синхронизировать действия или выполнить асинхронные задачи, включение времени ожидания может оказаться весьма полезным. В этой статье блога мы рассмотрим пять различных способов заставить ваш код ждать в GDScript, а также разговорные объяснения и примеры кода. Итак, давайте углубимся и станем экспертами в управлении потоком кода с некоторыми заслуженными перерывами!

Метод 1: использование оператора yield
Инструкция yield— это мощный инструмент в GDScript для добавления задержек. Он позволяет приостановить выполнение кода на указанное время или до тех пор, пока не будет выполнено условие. Вот пример, который ждет 2 секунды, используя yield:

func _ready():
    print("Start")
    yield(get_tree().create_timer(2.0), "timeout")
    print("End")

Метод 2: использование функции sleep
Еще один простой способ ввести задержки — использование функции sleep. Он приостанавливает текущий поток на указанное количество секунд, создавая паузу в выполнении кода. Вот пример:

func _ready():
    print("Start")
    OS.sleep(2) # Sleep for 2 seconds
    print("End")

Метод 3: использование сопрограмм
Сопрограммы — это мощная функция GDScript, позволяющая усложнить поток управления. Используя сопрограммы, вы можете легко вводить задержки и управлять асинхронными задачами. Вот пример, демонстрирующий использование сопрограмм:

func _ready():
    print("Start")
    yield(self, "custom_signal") # Wait for a custom signal to be emitted
    print("End")
func some_function():
    emit_signal("custom_signal")

Метод 4: TimerNode для отложенного выполнения
GDScript предоставляет узел TimerNode, который можно использовать для задержки выполнения кода. Вы можете добавить TimerNode в свою сцену, установить желаемую задержку и подключить ее к сигналу сценария. Вот пример:

extends Node
var timer_node: Timer
func _ready():
    print("Start")
    timer_node = Timer.new()
    timer_node.wait_time = 2.0
    timer_node.connect("timeout", self, "_on_timeout")
    add_child(timer_node)
    timer_node.start()
func _on_timeout():
    print("End")

Метод 5: AnimationPlayer для временных действий
Если вы работаете с анимацией в GDScript, вы можете использовать узел AnimationPlayer для определения времени выполнения кода. Установив ключевые кадры и продолжительность анимации, вы можете синхронизировать действия с определенными моментами времени. Вот упрощенный пример:

extends Node
var animation_player: AnimationPlayer
func _ready():
    print("Start")
    animation_player = AnimationPlayer.new()
    add_child(animation_player)
    animation_player.play("wait_animation") # Play the animation with desired delay
    animation_player.connect("animation_finished", self, "_on_animation_finished")
func _on_animation_finished():
    print("End")

В заключение мы рассмотрели пять различных методов добавления задержек в GDScript. Используя оператор yield, функцию sleep, сопрограммы, TimerNode и AnimationPlayer, вы можете эффективно управлять потоком кода и создавать своевременные действия. Поэкспериментируйте с этими методами и выберите тот, который лучше всего подходит для вашего конкретного случая использования. Приятного кодирования!