Die Boost-Taste
Lektion 8 von 20 im Kurs Godot-Spiel: Neon-Rennstrecke von Coddy.
Noch ein Boost, diesmal musst du den richtigen Zeitpunkt wählen. Eine Anzeige füllt sich über zehn Sekunden; wenn sie voll ist, löst Enter (oder E) einen einsekündigen Boost aus und leert sie.
if Input.is_action_just_pressed("action") and boost_charge >= 1.0:
boost_charge = 0.0
boost_time = 1.0is_action_just_pressed ist nur in dem Frame true, in dem die Taste gedrückt wird. Wenn du Enter gedrückt hältst, wird der Boost also nur einmal ausgelöst. Fülle die Anzeige und zeige sie auf dem HUD-Balken an, dessen Breite dem Wert von scale.x entspricht:
boost_charge = minf(1.0, boost_charge + delta / 10.0)
$"../HUD/Boost".scale.x = boost_chargeAufgabe
Einfach- Füge
var boost_charge := 0.0hinzu. - Löse nach dem Einlesen der Tasten wie oben den Boost aus.
- Fülle dann die Anzeige und stelle die Breite des Balkens ein.
- Drücke „Spielen“, warte, bis sich der Balken gefüllt hat, und drücke auf einer Geraden die Eingabetaste.
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
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