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 开始,在 Vector2
和 Vector3
中有一个 limit_length
方法可以使这个更容易实现。
我正在为我的 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 开始,在 Vector2
和 Vector3
中有一个 limit_length
方法可以使这个更容易实现。