Равномерные диагонали
Часть раздела Ввод и перемещение путешествия по Godot на Coddy. Урок 11 из 28.
Герой из прошлого урока слишком быстро движется по диагонали. Движение вверх и вправо задаёт скорость Vector2(200, -200). Длина этого вектора составляет около 283 пикселей, а не 200.
.normalized() сохраняет направление вектора и делает его длину равной 1. Умножь его на скорость:
var direction = Vector2(Input.get_axis("move_left", "move_right"), Input.get_axis("move_up", "move_down"))
velocity = direction.normalized() * speed
move_and_slide()Тогда движение в любом направлении будет со скоростью 200 пикселей в секунду. При нормализации Vector2(0, 0) остаётся нулевым, поэтому герой останавливается.
Input.get_vector() уже возвращает вектор направления длиной не больше 1. Выражение velocity = Input.get_vector("move_left", "move_right", "move_up", "move_down") * speed тоже обеспечивает одинаковую скорость по диагонали.
Задание
СреднеЗаставь героя двигаться со скоростью 200 пикселей в секунду в любом направлении, в том числе по диагонали. Используй .normalized() для направления Vector2 или используй Input.get_vector().
Попробуйте сами
extends CharacterBody2D
var speed = 200
func _physics_process(delta):
velocity.x = Input.get_axis("move_left", "move_right") * speed
velocity.y = Input.get_axis("move_up", "move_down") * speed
move_and_slide()
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Ввод и перемещение
2CharacterBody2D
CharacterBody2DХодьба с помощью скоростиСтены останавливаютХодьба повсюдуРавномерные диагоналиПотренируйтесь самостоятельно: Песочница Godot