Menu
CoddyTech

Ölspuren

Lektion 7 von 20 im Kurs Godot-Spiel: Neon-Rennstrecke von Coddy.

Die dunklen Pfützen sind Öl. Auf Öl verlieren die Reifen ihren Halt und das Auto rutscht weiter in die Richtung, in die es gerade fuhr.

Speichere den Halt für diesen Frame in grip_now. Das Öl befindet sich in der Gruppe 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

Verwende dann grip_now an der Stelle, an der die Seitwärtsgeschwindigkeit abgezogen wird.

challenge icon

Aufgabe

Einfach
  1. Füge nach var top := max_speed var grip_now := grip hinzu.
  2. Füge nach der Pad-Schleife die Öl-Schleife hinzu.
  3. Verwende in der Seitwärts-Zeile grip_now statt grip.

Probier es selbst

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

Alle Lektionen in Godot-Spiel: Neon-Rennstrecke

Übe selbstständig: Godot-Playground