Godot 减慢 Area2d 对象

Godot Slowing down Area2d objects

我正在为我的 2d 自上而下 space 游戏制作原型,我正在为我的 *ship 对象使用 area2d,因为它的大部分机制仅依赖于碰撞。有没有什么办法可以让我的船在发射后减速然后停下来,因为目前它只是连续飞行。 这是我的基本代码:


var jump_speed = 500
var velocity = Vector2()

func get_input(delta):
    if Input.is_action_pressed("click"):
        look_at(get_global_mouse_position())
    if Input.is_action_just_released("click"):
        velocity = transform.x * jump_speed
        
func _physics_process(delta):
    get_input(delta)
    position -= velocity * delta```

总的来说,想法是随着时间的推移减少 velocity 向量的长度。我们可以为此定义一个减速(这不是唯一的方法):

var deceleration := 10.0

然后在 _physics_process 中我们可以计算 velocity 会减少多少:

var speed_reduction := deceleration * delta

velocity的幅度比较,如果更大,只需将velocity设置为Vector2.ZERO,否则我们要适当缩放velocity

var current_speed := velocity.length()
if current_speed > speed_reduction:
    velocity = Vector2.ZERO
else:
    velocity = velocity * (current_speed - speed_reduction) / current_speed

顺便说一下,从 Godot 3.5 开始,在 Vector2Vector3 中有一个 limit_length 方法可以使这个更容易实现。