我正在 Godot 中创建一个游戏,我需要在文本框完成读取后更改场景。我的意思是,当文本框完全结束时(不仅仅是队列中的一个文本),它会切换场景。我尝试将 get_tree().change_scene("scene") 行放在整个代码的末尾或完成状态之后,但它要么在文本框出现之前立即切换,要么在队列中的第一个类似之后立即切换。
这是我的代码。它来自 YouTube 教程,因为我对游戏制作还是新手,但它没有说明我在这里需要什么。我认为我需要创建一个新状态,但我真的不知道如何解决它。这是戈多3.5
const CHAR_READ_RATE = 0.05
onready var textbox_container = $TextboxContainer
onready var start_symbol = $TextboxContainer/MarginContainer/HBoxContainer/start
onready var end_symbol = $TextboxContainer/MarginContainer/HBoxContainer/end
onready var label = $TextboxContainer/MarginContainer/HBoxContainer/text
enum State {
READY,
READING,
FINISHED
}
var current_state = State.READY
var text_queue = []
func _ready():
print("Starting state: State.READY")
hide_textbox()
queue_text("*someone yelling, then stops.*")
queue_text("Next.")
queue_text("*someone walks in.*")
queue_text("Hello, welcome to he-")
func _process(delta):
match current_state:
State.READY:
if !text_queue.empty():
display_text()
State.READING:
if Input.is_action_just_pressed("ui_accept"):
label.percent_visible = 1.0
$Tween.remove_all()
end_symbol.text = "v"
change_state(State.FINISHED)
State.FINISHED:
if Input.is_action_just_pressed("ui_accept"):
change_state(State.READY)
hide_textbox()
func queue_text(next_text):
text_queue.push_back(next_text)
func hide_textbox():
start_symbol.text = ""
end_symbol.text = ""
label.text = ""
textbox_container.hide()
func show_textbox():
start_symbol.text = "*"
textbox_container.show()
func display_text():
var next_text = text_queue.pop_front()
label.text = next_text
label.percent_visible = 0.0
change_state(State.READING)
show_textbox()
$Tween.interpolate_property(label, "percent_visible", 0.0, 1.0, len(next_text) * CHAR_READ_RATE, Tween.TRANS_LINEAR, Tween.EASE_IN_OUT)
$Tween.start()
func change_state(next_state):
current_state = next_state
match current_state:
State.READY:
print("Changing state to: State.READY")
State.READING:
print("Changing state to: State.READING")
State.FINISHED:
print("Changing state to: State.FINISHED")
func _on_Tween_tween_all_completed(object, key):
end_symbol.text = "v"
change_state(State.FINISHED)```
我觉得把它放在 hide_textbox() 的末尾会有所帮助
func hide_textbox():
start_symbol.text = ""
end_symbol.text = ""
label.text = ""
textbox_container.hide()
get_tree().change_scene("scene")