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.
Défi
Facile- Ajoute
@export var turn_speed := 3.2sousmax_speed. - Lis
steersousthrottle. - Après
forward, calculespeed. - 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