Godot平台游戏开发:register_player函数引发connect报错求助
问题解决:Godot中connect函数参数顺序错误导致崩溃
错误提示Invalid type in function 'connect'... Cannot convert argument 4 from int to Array的核心原因是你搞反了connect方法的参数顺序。
在Godot中,connect方法的标准参数结构是:
signal.connect(目标节点, 回调方法名, [绑定参数数组], 连接标志)
你当前代码里把CONNECT_DEFERRED这个连接标志(整数类型)放在了第四个参数的位置,但这个位置原本应该是绑定参数的数组。正确的写法应该把CONNECT_DEFERRED移到第五个参数,第四个参数传空数组[](如果不需要绑定参数),或者直接省略第四个参数(默认是空数组)。
修复后的register_player函数代码:
func register_player(player): currentPlayerNode = player # 写法1:显式传空数组作为绑定参数,第五个放标志 currentPlayerNode.connect("died", self, "on_player_died", [], CONNECT_DEFERRED) # 写法2:省略绑定参数数组,直接传标志(因为第四个参数默认是空数组) # currentPlayerNode.connect("died", self, "on_player_died", CONNECT_DEFERRED)
另外补充一个潜在问题:在create_player函数中,当你调用add_child_below_node(currentPlayerNode, playerInstance)时,如果currentPlayerNode已经被queue_free(),可能会出现异常。可以改成直接将新玩家节点添加到当前节点,并设置出生位置:
func create_player(): var playerInstance = playerScene.instance() playerInstance.global_position = spawnPosition add_child(playerInstance) register_player(playerInstance)
这样调整后,死亡重生的逻辑就能正常运行了。
内容的提问来源于stack exchange,提问作者Bradley Wood
相关产品推荐
相关产品推荐

