Menu
CoddyTech

Đánh lái

Bài học 2 trên 20 trong khóa học Trò chơi Godot: Mạch neon của Coddy.

Bây giờ xe rẽ. Input.get_axis đọc hai phím cùng lúc: -1 cho phím thứ nhất, 1 cho phím thứ hai, 0 nếu không nhấn phím nào:

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

Xe thật chỉ rẽ khi đang lăn bánh, và rẽ ít hơn khi xe di chuyển rất chậm. Vì vậy, độ rẽ được điều chỉnh theo tốc độ. velocity.dot(forward) là tốc độ xe di chuyển theo hướng đầu xe (giá trị âm khi xe lùi):

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) tăng từ 0 khi xe đứng yên lên 1 khi xe chạy 90 pixel mỗi giây. signf đảo chiều rẽ khi xe lùi, giống như xe thật. Trong Godot, rotation càng lớn thì xe càng rẽ theo chiều kim đồng hồ, vì vậy phím Right làm giá trị này tăng.

challenge icon

Thử thách

Dễ

Khiến xe rẽ bằng phím trái và phải.

  1. Thêm @export var turn_speed := 3.2 bên dưới max_speed.
  2. Bên dưới throttle, thêm var steer := Input.get_axis("move_left", "move_right").
  3. Sau forward, thêm var speed := velocity.dot(forward).
  4. Sau khi vận tốc tăng, thêm dòng rotation += ... ở trên.

Nhấn Chơi, giữ phím lên rồi nhấn trái hoặc phải: xe sẽ rẽ. Sau đó nhấn Kiểm tra.

Tự làm thử

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

Tất cả bài học trong Trò chơi Godot: Mạch neon

Tự luyện tập: Playground Godot