Menu
CoddyTech

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 * delta

Y 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 * delta
challenge icon

Desafío

Fácil
  1. Añade @export var drag := 0.6.
  2. Lee el acelerador con get_axis, como arriba.
  3. Sustituye la línea que aumenta la velocidad por el if y el else.
  4. 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