Вот пример кода GDScript для врага, который может двигаться, наносить урон при столкновении с персонажем и разворачиваться, если под ним нет пола:
```
расширяет KinematicBody2D
постоянная СКОРОСТЬ = 50
константа ТЯЖЕСТИ = 150
постоянный УРОН = 10
переменная скорость =
Vector2.ZERO переменное направление = 1
вар is_on_floor = ложь
функция _physics_process(дельта):
скорость.у += ТЯЖЕСТИ * дельта
скорость.x = СКОРОСТЬ * направление
если is_on_floor:
скорость = move_and_slide (скорость, Vector2.UP)
еще:
скорость = move_and_slide (скорость)
если не is_on_floor:
направление = -направление
is_on_floor = ложь
func _on_Enemy_area_entered(область):
если
area.is _in_group("игрок"):
area.call ("take_damage", УРОН)
функция _on_Enemy_body_entered (тело):
если
body.is _in_group("этаж"):
is_on_floor = правда
```
В этом коде врагом является `KinematicBody2D`, что означает, что он может двигаться и реагировать на физику. Константы «СКОРОСТЬ» и «ГРАВИТАЦИЯ» управляют скоростью движения и падения врага соответственно. Константа DAMAGE определяет, сколько урона наносит противник при столкновении с персонажем.
Переменная `velocity` представляет собой `Vector2`, который отслеживает текущую скорость движения противника. Переменная `direction` принимает значение 1 или -1, в зависимости от того, в какую сторону смотрит враг. Если врага нет на полу, он изменит направление.
Функция _physics_process вызывается каждый кадр и обновляет движение врага. Он добавляет гравитацию к вектору `velocity`, устанавливает горизонтальную скорость на основе переменной `direction` и перемещает врага с помощью `move_and_slide`. Если враг не на полу, он будет скользить по любым поверхностям, с которыми столкнется.
Функция _on_Enemy_area_entered вызывается, когда враг сталкивается с областью, которая находится в группе «игрок». Это может быть персонаж или что-то еще, что может получить урон. Функция вызывает функцию `take_damage` для сталкивающегося объекта, передавая константу `DAMAGE` в качестве параметра.
Функция _on_Enemy_body_entered вызывается, когда враг сталкивается с физическим телом, которое находится в группе «пол». Это может быть платформа или что-то еще, на чем может стоять враг. Функция устанавливает переменную `is_on_floor` в значение true, чтобы противник продолжал двигаться в том же направлении.