这段GDScript编写的对话框功能代码无法正常运行,请问是什么原因?
GDScript 代码故障原因及修复方案
常见故障点:
- 节点路径不匹配
代码中get_node("DialogBox")和dialog_box.get_node("Text")依赖场景树节点的命名和层级完全对应,只要DialogBox节点不是当前脚本挂载节点的直接子节点,或是DialogBox下的文本节点命名不是Text,都会触发节点查找失败的空引用报错。 - 字体资源加载失败
字体加载路径res://Supply (do not delete)/Fonts/如果和实际项目中的字体存放路径不一致,或是字体文件名拼写错误、资源未导入到项目中,load()会返回null,导致动态字体配置失效,文字无法正常渲染。 - Godot 版本不兼容
这段是Godot 3.x 专属语法,如果在Godot 4.x环境中运行会直接报错:- 3.x的
onready在4.x中需要改为@onready - 3.x的
DynamicFont在4.x中被拆分,字体加载逻辑改为使用DynamicFontData,字体覆写的参数名也同步调整 - 3.x的
yield语法在4.x中被移除,需要替换为await get_tree().create_timer(time).timeout
- 3.x的
- 动态字体未设置字号
DynamicFont实例没有显式设置size属性,默认字号可能过小或是适配异常,导致文字看不见,看似没有运行效果。 - 文本未清空导致显示异常
调用ShowDialog前如果文本框已有旧内容,会直接在旧内容后追加新字符,而非显示预期的新对话内容。
对应修复示例(Godot 3.x 环境):
extends Node2D # 建议用$语法替代get_node,路径更直观 onready var dialog_box = $DialogBox onready var textbox = $DialogBox/Text func _ready(): ShowDialog("Example") func ShowDialog(text, font = "DTM-Mono.ttf", time = 0.25, font_size = 24): # 先清空旧文本 textbox.text = "" # 加载字体前先判空 var font_path = "res://Supply (do not delete)/Fonts/" + str(font) var font_data = load(font_path) if not font_data: push_error("字体加载失败,路径:%s" % font_path) return var dynamic_font = DynamicFont.new() dynamic_font.font_data = font_data # 显式设置字号 dynamic_font.size = font_size textbox.add_font_override("font", dynamic_font) for character in text: textbox.text += character yield(get_tree().create_timer(time), "timeout")
内容的提问来源于stack exchange,提问作者Shaurya Chhabra
相关产品推荐
相关产品推荐

