Đá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.
Thử thách
DễKhiến xe rẽ bằng phím trái và phải.
- Thêm
@export var turn_speed := 3.2bên dướimax_speed. - Bên dưới
throttle, thêmvar steer := Input.get_axis("move_left", "move_right"). - Sau
forward, thêmvar speed := velocity.dot(forward). - 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