如何在给定时间后在 Godot 中创建 timer destroys script 的对象?我希望在一段时间后从游戏中删除子弹以减少延迟。任何帮助都会很棒!
回答1
您可以使用一个 Timer
节点。您可以将其添加为子项,设置等待时间(以秒为单位) - 您可能将其设置为一次拍摄并自动启动 - 将 "timeout"
信号连接到您的 script,然后在方法调用 queue_free
上安全释放节点(和子节点,包括 Timer
)。
你也可以从代码中做到这一点,如果这是你喜欢的。所以,让我们复习一下我刚才所说的内容,而不是从编辑器中进行,让我们看一下等效代码:
创建一个 Timer
,将其添加为子项:
var timer := Timer.new()
add_child(timer)
设置等待时间(以秒为单位):
timer.wait_time = 1.0
设置为 oneshot:
timer.one_shot = true
不要将其设置为自动启动(即 timer.autostart = true
,让我们启动它:
timer.start()
将 "timeout"
信号连接到方法。在这种情况下,我将调用方法 "_on_timer_timeout"
:
timer.connect("timeout", self, "_on_timer_timeout")
func _on_timer_timeout() -> void:
pass
然后在那个方法 _on_timer_timeout
中,调用 queue_free
:
timer.connect("timeout", self, "_on_timer_timeout")
func _on_timer_timeout() -> void:
queue_free()
回答2
您可能想要使用 SceneTreeTimer
,如以下代码所示:
func die(delay: float):
yield(get_tree().create_timer(delay), "timeout")
queue_free()
请参考 Godot Engine 的 https://docs.godotengine.org/en/stable/classes/class_scenetreetimer.html?highlight=create_timer()。