Этот урок описывает создание системы нанесения урона и уничтожения врагов после определенного количества попаданий. Для этого потребуется объект, отвечающий за урон.
Создание объекта урона
Для нанесения урона врагам создадим объект, уменьшающий здоровье противника при столкновении. Назовем его dmg. При столкновении с врагом он будет отнимать 1 единицу здоровья. Аналогично, враги будут отнимать 1 единицу здоровья у игрока. Объект уничтожается при достижении нулевого здоровья.
Спрайт объекта урона
Для объекта dmg нужен спрайт. Создадим новый спрайт размером 24×24 пикселя, заполненный черным кругом. Сохраним его как dmg_sprite.
Объект dmg
Создадим объект dmg и добавим к нему спрайт dmg_sprite. Этот объект будет использоваться как для атак игрока, так и для атак врагов.
Здоровье (HP) объектов
Объект obj_player (родительский объект для всех живых существ) содержит переменную hp (health points).
- Монстры: hp = 3.
- Игрок: hp = 7.
В событии Step объекта obj_player добавим проверку: если hp ≤ 0, объект уничтожается с помощью instance_destroy().
Столкновения и нанесение урона
В объекте dmg добавим событие Collision. В нем напишем код, отнимающий 1 единицу здоровья у объекта, с которым произошло столкновение (other.hp -= 1).
Создание объекта урона при атаке игрока
Для автоматического создания объекта dmg при атаке игрока добавим код в событие Step объекта player. Будем использовать функцию keyboard_check_pressed() для проверки нажатия клавиши (например, «I»). При нажатии создадим экземпляр объекта dmg с помощью instance_create_layer(). Координаты x и y возьмем из координат игрока. Глубина слоя будет 0.
if keyboard_check_pressed(ord("I")) { instance_create_layer(x - 12, y, "Instances", obj_dmg); }
Замечания:
- keyboard_check_pressed() предотвращает многократное создание объекта при зажатой клавише.
- Размер спрайта или координаты создания можно изменить для корректного отображения объекта dmg.
- Для корректной работы столкновений включим физику (Use Physics) для объекта dmg и сделаем его сенсором (Sensor).
Проверка существования объекта игрока
Для предотвращения ошибок при уничтожении игрока добавим проверку существования объекта player в событиях Step объекта dmg и в коде создания dmg. Проверка осуществляется с помощью instance_exists(obj_player).
Улучшенная логика нанесения урона
Введем переменную dmg_amount в объекте dmg для хранения наносимого урона. Добавим переменную creator_id для хранения ID объекта, создавшего dmg, чтобы предотвратить нанесение урона самому себе.
В событии Create объекта dmg установим dmg_amount = 1 и creator_id = noone. В событии Step игрока при создании dmg установим creator_id равным ID игрока. В событии Collision объекта dmg добавим проверку other.id != creator_id перед отниманием здоровья.
Использование таймера для уничтожения объекта урона
Используем alarm[0] для уничтожения объекта dmg через один кадр после создания. В событии Alarm[0] объекта dmg добавим instance_destroy().
В этом уроке мы создали систему нанесения урона врагам с помощью объекта dmg. Мы научились управлять здоровьем объектов, обрабатывать столкновения и предотвращать ошибки. В следующих уроках улучшим систему, добавив визуальные эффекты и отталкивание объектов при столкновении.