Menu
CoddyTech

Erneut fahren

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

Zu guter Letzt noch ein weiterer Versuch. Nach dem Zieleinlauf lädt Enter die Szene erneut, wodurch alle Autos wieder auf die Startaufstellung gesetzt werden und der Countdown beginnt:

if state == "done":
	if Input.is_action_just_pressed("action"):
		get_tree().reload_current_scene()
	return

Die beste Rundenzeit ist eine statische Variable und bleibt daher beim Neuladen erhalten. Sag dem Spieler, dass er noch einmal fahren kann: Beende die Zieleinlauf-Nachricht mit \nPress Enter to race again.

challenge icon

Aufgabe

Einfach
  1. Füge in der done-Prüfung von _physics_process beim Drücken der Eingabetaste das Neuladen der Szene hinzu.
  2. Füge "\nPress Enter to race again" am Ende der Zielnachricht hinzu.
  3. Drücke „Spielen“ und fahre ein Rennen. Kannst du 0:06.5 unterbieten?

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
var boost_charge := 0.0
var active := true

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


func _physics_process(delta: float) -> void:
	var throttle := 0.0
	var steer := 0.0
	if active:
		throttle = Input.get_axis("move_down", "move_up")
		steer = Input.get_axis("move_left", "move_right")
		if Input.is_action_just_pressed("action") and boost_charge >= 1.0:
			boost_charge = 0.0
			boost_time = 1.0
	boost_charge = minf(1.0, boost_charge + delta / 10.0)
	$"../HUD/Boost".scale.x = boost_charge

	var forward := Vector2.RIGHT.rotated(rotation)
	var speed := velocity.dot(forward)
	var top := max_speed
	var grip_now := grip
	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)
	for oil in get_tree().get_nodes_in_group("oil"):
		if position.distance_to(oil.position) < 20.0:
			grip_now = grip * 0.12
	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_now * 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
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Godot-Spiel: Neon-Rennstrecke

Übe selbstständig: Godot-Playground