Godot点击按钮弹出窗口报错newgame未在当前作用域声明如何解决
Godot按钮触发窗口显示报错修复方案
报错原因
你在场景编辑器中为窗口设置的newgame只是节点的场景树标识,无法直接在其他节点的脚本中作为变量调用,当前按钮脚本的作用域内没有声明过同名变量,因此触发未定义标识符的解析错误。
修复方案
根据你的场景结构可以选择以下任意一种方案:
- 方案1:直接通过节点路径获取引用
打开你的场景树,右键点击newgame窗口节点,选择「复制路径」,将原有代码中的newgame.show()替换为get_node("你复制的节点路径").show()即可,示例:extends Button func _on_button_up(): print("Button Status: clicked") # 路径以你实际复制的结果为准,此处为同级节点的路径示例 get_node("../newgame").show() - 方案2:提前预存节点引用(更推荐,多次调用时性能更好)
用onready语法在节点加载完成后提前存储引用,后续直接调用变量即可:extends Button # Godot 4.x 写法 @onready var newgame_window = $"../newgame" # 如果是Godot 3.x,去掉@符号即可:onready var newgame_window = $"../newgame" func _on_button_up(): print("Button Status: clicked") newgame_window.show() - 方案3:全局调用(适合全游戏通用的公共窗口)
如果这个newgame窗口需要在多个场景中调用,可以把它设置为自动加载节点:- 打开「项目→项目设置→自动加载」
- 点击添加按钮,选择
newgame窗口所在的场景文件,将节点名设置为newgame后确认 - 无需修改原有代码,所有脚本都可以直接调用
newgame变量操作这个窗口
注意事项
- 复制的节点路径必须和场景树的实际层级完全对应,否则会触发节点找不到的报错
$是get_node()的语法糖,两者作用完全一致,可以根据个人习惯选择写法
内容的提问来源于stack exchange,提问作者RockZombie
相关产品推荐
相关产品推荐

