Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Пример кода на GDscript для врага.

Герман Туранов Ученик (96), на голосовании 11 месяцев назад
Как сделать врага в годот который может только передвигатся, нанасить урон при столкнавении с персонажем и разворачиваться если под ним нет пола?
Голосование за лучший ответ
...WorkOut... Мыслитель (8961) 1 год назад
Вот пример кода 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, чтобы противник продолжал двигаться в том же направлении.
Похожие вопросы