Menu
CoddyTech

Dérapages d’huile

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

Les flaques sombres sont de l’huile. Sur l’huile, les pneus perdent leur adhérence et la voiture glisse dans la direction où elle allait.

Conserve l’adhérence pour cette image dans grip_now. L’huile se trouve dans le groupe oil :

var grip_now := grip
for oil in get_tree().get_nodes_in_group("oil"):
	if position.distance_to(oil.position) < 20.0:
		grip_now = grip * 0.12

Utilise ensuite grip_now à l’endroit où la vitesse latérale est supprimée.

challenge icon

Défi

Facile
  1. Après var top := max_speed, ajoute var grip_now := grip.
  2. Après la boucle pad, ajoute la boucle oil.
  3. Utilise grip_now au lieu de grip dans la ligne latérale.

Essayez vous-même

extends Node2D

@export var accel := 260.0
@export var max_speed := 200.0
@export var turn_speed := 3.2
@export var drag := 0.6
@export var grip := 7.0

var velocity := Vector2.ZERO
var boost_time := 0.0

@onready var track: Node2D = $"../Track"


func _physics_process(delta: float) -> void:
	var throttle := Input.get_axis("move_down", "move_up")
	var steer := Input.get_axis("move_left", "move_right")

	var forward := Vector2.RIGHT.rotated(rotation)
	var speed := velocity.dot(forward)
	var top := max_speed
	if boost_time > 0.0:
		boost_time -= delta
		top = max_speed * 1.3
		velocity += forward * accel * delta
	for pad in get_tree().get_nodes_in_group("boost_pads"):
		if position.distance_to(pad.position) < 22.0:
			boost_time = maxf(boost_time, 0.4)
	if not track.is_on_road(position):
		top = max_speed * 0.45
		velocity *= 1.0 - 2.5 * delta

	if throttle < 0.0 and speed > 10.0:
		velocity += forward * throttle * accel * 1.6 * delta
	else:
		velocity += forward * throttle * accel * delta
	rotation += steer * turn_speed * delta * clampf(absf(speed) / 90.0, 0.0, 1.0) * signf(speed + 0.01)

	var side := forward.orthogonal()
	velocity -= side * velocity.dot(side) * minf(1.0, grip * delta)
	velocity *= 1.0 - drag * delta
	if velocity.length() > top:
		velocity = velocity.move_toward(velocity.limit_length(top), accel * 2.0 * delta)
	position += velocity * delta
	$Exhaust.emitting = throttle > 0.0 or boost_time > 0.0
	$Flame.visible = boost_time > 0.0

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

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