Godot 2D WASD运动

Godot 2D WASD Movement

我在 2D Godot 项目上遇到了问题。

我在 KinematicBody2D 脚本中写了以下代码:

扩展 KinematicBody2D

export var speed = 250
var motion = Vector2()

func _physics_process(delta):
    motion = Vector2.ZERO
    if Input.is_action_just_pressed("ui_left"):
        motion.x = -speed
    if Input.is_action_just_pressed("ui_right"):
        motion.x = speed
    if Input.is_action_just_pressed("ui_up"):
        motion.y = -speed
    if Input.is_action_just_pressed("ui_down"):
        motion.y = speed
    motion = move_and_slide(motion)
    pass # Replace with function body.

问题是当我按下 W、A、S、D 或箭头键时,我的播放器只移动了几个像素就停止了。

我做错了什么?

谢谢大家!

函数 is_action_just_pressed 告诉您指定的动作※是否 只是 按下。保持动作不会继续返回true。

结合您要擦除 motion 每个物理帧 motion = Vector2.ZERO 的事实,导致对象移动一个物理帧然后停止。

如果您想知道当前是否按下了操作 - 独立于何时开始按下 - 请改用 is_action_pressed

※:您可以使用这些功能的操作在项目设置中配置。您会在“输入地图”选项卡上找到它们。