Menu
CoddyTech
flag Ru iconРусскийdown icon

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

Часть раздела Ввод и перемещение путешествия по 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

Задание

Средне

Сделай так, чтобы герой плавно ускорялся и замедлялся. Устанавливай velocity.x с помощью move_toward в направлении direction * speed, изменяя значение на acceleration * delta каждый кадр.

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

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()
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

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

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