Frenar y arrastrar
Lección 3 de 20 del curso Juego de Godot: Circuito Neón de Coddy.
Suelta Up y el coche sigue avanzando para siempre. Hay dos cosas que lo solucionan.
La resistencia ralentiza un poco el coche en movimiento en cada fotograma. Resta el 60 por ciento de la velocidad cada segundo:
velocity *= 1.0 - drag * deltaY Down frena. Lee Up y Down a la vez, de modo que el acelerador va de -1 a 1. Mientras el coche siga avanzando, Down empuja hacia atrás con más fuerza de la que el motor empuja hacia delante. Cuando se detiene, Down invierte la marcha:
var throttle := Input.get_axis("move_down", "move_up")
if throttle < 0.0 and speed > 10.0:
velocity += forward * throttle * accel * 1.6 * delta
else:
velocity += forward * throttle * accel * deltaDesafío
Fácil- Añade
@export var drag := 0.6. - Lee el acelerador con
get_axis, como arriba. - Sustituye la línea que aumenta la velocidad por el if y el else.
- Antes de
limit_length, aplica la resistencia.
Pruébalo tú mismo
extends Node2D
@export var accel := 260.0
@export var max_speed := 200.0
@export var turn_speed := 3.2
var velocity := Vector2.ZERO
func _physics_process(delta: float) -> void:
var throttle := Input.get_action_strength("move_up")
var steer := Input.get_axis("move_left", "move_right")
var forward := Vector2.RIGHT.rotated(rotation)
var speed := velocity.dot(forward)
velocity += forward * throttle * accel * delta
rotation += steer * turn_speed * delta * clampf(absf(speed) / 90.0, 0.0, 1.0) * signf(speed + 0.01)
velocity = velocity.limit_length(max_speed)
position += velocity * delta
$Exhaust.emitting = throttle > 0.0
Todas las lecciones de Juego de Godot: Circuito Neón
Practica por tu cuenta: Playground de Godot