文本框读完后如何更改场景?

问题描述 投票:0回答:1

我正在 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)```
godot godot3
1个回答
0
投票

我觉得把它放在 hide_textbox() 的末尾会有所帮助

func hide_textbox():
    start_symbol.text = ""
    end_symbol.text = ""
    label.text = ""
    textbox_container.hide()
    get_tree().change_scene("scene")
© www.soinside.com 2019 - 2024. All rights reserved.