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
相关产品推荐
相关产品推荐

