Gamemaker Studio 2. Редактор гексовых карт
Привет.
Запилил на досуге проект для текстовой стратегии, позволяющий создавать гексовые карты. В конце поста - исходник в двух видах (файл проекта для движка и зип архив со скомпилированным проектом), можно скачать и потыкать.
Немного о самом проекте.
Игра в жанре стратегии требует некоторой структуризации всего, что в ней есть. В особенности это касается карты. Гексовая карта была выбрана голосованием большинства, ведь у неё есть ряд преимуществ перед стандартной "квадратной" сеткой.
Первое - просто посчитать количество гексов, которые нужно пройти в ту или иную клетку.
Второе - визуал.
Неудобно, конечно, что двигаться можно строго по прямой только в одном направлении, но с этим придётся смириться.
Получившаяся в итоге программка позволяет загрузить в неё (пока только в виде ассетов!) любую текстуру или спрайт и затем применять для создания карты. Всё, что нужно - в объекте objManager дописать строчку в global.layer с названием спрайта. Для удобства, у нас имеются три слоя, на которых мы можем рисовать и с которых по отдельности можем что-то стирать.
Слой земли/воды, слой природных объектов и объектов игроков.
Стоит сказать, что я не придумал ничего нового. Для этой работы я использовал данный сайт, знакомый всем, кто интересовался темой.
Там подробно разобрано, что такое гексы и как с ними работать. Однако, чтобы всё с данного сайта работало как нужно, мне пришлось столкнуться с некоторыми трудностями.
1. Не используйте спрайты гексов.
Причина этого кроется в "не идеальности" гексовых спрайтов как таковых. Различия в один пиксель или пару градусов рушат всё, в том числе - формулы, которые приведены в источнике.
2. Используйте сурфейсы (холсты).
Иные способы отрисовки гексов дадут многократную нагрузку на ваш ПК. Что печально, нагрузку ненужную, потому что всё, что нам нужно - мы можем быстро просчитать при помощи пары формул.
Если ранее вы не работали с сурфейсами, то сейчас - самое время. С редактором карт это достаточно просто, но даёт понимание о том, как они работают.
Хоть в коде это есть, но здесь всё же опишу.
Сурфейс - это холст. Как и на любой холст, мы можем нанести на него что угодно: любой спрайт, любую фигуру. Всё, что нам будет нужно затем - это данный холст нарисовать.
Заполнять холсты можно в любых событиях, в том числе в событии создания. И, что важнее, дальнейшая отрисовка данного холста будет заметно менее "тяжёлой" для игрового движка и процессора, так как холст не обновляется каждый кадр. Его можно обновить только ручками.
По сути, мы получаем статичную картинку, которую рисуем на экран.
3. Учите геометрию.
Было бы смешно, если бы не было так грустно. После того, как мы нарисовали границы гекса - нам нужно его чем-то заполнить. На этом моменте со всех ног влетает геометрия.
Смотрим пункт выше и понимаем, что рисовать условную землю в виде гекса - затея так себе. Опять же, не совпадут углы - и появятся "проплешины" внутри нашего гекса.
Я этот момент решил с помощью прямоугольных спрайтов, который масштабируется в размерах и обрезаются под конкретный гекс.
В остальном, редактор карт - штука незатейливая и в своей реализации достаточно простая, но, несмотря на это, имеющая некоторые заковырки, с которыми советую покопаться самому, чтобы слегка поднять свой личный скилл.
Ссылка на исходники.
https://disk.yandex.ru/d/_OSgSS-huMtgzg

Лига Разработчиков Видеоигр
9.9K поста23.4K подписчик
Правила сообщества
ОБЩИЕ ПРАВИЛА:
- Уважайте чужой труд и используйте конструктивную критику
- Не занимайтесь саморекламой, пишите качественные и интересные посты
- Никакой политики
СТОИТ ПУБЛИКОВАТЬ:
- Посты о Вашей игре с историей её разработки и описанием полученного опыта
- Обучающие материалы, туториалы
- Интервью с опытными разработчиками
- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе
НЕ СТОИТ ПУБЛИКОВАТЬ:
- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры
- Посты, единственная цель которых - набор команды для разработки игры
- Посты, не относящиеся к тематике сообщества
Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.
ЗАПРЕЩЕНО:
- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции
- Выдавать чужой труд за свой
Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.
О РАЗМЕЩЕНИИ ССЫЛОК:
Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:
- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества
- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз
- Cсылка размещается в формате: "Страница игры в Steam: URL"