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.
Tantangan
Mudah- Tambahkan
@export var grip := 7.0. - Setelah berbelok, hilangkan kecepatan menyamping seperti di atas.
- 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