Menu
CoddyTech

Sterzare

Lezione 2 di 20 del corso Gioco Godot: Circuito al neon di Coddy.

Ora l'auto gira. Input.get_axis legge due tasti contemporaneamente: -1 per il primo, 1 per il secondo, 0 per nessuno:

var steer := Input.get_axis("move_left", "move_right")

Un'auto vera gira solo mentre si muove e gira meno quando si muove appena. Perciò la sterzata è proporzionale alla velocità. velocity.dot(forward) indica quanto velocemente l'auto procede nella direzione in cui è orientata (è negativo quando procede all'indietro):

var speed := velocity.dot(forward)
rotation += steer * turn_speed * delta * clampf(absf(speed) / 90.0, 0.0, 1.0) * signf(speed + 0.01)

clampf(absf(speed) / 90.0, 0.0, 1.0) aumenta da 0 quando l'auto è ferma a 1 a 90 pixel al secondo. signf inverte la sterzata quando si procede all'indietro, come fa un'auto vera. In Godot una rotazione maggiore fa girare in senso orario, quindi Right la aumenta.

challenge icon

Sfida

Facile
  1. Aggiungi @export var turn_speed := 3.2 sotto max_speed.
  2. Leggi steer sotto throttle.
  3. Dopo forward, calcola speed.
  4. Dopo che la velocità aumenta, fai girare l'auto con la riga sopra.

Provalo tu

extends Node2D

@export var accel := 260.0
@export var max_speed := 200.0

var velocity := Vector2.ZERO


func _physics_process(delta: float) -> void:
	var throttle := Input.get_action_strength("move_up")

	var forward := Vector2.RIGHT.rotated(rotation)

	velocity += forward * throttle * accel * delta
	velocity = velocity.limit_length(max_speed)
	position += velocity * delta
	$Exhaust.emitting = throttle > 0.0

Tutte le lezioni di Gioco Godot: Circuito al neon

Esercitati da solo: Playground Godot