Menu
CoddyTech

Tăng tốc từ 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 18 trên 28.

Nhân vật chính đạt tốc độ tối đa chỉ trong một khung hình rồi dừng lại cũng chỉ trong một khung hình. Cảm giác chuyển động khá cứng.

move_toward(from, to, step) đưa số from tiến về to tối đa step, không vượt quá giá trị đó. move_toward(0, 220, 15) cho kết quả 15. Lặp lại mỗi khung hình, hàm này cho kết quả 30, 45 rồi tiếp tục như vậy cho đến 220.

Dùng hàm này cho velocity.x, hướng đến tốc độ mà các phím yêu cầu:

var direction = Input.get_axis("move_left", "move_right")
velocity.x = move_toward(velocity.x, direction * speed, acceleration * delta)

acceleration là tốc độ tăng thêm mỗi giây, nên cần nhân với delta. Với giá trị 900, nhân vật chính đạt tốc độ 220 trong khoảng một phần tư giây. Khi không nhấn phím nào, mục tiêu là 0, nên nhân vật chính giảm tốc rồi dừng lại.

challenge icon

Thử thách

Trung bình

Giúp nhân vật tăng tốc và giảm tốc mượt mà.

  1. Lưu Input.get_axis("move_left", "move_right") vào var direction.
  2. Đặt velocity.x bằng move_toward(velocity.x, direction * speed, acceleration * delta).

Nhấn Chơi và giữ một phím mũi tên: nhân vật tăng tốc đến 220 rồi giảm tốc khi bạn thả phím. Sau đó, nhấn Kiểm tra.

Tự làm thử

extends CharacterBody2D

var speed = 220
var acceleration = 900
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
	velocity.x = Input.get_axis("move_left", "move_right") * speed
	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