如何将信号参数作为 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
使用它时,它发送 String
s (不管你使用它时发送什么)。
发送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
。
当然,当你在连接函数中没有指定类型时,它可以同时接受你发送的int
和LineEdit
发送的String
。
解决方案?
声明一个新信号。例如 number_entered
:
signal number_entered(number)
并发出:
emit_signal("number_entered", text as int)
由于这是您声明的自定义信号,LineEdit
不使用它,您可以控制发送的内容。因此,您可以将需要 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):
<-虽然这个没有。
在您的 LineEdit
中,“text_entered”是 LineEdit
使用的 build-in 信号。当 LineEdit
使用它时,它发送 String
s (不管你使用它时发送什么)。
发送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
。
当然,当你在连接函数中没有指定类型时,它可以同时接受你发送的int
和LineEdit
发送的String
。
解决方案?
声明一个新信号。例如 number_entered
:
signal number_entered(number)
并发出:
emit_signal("number_entered", text as int)
由于这是您声明的自定义信号,LineEdit
不使用它,您可以控制发送的内容。因此,您可以将需要 int
的函数连接到该信号,它不会给您带来任何问题。