You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 20:54:03