Menu
CoddyTech

Mengemudikan

Pelajaran 2 dari 20 dalam kursus Game Godot: Sirkuit Neon di Coddy.

Sekarang mobil berbelok. Input.get_axis membaca dua tombol sekaligus: -1 untuk tombol pertama, 1 untuk tombol kedua, 0 jika tidak ada:

var steer := Input.get_axis("move_left", "move_right")

Mobil sungguhan hanya berbelok saat melaju, dan belokannya lebih kecil saat bergerak sangat lambat. Karena itu, belokan diskalakan berdasarkan kecepatan. velocity.dot(forward) menunjukkan seberapa cepat mobil bergerak ke arah yang ditujunya (bernilai negatif saat bergerak mundur):

var speed := velocity.dot(forward)
rotation += steer * turn_speed * delta * clampf(absf(speed) / 90.0, 0.0, 1.0) * signf(speed + 0.01)

clampf(absf(speed) / 90.0, 0.0, 1.0) meningkat dari 0 saat mobil berhenti menjadi 1 saat kecepatannya 90 piksel per detik. signf membalik arah belokan saat mobil bergerak mundur, seperti mobil sungguhan. Di Godot, rotasi yang lebih besar membuat mobil berbelok searah jarum jam, jadi Right menambah nilainya.

challenge icon

Tantangan

Mudah
  1. Tambahkan @export var turn_speed := 3.2 di bawah max_speed.
  2. Baca steer di bawah throttle.
  3. Setelah forward, hitung speed.
  4. Setelah velocity bertambah, belokkan mobil dengan baris di atas.

Coba sendiri

extends Node2D

@export var accel := 260.0
@export var max_speed := 200.0

var velocity := Vector2.ZERO


func _physics_process(delta: float) -> void:
	var throttle := Input.get_action_strength("move_up")

	var forward := Vector2.RIGHT.rotated(rotation)

	velocity += forward * throttle * accel * delta
	velocity = velocity.limit_length(max_speed)
	position += velocity * delta
	$Exhaust.emitting = throttle > 0.0

Semua pelajaran di Game Godot: Sirkuit Neon

Latihan sendiri: Playground Godot