queue_free()是在帧末尾安全销毁节点并将其从树中删除的快捷方式。如果我们已经在树外有一个节点, 这将很有用。
例如:
remove_child()与add_child()相反。它将节点从场景树中删除。它不会删除该节点, 因此我们可以将其添加为另一个节点的子节点,
free()是从内存中删除ode的方法。但是, 这样做并不总是安全的。如果我们删除一个节点, 而其他节点可能仍在处理它。
queue_free()函数将告诉引擎:”
请在安全的情况下尽快删除此节点。”
使用场景管理器重新加载当前场景。我们需要有关重新加载当前场景的脚本的帮助。
打开Godot引擎:
文章图片
打开脚本选项卡:
文章图片
我们从提示数组中获得此条目。错误是告诉索引5th, 那里有索引1、2、3、4。我们正在寻找第五阵列。 ArrayArray中没有第五个值。因此, 我们需要一些逻辑, 我们希望继续添加东西, 或者我们也可以更改功能。我们可以在这里做很多事情。第一件事是我们必须确保当我们讲完故事时, 让我们摆脱枪支, 完全给我们分界线, 让我们不要让玩家输入任何正确的内容。我们将其从游戏中删除。我们不会在这里编写代码, 而是创建一个名为End game的新函数。
例子:
extends Controlvar 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/PlayerTextonready var DisplayText= $VBoxContainer/DisplayTextfunc _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 Controlvar 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/PlayerTextonready var DisplayText= $VBoxContainer/DisplayTextfunc _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_wordsfunc prompt_player(): DisplayText.text += "May I have" +prompts[player_words.size()]+"please?"func end_game(): PlayerText.queue_free() tell_story()
输出如下:
文章图片
文章图片
文章图片
文章图片
故事完成后, 文本框消失。
文章图片
当我们单击按钮时, 文本再次出现!
我们也可以从这里开始一个新的故事。
文章图片
例子:
extends Controlvar 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/PlayerTextonready var DisplayText= $VBoxContainer/DisplayTextfunc _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_wordsfunc 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()
输出如下:
文章图片
文章图片
文章图片
文章图片
在这里, 我们将标签名称从” 确定” 再次更改为! 。
文章图片
如果再次按下按钮, 则可以从此处继续制作新故事。
【Godot中的queue_free()和reload_current_scene()函数】在下一个教程中, 我们将学习词典。
推荐阅读
- Godot中的按钮示例
- 安卓基础之Sqlite数据库最最基础操作
- AndroidStudio安装遇到的bug
- ETH Dapp 体验报告
- 健康之路app下载|健康之路安卓版
- Android避免快速双击按钮最简单好用的方式
- android学习第二天遇到的问题
- Redis配置文件SNAPSHOTTING快照/APPEND ONLY MODE追加
- 轻量级ORM框架——第二篇(Dapper中的一些复杂操作和inner join应该注意的坑)