首页 > 解决方案 > 如何将信号参数作为 int 而不是字符串发出?

问题描述

在 Godot 3.3 中,我试图让 Label 响应通过 LineEdit 节点输入的文本。我连接了对象并可以发出信号,但信号只作为字符串发送,而不是我想要的 int。当我使用强类型时,我收到错误“无法将参数 1 从 String 转换为 int..”

当我停止使用强类型并回到弱类型时,我没有错误。如何发出信号并确保它是我指定的数据类型?

在 LineEdit 节点中:emit_signal("text_entered", text as int)

在标签节点中:

func _on_text_entered(value :int):<-此函数头导致错误

func _on_text_entered(value):<-虽然这个没有。

标签: signalsgodotstrong-typinggdscriptdynamic-typing

解决方案


在您的LineEdit中,“text_entered”是使用的内置信号LineEdit。并且当LineEdit使用它时,它会发送Strings(无论您在使用时发送什么)。

当你发送一个int时,连接的功能服用没有问题int。但是当LineEdit发送一个String(因为它)类型不匹配时,你会得到一个错误。


要回答标题上的问题:

如何将信号参数作为 int 而不是字符串发出?

你正在做。代码emit_signal("text_entered", text as int)是正确的。

问题是它LineEdit也会发送Strings 。

当然,当你没有在connected函数中指定类型时,它可以同时接受int你发送和String那个LineEdit发送。


解决方案?

声明一个新的信号。例如number_entered

signal number_entered(number)

并发出:

emit_signal("number_entered", text as int)

由于这是您声明的自定义信号,LineEdit因此不使用它,您可以控制您发送的内容。因此,您可以将接收int该信号的函数连接起来,它应该不会给您带来任何问题。


推荐阅读