📜  Godot中的queue_free()和reload_current_scene()函数

📅  最后修改于: 2021-01-02 09:50:03             🧑  作者: Mango

Godot中的queue_free()和reload_current_scene()函数

queue_free()是在帧末尾安全销毁节点并将其从树中删除的快捷方式。如果我们已经在树外有一个节点,这将很有用。

例如:

remove_child()add_child()相反。它将节点从场景树中删除。它不会删除该节点,因此我们可以将其添加为另一个节点的子节点,

free()是从内存中删除ode的方法。但是,这样做并不总是安全的。如果我们删除一个节点而其他节点可能仍在处理它。

queue_free()函数将告诉引擎“安全删除此节点。

使用场景管理器重新加载当前场景。我们需要有关重新加载当前场景的脚本的帮助。

打开Godot引擎:

打开脚本选项卡:

我们从提示数组中获得此条目。并且错误告诉我们指数5,我们有指数1,2,3,4米的东西在里面。我们正在寻找5阵列。 ArrayArray中没有第五值。因此,我们需要一些逻辑,我们希望继续添加东西,或者我们也可以更改功能。我们可以在这里做很多事情。第一件事是我们必须确保当我们讲完故事时,让我们摆脱枪支,完全做到这一点,让我们不要让玩家输入任何正确的内容。我们将其从游戏中删除。我们不会在这里编写代码,而是创建一个名为End game的新函数。

例:

extends Control
var player_words=[]
var story= "India is the country of %s in %s. all are %s and %s."
var prompts = ["a verb", "a noun", "verb", "adjective"]

onready var PlayerText= $VBoxContainer/HBoxContainer/PlayerText
onready var DisplayText= $VBoxContainer/DisplayText
func _ready():
    DisplayText.text="Welcome all of u in the world of game and have a wondeful time!"
    check_player_words_length()
func _on_PlayerText_text_entered(new_text):
    add_to_player_words()
func _on_TextureButton_pressed():
    add_to_player_words() 
func add_to_player_words():
    player_words.append(PlayerText.text)
    DisplayText.text=""
    PlayerText.clear()
    check_player_words_length()
func is_story_done():
    return player_words.size() == prompts.size()
func check_player_words_length():
    if is_story_done():
        tell_story()
    else:
        prompt_player()
func tell_story():
    DisplayText.text= story % player_words
    end_game()
func prompt_player():
    DisplayText.text += "May I have" +prompts[player_words.size()]+"please?"
func end_game():
    PlayerText.visible = false

输出:



故事完成后,此处的文本框自动消失。

在这里,我们可以编写PlayerText.hide()PlayerText.visible = false这些函数在故事完成后使用,然后文本框将从输出面板中隐藏。而且我们也可以在最后使用,但是PlayerText.show()PlayerText.visible = true用于在故事完成后隐藏文本框。因为它们都在相同地工作。我们还可以编写PlayerText.hide()代替PlayerText.visible = false,编写PlayerText.show()代替PlayerText.visible = true。

我们可以单击并按住Control (ctrl)按钮来查看get_tree()文档或任何函数文档。

我们在最后进行按钮对齐。

例:

extends Control
var player_words=[]
var story= "India is the country of %s in %s. all are %s and %s."
var prompts = ["a verb", "a noun", "verb","adjective"]

onready var PlayerText= $VBoxContainer/HBoxContainer/PlayerText
onready var DisplayText= $VBoxContainer/DisplayText

func _ready():
    DisplayText.text="Welcome all of u in the world of game and have a wondeful time!"
    check_player_words_length()

func _on_PlayerText_text_entered(new_text):
    add_to_player_words()

func _on_TextureButton_pressed():
    if is_story_done():
        get_tree().reload_current_scene()
    else:
        add_to_player_words() 

func add_to_player_words():
    player_words.append(PlayerText.text)
    DisplayText.text=""
    PlayerText.clear()
    check_player_words_length()

func is_story_done():
    return player_words.size() == prompts.size()

func check_player_words_length():
    if is_story_done():
        end_game()
    else:
        prompt_player()

func tell_story():
    DisplayText.text= story % player_words

func prompt_player():
    DisplayText.text += "May I have" +prompts[player_words.size()]+"please?"

func end_game():
    PlayerText.queue_free()
    tell_story()

输出:




故事完成后,文本框消失。

然后,当我们单击按钮时,文本再次出现!

我们也可以从这里开始一个新的故事。

例:

extends Control
var player_words=[]
var story= "It takes many %s deeds to build a %s reputation, and %s bad one to %s it."
var prompts = ["a verb", "a noun", "verb","adjective"]

onready var PlayerText= $VBoxContainer/HBoxContainer/PlayerText
onready var DisplayText= $VBoxContainer/DisplayText

func _ready():
    DisplayText.text="Welcome all of u in the world of game and have a wondeful time!"
    check_player_words_length()
    PlayerText.grab_focus()

func _on_PlayerText_text_entered(new_text):
    add_to_player_words()

func _on_TextureButton_pressed():
    if is_story_done():
        get_tree().reload_current_scene()
    else:
        add_to_player_words() 

func add_to_player_words():
    player_words.append(PlayerText.text)
    DisplayText.text=""
    PlayerText.clear()
    check_player_words_length()

func is_story_done():
    return player_words.size() == prompts.size()

func check_player_words_length():
    if is_story_done():
        end_game()
    else:
        prompt_player()

func tell_story():
    DisplayText.text= story % player_words

func prompt_player():
    DisplayText.text += "May I have" +prompts [player_words.size()]+"please?"

func end_game():
    PlayerText.queue_free()
    $VBoxContainer/HBoxContainer/Label.text="Again!"
    tell_story()

输出:




在这里,我们将标签名称从“确定”再次更改为!

如果再次按下按钮,我们可以从这里继续做一个新的故事。

在下一个教程中,我们将学习词典。