Phanh và kéo
Bài học 3 trên 20 trong khóa học Trò chơi Godot: Mạch neon của Coddy.
Thả phím Up ra mà xe vẫn lăn mãi. Có hai cách khắc phục.
Lực cản làm xe đang chạy chậm lại một chút qua mỗi khung hình. Với lực cản là 0.6, xe mất khoảng một nửa tốc độ mỗi giây:
velocity *= 1.0 - drag * deltaCòn phím Down giúp phanh xe. Đọc phím Up và Down cùng lúc để ga có giá trị từ -1 đến 1. Khi xe vẫn còn lăn về phía trước, phím Down đẩy xe lùi mạnh hơn lực động cơ đẩy về phía trước. Khi xe dừng lại, phím Down sẽ khiến xe chạy lùi:
var throttle := Input.get_axis("move_down", "move_up")
if throttle < 0.0 and speed > 10.0:
velocity += forward * throttle * accel * 1.6 * delta
else:
velocity += forward * throttle * accel * deltaThử thách
DễGiúp xe tự giảm tốc và phanh khi nhấn phím xuống.
- Thêm
@export var drag := 0.6. - Đọc ga bằng
Input.get_axis("move_down", "move_up"). - Thay dòng làm tăng vận tốc bằng câu lệnh if và else ở trên.
- Trước
limit_length, thêmvelocity *= 1.0 - drag * delta.
Nhấn Chơi, lái xe, rồi nhả phím và giữ phím xuống: xe giảm tốc, dừng lại rồi lùi. Sau đó nhấn Kiểm tra.
Tự làm thử
extends Node2D
@export var accel := 260.0
@export var max_speed := 200.0
@export var turn_speed := 3.2
var velocity := Vector2.ZERO
func _physics_process(delta: float) -> void:
var throttle := Input.get_action_strength("move_up")
var steer := Input.get_axis("move_left", "move_right")
var forward := Vector2.RIGHT.rotated(rotation)
var speed := velocity.dot(forward)
velocity += forward * throttle * accel * delta
rotation += steer * turn_speed * delta * clampf(absf(speed) / 90.0, 0.0, 1.0) * signf(speed + 0.01)
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