GM 4: Практика по созданию карты

Вот и пришел момент для начала кодинга. Штош, будим писать.

Про ощущения

Я подзадержалась с новым постом, зависала в Blood West. Делать дела было лень, но и на трех постах все забрасывать рановато, ведь все мы знаем, что отменять интересные проекты надо, когда они практически готовы (но это не значит, что я доведу его до такого состояния, неа) .

Подготавливаем рисунок карты

Как вы заметили по прошлым постам, карта Кардона вытянута по длине, что плохо сочетается с мониторами, вытянутыми в ширину. Можно, конечно, попросту наклонить карту на 90 градусов, но это будет непривычно для игроков в Сталкер (если хотим добавить экзотики, достаточно просто перевернуть ее на 180). В общем, я расширила размер изображения по ширине и примерно прикинула, где будут элементы интерфейса (желтые области).

Ноль по координатам в гамаке расположен в левом верхнем углу, а положительные значения оси "У" идут сверху вниз (неудобно, но быстро привыкаешь). 
Ноль по координатам в гамаке расположен в левом верхнем углу, а положительные значения оси "У" идут сверху вниз (неудобно, но быстро привыкаешь). 

Загружаем карту в Game Maker

Создаем в движке игровую локацию («комнату» по термину движка) размерами под изображение 1800х1000 и добавляем рисунок карты в качестве фона (если размер фона меньше размера комнаты, то он будет заполнять ее плиткой). Цвет фона за рисунком делаем черным.

Еще немного про устройство движка

При создании комнаты нужно настроить и внутриигровые виды (области отображения на экране) . Если их не применять, то при запуске проект будет открываться в окне с размерами комнаты (т. е. 1800х1000), что может выйти за пределы монитора. Потому создаем вид 800х600 (пока этого хватит) .

Сейчас игровой вид находится в правом нижнем углу до упора. Я ориентировалась на соотношение 16:9 и попала, ведь при 21:9 уже могла возникнуть ситуация, когда на экране было бы сплошь черное полотно и непонятно, где именно находится экран.
Сейчас игровой вид находится в правом нижнем углу до упора. Я ориентировалась на соотношение 16:9 и попала, ведь при 21:9 уже могла возникнуть ситуация, когда на экране было бы сплошь черное полотно и непонятно, где именно находится экран.

Для комнат же можно задать скорость игры. Этот параметр отвечает за количество шагов (а также кадров) в секунду реального времени. От него зависит плавность объектов при перемещении и производительность, ведь все расчеты внутри объектов производятся каждый шаг. Оставим его на базовом значении «30» (т.к. игра у нас схематичная, то и излишняя плавность ей не нужна).

Для перемещения игрового вида можно закодить движение клавишами, но пока воспользуемся настройками комнаты, создадим "объект-зону" (далее просто зона) и привяжем перемещение экрана при положении зоны рядом с его краями. Не забудем также разместить зону в комнате, а то как-то неудобно получится.

Поработаем над объектом-зоной

Для начала привяжем зону к координатам курсора мыши, чтобы она за ним следовала и двигала внутриигровой вид при нахождении по краям экрана.

У компилятора удобные подсказки, потому не обязательно помнить дословно названия встроенных функций и параметров.
У компилятора удобные подсказки, потому не обязательно помнить дословно названия встроенных функций и параметров.

Следующим шагом добавим два обратных таймера (считают время не вверх, а вниз до нуля), таймер между выбросами и таймер времени суток. Также пропишем две переменные для хранения продолжительности таймеров, чтобы в будущем при их изменении не приходилось верстать весь код. А в разделе рисования выведем значения этих таймеров на экран.

Переменная «bar_x» в событии отрисовки рассчитывает координаты левого верхнего угла текущего расположения экрана (или вида).

Пока на этом и закончим, прежде чем донастроить циклы полноценно, мне нужно попрактиковаться с наложением слоев и настройкой их прозрачности.

Подготовка к наполнению карты

Теперь нам нужно подготовить проект к записыванию расположений баз, укрытий, объектов и т.п. в массивы. Для этого создадим режим разработчика, активируемый клавишей "М" (почему "М"? да просто так).

В этом режиме мы будем видеть текущие координаты курсора мыши, а также сможем располагать на карте объекты-метки разного типа с отображением их координат. Правая кнопка мыши будет менять тип метки, а левая ее ставить. Также добавим метку для удаления других меток.

Долго тупила, пока делала метку для удаления меток, потому что не присвоила объекту изначальный спрайт, а без него не работают маски для столкновений, которые в спрайтах и задаются. Если задать объекту отрисовку спрайта в событии рисования, то это перекрывает изначальный спрайт при отображении, но маску для фиксации столкновений не задает.

Теперь все работает, как надо. Слева вверху текущий тип метки. Справа от метки координата "х", а снизу - "у".
Теперь все работает, как надо. Слева вверху текущий тип метки. Справа от метки координата "х", а снизу - "у".

На этом сделаем перерыв, дальше будем уже заниматься объектом локацией и ее заполнением.

2222
52 комментария

ты делаешь карту для сталкера?

5
Ответить

лучше... рисунок карты

9
Ответить

Который никогда не выйдет

3
Ответить

На этом сделаем перерывРелиз нескоро такими темпами будет)

3
Ответить

какой релиз, главная задача же залезть повыше, чтобы сильнее удариться при падении)

3
Ответить

Это еще ничего, я 3 года пытался научиться в love2d и вообще не осилил

2
Ответить

Я так понимаю ты делаешь именно карту локации?
И ты будет ее потом в 3д или как

2
Ответить