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

Posted

技术标签:

【中文标题】如何将信号参数作为 int 而不是字符串发出?【英文标题】:How do I emit a signal argument as an int instead of string? 【发布时间】:2021-11-23 12:58:14 【问题描述】:

在 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):

【问题讨论】:

【参考方案1】:

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

发送int时,连接函数取int没有问题。但是,当LineEdit 发送String(确实如此)时,类型不匹配,您会收到错误消息。


回答标题上的问题:

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

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

问题是LineEdit 也会发送Strings。

当然,在connected函数中不指定类型的情况下,既可以取你发送的int,也可以取LineEdit发送的String


解决方案?

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

signal number_entered(number)

然后发出:

emit_signal("number_entered", text as int)

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

【讨论】:

谢谢!这解决了我的问题。 Godot 有时是一个复杂且不直观的野兽,但有时它非常流畅,尽管我没有经验,但我几乎可以进行意识流编程。我想我还需要更多时间。

以上是关于如何将信号参数作为 int 而不是字符串发出?的主要内容,如果未能解决你的问题,请参考以下文章

将 pandas 数据框列导入为字符串而不是 int

如何将字符串的所有排列作为字符串列表(而不是元组列表)?

为啥 putchar、toupper、tolow 等采用 int 而不是 char?

我可以将 asm 函数与 c - 字符串变量而不是字符串文字作为参数一起使用吗? [复制]

ANSI C:为啥字符函数接受 int 参数而不是 char 参数?

Python 2 - TypeError: int() 参数必须是字符串、类似字节的对象或数字,而不是“列表”