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

Godot4中敌人击退代码报错:move_toward函数调用无效求助

问题分析与修复方案

报错根源

你遇到的Invalid call. Nonexistent function 'move_toward' in base 'bool'错误,核心原因是Godot 4 对CharacterBody2D.move_and_slide()的返回值做了改动:

  • Godot 3中,move_and_slide()返回未用完的剩余运动向量(Vector2类型)
  • Godot 4中,它返回布尔值(bool),仅表示角色是否发生了移动

你的代码里把move_and_slide(knockback)的结果赋值给knockback,导致原本是Vector2类型的knockback被覆盖成布尔值,下一次帧调用knockback.move_toward()时,自然会因为调用对象是布尔值而报错。

修复代码

直接修改_physics_process逻辑,不要用move_and_slide的返回值覆盖knockback:

extends CharacterBody2D

var knockback = Vector2.ZERO

func _physics_process(delta):
    # 持续衰减击退速度,让角色逐渐停止
    knockback = knockback.move_toward(Vector2.ZERO, 200 * delta)
    # 直接传入knockback作为速度调用move_and_slide,无需接收返回值
    move_and_slide(knockback)

func _on_hurtbox_area_entered(area):
    knockback = Vector2.RIGHT * 200

额外说明

  • 删除move_and_slide参数的操作是错误的:move_and_slide必须传入速度向量才能驱动角色移动,无参数调用不符合Godot 4的API规范。
  • 用move_and_slide替换move_toward也逻辑错误:move_toward的作用是让向量平滑趋近目标值(这里用来衰减击退速度),和移动逻辑是两个不同的环节,不能互相替代。

内容的提问来源于stack exchange,提问作者DaPOPs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 08:17:33