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

Равномерные диагонали

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

challenge icon

Задание

Средне

Заставь героя двигаться со скоростью 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()
quiz iconПроверьте себя

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

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

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