如何将信号参数作为 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
使用它时,它会发送String
s(不管你在使用它时发送什么)。
发送int
时,连接函数取int
没有问题。但是,当LineEdit
发送String
(确实如此)时,类型不匹配,您会收到错误消息。
回答标题上的问题:
如何将信号参数作为 int 而不是字符串发出?
你正在这样做。代码emit_signal("text_entered", text as int)
是正确的。
问题是LineEdit
也会发送String
s。
当然,在connected函数中不指定类型的情况下,既可以取你发送的int
,也可以取LineEdit
发送的String
。
解决方案?
声明一个新信号。例如number_entered
:
signal number_entered(number)
然后发出:
emit_signal("number_entered", text as int)
由于这是您声明的自定义信号,LineEdit
不会使用它,您可以控制发送的内容。因此,您可以将带有int
的函数连接到该信号,它应该不会给您带来任何问题。
【讨论】:
谢谢!这解决了我的问题。 Godot 有时是一个复杂且不直观的野兽,但有时它非常流畅,尽管我没有经验,但我几乎可以进行意识流编程。我想我还需要更多时间。以上是关于如何将信号参数作为 int 而不是字符串发出?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 putchar、toupper、tolow 等采用 int 而不是 char?
我可以将 asm 函数与 c - 字符串变量而不是字符串文字作为参数一起使用吗? [复制]