Menu
CoddyTech

Diriger

Leçon 2 sur 20 du cours Jeu Godot : Circuit néon de Coddy.

Maintenant, la voiture tourne. Input.get_axis lit deux touches à la fois : -1 pour la première, 1 pour la deuxième, 0 pour aucune :

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

Une vraie voiture ne tourne que lorsqu’elle roule, et tourne moins lorsqu’elle avance à peine. Le virage est donc modulé par la vitesse. velocity.dot(forward) indique à quelle vitesse la voiture avance dans la direction vers laquelle elle pointe (valeur négative lorsqu’elle recule) :

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) augmente de 0 à l’arrêt jusqu’à 1 à 90 pixels par seconde. signf inverse le sens du virage lorsque la voiture recule, comme le ferait une vraie voiture. Dans Godot, une rotation plus grande fait tourner dans le sens horaire, donc la touche droite augmente sa valeur.

challenge icon

Défi

Facile
  1. Ajoute @export var turn_speed := 3.2 sous max_speed.
  2. Lis steer sous throttle.
  3. Après forward, calcule speed.
  4. Après que la vitesse augmente, fais tourner la voiture avec la ligne ci-dessus.

Essayez vous-même

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

Toutes les leçons de Jeu Godot : Circuit néon

Entraînez-vous par vous-même : Playground Godot