如何在Godot中编辑网格所有文本标签并实现重置清空
批量处理Wordle类游戏网格Label内容方案
问题描述
我正在开发一款类似Wordle的网格类游戏,需要将每个网格空间的Label内容改为用户输入。已实现单个Label的修改,但不清楚如何在_ready时将所有Label设为空;虽可通过侧边栏手动清空,但希望通过代码实现游戏重置时的批量清空。目前尝试的代码仅能修改指定Label,想了解是否可通过编辑网格的子节点来实现批量操作。
尝试的代码:
func _input(event): if event is InputEventKey and event.is_pressed(): var key_text = OS.get_keycode_string(event.get_physical_keycode_with_modifiers()) print(key_text) set_letter(key_text) func set_letter(letter: String): $VBoxContainer/MiddleHBox/MidVBox/GridContainer/Space1/Label.text = letter
解决方案
1. 批量清空所有Label
通过遍历GridContainer的子节点,逐个找到对应Label并清空文本,可在初始化和重置时调用:
func _ready(): # 游戏初始化时清空网格 reset_grid() func reset_grid(): # 获取GridContainer节点 var grid_container = $VBoxContainer/MiddleHBox/MidVBox/GridContainer # 遍历所有Space子节点 for space_node in grid_container.get_children(): # 查找当前Space下的Label节点(避免节点不存在报错) var target_label = space_node.get_node_or_null("Label") if target_label: target_label.text = ""
2. 优化单个Label输入逻辑(可选)
如果需要按顺序输入字符到不同网格,可维护一个当前输入索引,避免硬编码Space节点名称:
var current_input_index = 0 func _input(event): if event is InputEventKey and event.is_pressed(): var key_text = OS.get_keycode_string(event.get_physical_keycode_with_modifiers()) # 只处理单个字母输入(根据游戏需求调整过滤规则) if key_text.length() == 1 and key_text.is_alpha(): set_letter(key_text.upper()) func set_letter(letter: String): var grid_container = $VBoxContainer/MiddleHBox/MidVBox/GridContainer # 确保索引在有效范围内 if current_input_index >= grid_container.get_child_count(): return # 获取目标Space节点 var target_space = grid_container.get_child(current_input_index) var target_label = target_space.get_node_or_null("Label") if target_label: target_label.text = letter # 移动到下一个输入位置 current_input_index += 1
注意事项
- 确保GridContainer下的每个网格节点(Space1、Space2...)结构一致,都包含名为
Label的子节点。 get_children()返回的节点顺序与编辑器中节点的排列顺序一致,需保证该顺序与游戏网格的输入顺序匹配。
内容的提问来源于stack exchange,提问作者Shellshader
相关产品推荐
相关产品推荐

