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

Godot按钮点击场景不切换求助(声音可正常播放)

Godot飞机商店场景切换失败问题排查与修复

核心问题排查与修复步骤

1. 信号连接不匹配

你的场景切换函数命名对应不同的按钮信号(比如_on_BackButton_pressed()对应pressed信号,_on_NextButton_button_up()对应button_up信号),如果按钮的信号未正确连接到对应函数,函数根本不会触发,自然无法切换场景:

  • 选中场景切换按钮,在Inspector面板的Signals标签中,确认按钮的pressed/button_up信号已连接到你编写的对应函数。
  • 也可以手动在_ready()中添加信号连接代码,避免自动连接的命名误差:
    func _ready():
        $BackButton.connect("pressed", self, "_on_BackButton_pressed")
        $NextButton.connect("button_up", self, "_on_NextButton_button_up")
    

2. 场景路径错误

get_tree().change_scene()对路径大小写、文件存在性敏感,路径错误会导致静默失败:

  • 核对所有场景路径(如res://Assets/Room/Shop.tscn),确保文件真实存在,文件名和目录结构完全匹配。
  • 在场景切换函数中添加错误检测代码,打印失败信息便于排查:
    func _on_Back_button_up():
        global.button_click_sound.play()
        var err = get_tree().change_scene("res://Assets/Room/Shop.tscn")
        if err != OK:
            print("场景切换失败,错误码:", err, " 目标路径:res://Assets/Room/Shop.tscn")
    

3. 文件操作逻辑优化(潜在问题修复)

你的change_file()函数每次调用都会新建File实例,多次调用会导致资源泄漏或文件状态异常(虽不直接影响场景切换,但会引发其他bug),重构读写逻辑:

# 拆分加载与保存函数
func save_data(data):
    var file = File.new()
    var err = file.open(global.SAVE_FILE, File.WRITE)
    if err == OK:
        file.store_string(var2str(data))
        file.close()
    else:
        print("保存数据失败,错误:", err)

func load_data():
    var file = File.new()
    var err = file.open(global.SAVE_FILE, File.READ)
    if err == OK:
        var data = str2var(file.get_as_text())
        file.close()
        return data
    else:
        print("加载数据失败,错误:", err)
        return {} # 返回默认空字典避免报错

# 调用示例(以购买飞机1为例)
func _on_BuyPlane1_button_up():
    var read_dictionary = load_data()
    var new_dictionary = read_dictionary
    if new_dictionary["plane_1_bought"] == true:
        new_dictionary["plane_equipped"] = 1
        save_data(new_dictionary)
        plane_1_button.text = "Equipped"
    elif new_dictionary["coins"] >= 1000:
        global.button_click_sound.play()
        new_dictionary["coins"] -= 1000
        print(new_dictionary)
        new_dictionary["plane_1_bought"] = true
        save_data(new_dictionary)
        plane_1_button.text = "Equip"
    else:
        print("insufficient coins")
        global.no_click_sound.play()

4. 确认全局变量有效性

虽然声音播放正常说明global已正确自动加载,但仍需确认global脚本中SAVE_FILE等变量的定义无错误,避免后续操作异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:11:17