我正在观看一个教程,我按照与视频中相同的代码进行操作,但该教程适用于 godot 3.2,而在 godot 4 上,它在攻击敌人时不起作用,并且出现错误:无效调用。基“bool”中不存在函数“move_toward”。这是代码:
extends CharacterBody2D
var knockback = Vector2.ZERO
func _physics_process(delta):
knockback = knockback.move_toward(Vector2.ZERO, 200 * delta)
knockback = move_and_slide(knockback)
func _on_hurtbox_area_entered(area):
knockback = Vector2.RIGHT * 200
我尝试删除 move_and_slide 参数并尝试将 move_toward 更改为 move_and_slide 但它不起作用
正在发生的事情是
move_and_slide
返回bool
(true
如果它碰撞,false
如果它没有碰撞)。因此,这里:
该
knockback
变量变为bool
. 因此,在下一帧中,当您尝试执行此操作时:Godot 无法调用
move_toward
abool
,并给你一个错误。如果您创建一个类型化变量,您可能会更早地收到错误
knockback
,该变量明确如下:或者隐式地(通过推理)像这样:
此外,如您所知,Godot 4 中
move_and_slide
不再需要速度,而是您应该设置velocity
属性。这意味着,您可以不用变量knockback
。代码如下:
这里使用的线
move_toward
正在执行减速。想必您将有其他代码操纵
velocity
,因此请仔细检查您是否尚未进行减速(在这种情况下您不需要在此处执行此操作),并且如果添加减速则不会干扰其他任何事情。