signals - 如何将信号参数作为 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
。并且当LineEdit
使用它时,它会发送String
s(无论您在使用时发送什么)。
当你发送一个int
时,连接的功能服用没有问题int
。但是当LineEdit
发送一个String
(因为它)类型不匹配时,你会得到一个错误。
要回答标题上的问题:
如何将信号参数作为 int 而不是字符串发出?
你正在做。代码emit_signal("text_entered", text as int)
是正确的。
问题是它LineEdit
也会发送String
s 。
当然,当你没有在connected函数中指定类型时,它可以同时接受int
你发送和String
那个LineEdit
发送。
解决方案?
声明一个新的信号。例如number_entered
:
signal number_entered(number)
并发出:
emit_signal("number_entered", text as int)
由于这是您声明的自定义信号,LineEdit
因此不使用它,您可以控制您发送的内容。因此,您可以将接收int
该信号的函数连接起来,它应该不会给您带来任何问题。
推荐阅读
- powershell - 在参数处理之前执行命令
- google-chrome - Chrome 扩展程序:如何捕获扩展程序的弹出窗口?
- android - 清单合并失败:属性 application@appComponentFactory...Android Studio 3.2
- rxjs - 如何知道 switchMap 是否取消了内部 Observable 的订阅?
- java - 使用 Tasklet 删除 Spring Batch 中的文件,但需要上一步的退出状态
- javascript - 单击传单弹出窗口内的按钮时显示执行功能的问题
- node.js - Express 的绝对类型定义不起作用
- c# - 没有异常对象时的 Application Insights TrackException ExceptionTelemetry
- azure-active-directory - 如何验证用户是否属于 Azure AD 中的组?
- ios - 如何通过 UIkit 将组件嵌套到组件?