You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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窗口需要在多个场景中调用,可以把它设置为自动加载节点:
    1. 打开「项目→项目设置→自动加载」
    2. 点击添加按钮,选择newgame窗口所在的场景文件,将节点名设置为newgame后确认
    3. 无需修改原有代码,所有脚本都可以直接调用newgame变量操作这个窗口

注意事项

  • 复制的节点路径必须和场景树的实际层级完全对应,否则会触发节点找不到的报错
  • $是get_node()的语法糖,两者作用完全一致,可以根据个人习惯选择写法

内容的提问来源于stack exchange,提问作者RockZombie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 12:06:04