Godot 3.3中如何让emit_signal发射的信号参数为int而非string类型
Godot 3.3 LineEdit信号传参类型错误解决方案
核心原因
Godot 3.x 中as运算符仅支持对象类型的判断与转换,不支持String、int这类基础数据类型的转换。你代码中text as int的写法实际不会生效,返回值为null,最终传递的参数类型仍然不符合强类型定义的int要求,因此抛出转换错误。弱类型参数不会校验类型,所以可以正常运行,但参数值并非你预期的int类型。
修正方案
方案1:修改信号发射逻辑(推荐)
如果你是自定义发射text_entered信号,将LineEdit节点中的发射代码改为使用to_int()方法完成String到int的转换,转换前可添加合法性校验避免非数字输入导致转换结果异常:
# LineEdit节点代码 if text.is_valid_integer(): emit_signal("text_entered", text.to_int())
修改完成后,你原有的强类型接收函数func _on_text_entered(value :int):即可正常运行,不会抛出类型错误。
注意:如果你之前是在编辑器中连接了LineEdit节点自带的
text_entered信号,需要先断开原有连接,改为连接你自定义的信号,否则系统自带信号默认传递的仍然是String类型参数,修改发射代码不会生效。
方案2:接收端转换类型
如果你不想修改信号连接逻辑,也可以在接收函数内完成类型转换后再使用:
func _on_text_entered(value): var int_value : int = str(value).to_int() # 后续逻辑直接使用int_value即可
内容的提问来源于stack exchange,提问作者VHS
相关产品推荐
相关产品推荐

