Подготовка спрайтов
Необходимо спрайт врага. Импортируйте его в GameMaker Studio: выберите «Sprite», затем «Sprite» и импортируйте изображение. Спрайт содержит 4 изображения, размером приблизительно 62×56 пикселей. Установите скорость анимации, например, 7 кадров в секунду. Назовите спрайт enemy_sprite.
Создание объекта врага
Создайте новый объект, используя импортированный спрайт enemy_sprite. Назовите его enemy. Включите физику для объекта, указав подходящий размер коллайдера (например, для близкого взаимодействия с игроком).
Размещение врагов на уровне
В вашей комнате (уровне) перетащите несколько экземпляров (instances) объекта enemy. Убедитесь, что вкладка «Instances» отображается; в противном случае объекты не будут видны. При проблемах с отображением перезапустите GameMaker Studio.
Реализация преследования игрока
Добавьте следующие события:
Событие Create
В событии Create создайте переменную speed со значением 0.25 (скорость перемещения врага).
Событие Step
В событии Step используйте следующий код для движения врага к игроку:
physics_apply_impulse(sign(object_player.x - x), sign(object_player.y - y) * speed);
Функция sign() возвращает 1 (положительное число), -1 (отрицательное число) или 0 (ноль). Код вычисляет направление к игроку и применяет импульс с заданной скоростью.
Настройка коллизий
Добавьте события коллизий (Collision) с объектом игрока (player), объектом стены (wall) и самим собой (enemy). В каждом событии коллизий достаточно добавить комментарий для корректной работы GameMaker Studio.
Родительский объект
Создайте родительский объект parent для упрощения работы и организации кода. Добавьте в него события коллизий с самим собой и со стеной. Установите parent как родительский объект для player и enemy. Это позволит удалить обработчики коллизий из player и enemy, которые теперь будут обрабатываться родительским объектом. В событии Create родительского объекта добавьте physics_fixed_rotation = true для предотвращения вращения объектов.
Глубина отрисовки
В событии Step родительского объекта добавьте:
depth = -y;
Это обеспечит корректную отрисовку объектов, основываясь на их Y-координате. Добавьте event_inherited(); в события Step объектов enemy и player.
В этом уроке созданы враги, преследующие игрока, не проходящие друг через друга и через стены. Функционал атаки будет добавлен в следующих уроках.