Menu
CoddyTech

Lực ma sát

Thuộc phần Đầu vào và di chuyển trong hành trình Godot của Coddy. Bài học 19 trên 28.

Hầu hết nhân vật trong game dừng lại nhanh hơn lúc bắt đầu di chuyển. Việc giảm tốc khi không nhấn phím nào gọi là ma sát.

Để dùng một con số khác khi dừng lại, code cần hai nhánh. else tạo nhánh thứ hai cho if, và chỉ một trong hai nhánh chạy:

if direction == 0:
	velocity.x = move_toward(velocity.x, 0, friction * delta)
else:
	velocity.x = move_toward(velocity.x, direction * speed, acceleration * delta)

== kiểm tra xem hai giá trị có bằng nhau không. Một dấu = gán giá trị cho một biến. direction == 0 là đúng khi không nhấn phím nào.

friction nhỏ, chẳng hạn 300, khiến nhân vật trượt như trên băng. Giá trị lớn, chẳng hạn 2400, giúp nhân vật dừng lại chỉ sau vài khung hình.

challenge icon

Thử thách

Trung bình

Khi bạn thả tay, hãy để nhân vật dừng lại nhanh chóng.

  1. Đặt dòng move_toward bên dưới else:.
  2. Phía trên dòng đó, bên dưới if direction == 0:, giảm dần velocity.x về 0 bằng friction * delta với move_toward.

Nhấn Chơi, chạy rồi thả tay: nhân vật trượt một chút, rồi dừng lại. Sau đó nhấn Kiểm tra.

Tự làm thử

extends CharacterBody2D

var speed = 220
var acceleration = 900
var friction = 2400
var gravity = 1000
var jump_velocity = -500

func _physics_process(delta):
	velocity.y += gravity * delta
	if Input.is_action_just_pressed("jump") and is_on_floor():
		velocity.y = jump_velocity
	var direction = Input.get_axis("move_left", "move_right")
	velocity.x = move_toward(velocity.x, direction * speed, acceleration * delta)
	move_and_slide()

Tất cả bài học trong Đầu vào và di chuyển

Tự luyện tập: Playground Godot