Menu
CoddyTech

Стены останавливают

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

Стены и колонна — это узлы StaticBody2D. Статическое тело никогда не движется. У каждого есть CollisionShape2D для его твёрдой формы и ColorRect, чтобы его нарисовать.

Только move_and_slide() проверяет наличие стен. Изменение position перемещает тело без проверки, поэтому оно проходит сквозь стены:

position.x += direction * speed * delta   # сквозь стены
velocity.x = direction * speed            # останавливается при столкновении со стенами
move_and_slide()

Текст после # — это комментарий. Godot пропускает его.

Тело, которое ударяется о стену под углом, сохраняет составляющую движения вдоль стены. Оно скользит, а не застревает, что и объясняет название move_and_slide().

challenge icon

Задание

Легко

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

  1. Замени строку position.x на такую, которая задаёт velocity.x значение direction * speed, без delta.
  2. Под ней вызови move_and_slide().

Нажми «Играть» и пройдись в обе стороны: столб и стена останавливают героя. Затем нажми «Проверить».

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

extends CharacterBody2D

var speed = 200

func _physics_process(delta):
	var direction = Input.get_axis("move_left", "move_right")
	position.x += direction * speed * delta

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

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