Menu
CoddyTech

Mencengkeram dan Melayang

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

Belok tajam, dan mobil meluncur seperti keping hoki: mobil mengarah ke satu sisi dan bergerak ke sisi lain. Ban mencegahnya. Ban membuat mobil bisa melaju ke depan, tetapi tidak ke samping.

forward.orthogonal() mengarah ke sisi mobil. Pisahkan kecepatan menjadi bagian yang searah dengannya, lalu kurangi sebagian besar bagian itu di setiap bingkai:

var side := forward.orthogonal()
velocity -= side * velocity.dot(side) * minf(1.0, grip * delta)

Dengan grip bernilai 7, mobil mengikuti arah moncongnya sesaat setelah berbelok, dengan sedikit selip. Semakin rendah grip, semakin lama selipnya. minf(1.0, ...) memastikan satu bingkai tidak mengurangi lebih dari seluruh bagian kecepatan ke samping.

challenge icon

Tantangan

Mudah
  1. Tambahkan @export var grip := 7.0.
  2. Setelah berbelok, hilangkan kecepatan menyamping seperti di atas.
  3. Tekan tombol “Main” dan lewati tikungan. Coba nilai grip 2 di Inspector agar mobil melakukan drift.

Coba sendiri

extends Node2D

@export var accel := 260.0
@export var max_speed := 200.0
@export var turn_speed := 3.2
@export var drag := 0.6

var velocity := Vector2.ZERO


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)

	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)
	velocity *= 1.0 - drag * 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