Menu
CoddyTech

Плавное ускорение

Часть раздела Ввод и перемещение путешествия по Godot на Coddy. Урок 18 из 28.

Герой набирает полную скорость за один кадр и останавливается за один кадр. Это выглядит скованно.

move_toward(from, to, step) перемещает число from в направлении to не более чем на step, не проходя дальше этой точки. move_toward(0, 220, 15) возвращает 15. При повторении каждый кадр получается 30, 45 и так далее вплоть до 220.

Используй эту функцию для velocity.x, задав скорость, которую требуют нажатые клавиши:

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

acceleration — это скорость, набираемая за секунду, поэтому её нужно умножить на delta. При значении 900 герой достигает скорости 220 примерно за четверть секунды. Если клавиши не нажаты, целевое значение равно 0, поэтому герой постепенно останавливается.

challenge icon

Задание

Средне

Сделай так, чтобы герой плавно ускорялся и замедлялся.

  1. Сохрани Input.get_axis("move_left", "move_right") в var direction.
  2. Задай значение velocity.x с помощью move_toward(velocity.x, direction * speed, acceleration * delta).

Нажми «Играть» и удерживай клавишу со стрелкой: герой разгоняется до 220, а когда ты отпускаешь клавишу, замедляется. Затем нажми «Проверить».

Попробуйте сами

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()

Все уроки раздела Ввод и перемещение

Потренируйтесь самостоятельно: Песочница Godot