【问题标题】:Checking if a node has a connected signal with "is_connected" gives errors if there are no signals connected如果没有信号连接,检查节点是否有连接信号 \"is_connected\" 会给出错误
【发布时间】:2023-01-01 03:57:43
【问题描述】:

在我的项目中,我动态地(通过代码)创建LineEdits,其中包含用户可以在弹出窗口WindowDialogue 中更改的字段。以类似的方式,我将每个带有信号 (text_entered) 的 LineEdit 连接到一个保存所做更改的函数。

所以,我有一个简单的功能,它管理 WindowDialogue 关闭,即删除所有孩子:

for child in parent.get_children():
        if child.is_connected("text_entered", self, "_function_name"):
            child.disconnect("text_entered", self, "_function_name")
        child.queue_free()

如您所见,在从内存中删除子节点之前,我专门检查了子节点是否有要删除的连接。事实上,代码工作正常。但是,每次检查通过没有连接信号的节点(在我的例子中是Labels)时,我都会在调试器中收到此错误:

is_connected: Nonexistent signal: text_entered.

这是我无法反驳的引擎的逻辑陈述。我的问题是:有没有办法让我的支票通过而没有这个错误?

【问题讨论】:

    标签: godot gdscript


    【解决方案1】:

    即使没有任何东西连接到信号,此代码也不应显示任何错误。可能parent有一些孩子真的没有text_entered信号。

    您可以使用 has_signal 检查节点(或其他对象)是否具有给定信号:

    for child in parent.get_children():
            if child.has_signal("text_entered") and child.is_connected("text_entered", self, "_function_name"):
                child.disconnect("text_entered", self, "_function_name")
            child.queue_free()
    

    然而,通常没有必要.当节点被释放时,信号会自动断开。

    (当使用 queue_free 时,节点在帧的末尾被释放,而不是立即释放,所以在某些边缘情况下,像这样的事情需要。但我认为这不是其中一种情况。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-04
      • 2012-08-02
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多