Ö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.12Verwende dann grip_now an der Stelle, an der die Seitwärtsgeschwindigkeit abgezogen wird.
Aufgabe
Einfach- Füge nach
var top := max_speedvar grip_now := griphinzu. - Füge nach der Pad-Schleife die Öl-Schleife hinzu.
- Verwende in der Seitwärts-Zeile
grip_nowstattgrip.
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