Плавное ускорение
Часть раздела Ввод и перемещение путешествия по 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, поэтому герой замедлится и остановится.
Задание
СреднеСделай так, чтобы герой плавно ускорялся и замедлялся. Устанавливай 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()
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Ввод и перемещение
1Действия ввода
Нажми, чтобы двигатьсяВлево и вправоОдна осьЧетыре направленияТолько что нажатоНеобработанный ввод4Плавное движение
Плавное ускорениеТрениеПоворачивайся в направлении движенияНе выходи за границы экранаОграничение по обеим осямПотренируйтесь самостоятельно: Песочница Godot