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

Godot 4类构造函数中创建的按钮无法触发关联函数如何解决?

问题原因与解决方案

核心问题

你的test_class不是继承自Node的类,当创建这个类的实例后,如果没有保留对它的有效引用,Godot的垃圾回收机制会销毁该实例。按钮虽被成功添加到父节点,但它连接的_test_function属于已被回收的test_class实例,因此无法触发执行。

解决方法

方法一:让类继承Node(推荐)

将test_class改为继承自Node(或其子类如Control),让实例被Godot的节点树管理,避免被垃圾回收:

class test_class extends Node:

    func _init(parent):
        var test_button = Button.new()
        test_button.text = "Click me!"
        # Godot 4推荐使用新的信号连接语法
        test_button.pressed.connect(_test_function)
        # 将按钮作为当前类实例的子节点,再把实例添加到父节点
        add_child(test_button)
        parent.add_child(self)

    func _test_function():
        print("hello")

方法二:保留对类实例的引用

如果不想让类继承Node,则必须在外部代码中保留对test_class实例的引用,确保它不会被回收。比如在调用的节点中:

# 假设在某个节点的_ready函数中创建实例
var my_test_instance: test_class # 作为节点的成员变量

func _ready():
    my_test_instance = test_class.new($Parent)

补充说明

Godot 4中推荐使用信号名.connect(回调函数)的新语法替代旧的字符串信号名写法,不过这不是导致问题的直接原因,只是更规范的用法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 15:52:14