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

How do I emit a signal argument as an int instead of string?

在 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): <-虽然这个没有。

在您的 LineEdit 中,“text_entered”是 LineEdit 使用的 build-in 信号。当 LineEdit 使用它时,它发送 Strings (不管你使用它时发送什么)。

发送int时,连接的函数取int没有问题。但是当 LineEdit 发送 String 时(实际上)类型不匹配,你会得到一个错误。


回答标题问题:

How do I emit a signal argument as an int instead of string?

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

问题是 LineEdit 也会发送 String

当然,当你在连接函数中没有指定类型时,它可以同时接受你发送的intLineEdit发送的String


解决方案?

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

signal number_entered(number)

并发出:

emit_signal("number_entered", text as int)

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