Menu
CoddyTech

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 * delta

Cò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 * delta
challenge icon

Thử thách

Dễ

Giúp xe tự giảm tốc và phanh khi nhấn phím xuống.

  1. Thêm @export var drag := 0.6.
  2. Đọc ga bằng Input.get_axis("move_down", "move_up").
  3. Thay dòng làm tăng vận tốc bằng câu lệnh if và else ở trên.
  4. Trước limit_length, thêm velocity *= 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