Vector2无法更改KinematicBody位置,输入已注册但物体不移动
解决KinematicBody(原Node2D)无法移动的问题
你的问题出在两个核心点:
- 脚本继承的是
Node2D,但实际节点已经改成KinematicBody2D,类型不匹配导致无法使用KinematicBody的移动API - 代码只修改了
velocity变量,但没有调用KinematicBody专属的移动方法来更新节点位置
直接给你修正后的代码,附关键说明:
extends KinematicBody2D const WALK_SPEED = 500 # 原5000数值过大,调整为合理范围 var velocity = Vector2.ZERO func walk(delta): velocity = Vector2.ZERO # 每帧重置速度,避免持续累加导致速度异常 if Input.is_action_pressed("Walk_Up"): velocity.y -= WALK_SPEED print("debug up") # 可按需补充Walk_Down/Walk_Left/Walk_Right的逻辑 func _physics_process(delta): walk(delta) # 调用KinematicBody2D的核心移动方法,处理碰撞并更新位置 move_and_slide(velocity * delta)
关键改动说明:
- 把
extends Node2D改成extends KinematicBody2D,让脚本和节点实际类型匹配,才能使用move_and_slide这类移动方法 - 每帧重置
velocity为零,防止一直按键时速度无限叠加 - 在
_physics_process中调用move_and_slide(velocity * delta):这是KinematicBody2D更新位置的标准方式,会自动处理碰撞,乘以delta保证移动速度不受帧率影响 - 下调
WALK_SPEED数值,原5000会导致移动速度过快,500是2D场景的常规步行速度范围
内容的提问来源于stack exchange,提问作者Programz
相关产品推荐
相关产品推荐

