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()
returnDie 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.
Aufgabe
Einfach- Füge in der done-Prüfung von
_physics_processbeim Drücken der Eingabetaste das Neuladen der Szene hinzu. - Füge
"\nPress Enter to race again"am Ende der Zielnachricht hinzu. - 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
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