|
|
|
 |
Reply From: |
twinpixel |
Try:
var t = Timer.new()
t.set_wait_time(3)
t.set_one_shot(true)
self.add_child(t)
t.start()
yield(t, "timeout")
Don’t forget to free the timer afterwards, or you’ll cause a memory leak.
t.queue_free()
Bauxite | 2017-08-18 09:39
this works, but i tried to turn it into a function which didn’t
anyone knows why?
func wait(s):
var t = Timer.new()
t.set_wait_time(s)
t.set_one_shot(true)
self.add_child(t)
t.start()
yield(t, “timeout”)
t.queue_free()
func _ready():
hide()
wait(4)
show()
it took me legit 10 minute to create an account to ask this because u have to click on send me a confirmation mail. that’s so unnecessary so here are some random chinese letters 阿贵冉宋日国
TRISTANfH | 2020-01-31 17:58
Weirdly enough, when I did this in it’s own function, it didn’t work, but when I had the exact same code on the place where I called the wait function, it worked.
The Seahorse | 2020-05-26 18:46
This is not the best answer, since Godot has it’s own dedicated function for this use-case: create_timer
(which is already mentioned in the comment below
So if you Googled this issue and ended up on this thread, check the create_timer
function and yield-ing it instead of creating your own Timer
skarnl | 2020-06-26 17:41
create_timer
is not a better idea. It can work in some cases, but if the object that creates the timer is freed, the game will crash. In general it’s best to avoid using yields until Godot 4.0, as I believe they fixed the issue.
alwaysusa | 2020-09-03 23:13
This causes any function you put this in to return a state instead of a value because of yield
wetbadger | 2021-09-09 15:42
If you are creating a wait(s) function and then calling it in another function, use yield in the calling method and wait for the “completed” signal of wait method.
yield(wait(2),"completed");
litelo | 2022-01-24 08:43
Thank you! I know this was answered a long time ago but got me going!
landsurveying | 2022-12-21 08:44