GM 4: Практика по созданию карты
Вот и пришел момент для начала кодинга. Штош, будим писать.
Про ощущения
Я подзадержалась с новым постом, зависала в Blood West. Делать дела было лень, но и на трех постах все забрасывать рановато, ведь все мы знаем, что отменять интересные проекты надо, когда они практически готовы (но это не значит, что я доведу его до такого состояния, неа) .
Подготавливаем рисунок карты
Как вы заметили по прошлым постам, карта Кардона вытянута по длине, что плохо сочетается с мониторами, вытянутыми в ширину. Можно, конечно, попросту наклонить карту на 90 градусов, но это будет непривычно для игроков в Сталкер (если хотим добавить экзотики, достаточно просто перевернуть ее на 180). В общем, я расширила размер изображения по ширине и примерно прикинула, где будут элементы интерфейса (желтые области).
Загружаем карту в Game Maker
Создаем в движке игровую локацию («комнату» по термину движка) размерами под изображение 1800х1000 и добавляем рисунок карты в качестве фона (если размер фона меньше размера комнаты, то он будет заполнять ее плиткой). Цвет фона за рисунком делаем черным.
Еще немного про устройство движка
При создании комнаты нужно настроить и внутриигровые виды (области отображения на экране) . Если их не применять, то при запуске проект будет открываться в окне с размерами комнаты (т. е. 1800х1000), что может выйти за пределы монитора. Потому создаем вид 800х600 (пока этого хватит) .
Для комнат же можно задать скорость игры. Этот параметр отвечает за количество шагов (а также кадров) в секунду реального времени. От него зависит плавность объектов при перемещении и производительность, ведь все расчеты внутри объектов производятся каждый шаг. Оставим его на базовом значении «30» (т.к. игра у нас схематичная, то и излишняя плавность ей не нужна).
Для перемещения игрового вида можно закодить движение клавишами, но пока воспользуемся настройками комнаты, создадим "объект-зону" (далее просто зона) и привяжем перемещение экрана при положении зоны рядом с его краями. Не забудем также разместить зону в комнате, а то как-то неудобно получится.
Поработаем над объектом-зоной
Для начала привяжем зону к координатам курсора мыши, чтобы она за ним следовала и двигала внутриигровой вид при нахождении по краям экрана.
Следующим шагом добавим два обратных таймера (считают время не вверх, а вниз до нуля), таймер между выбросами и таймер времени суток. Также пропишем две переменные для хранения продолжительности таймеров, чтобы в будущем при их изменении не приходилось верстать весь код. А в разделе рисования выведем значения этих таймеров на экран.
Переменная «bar_x» в событии отрисовки рассчитывает координаты левого верхнего угла текущего расположения экрана (или вида).
Пока на этом и закончим, прежде чем донастроить циклы полноценно, мне нужно попрактиковаться с наложением слоев и настройкой их прозрачности.
Подготовка к наполнению карты
Теперь нам нужно подготовить проект к записыванию расположений баз, укрытий, объектов и т.п. в массивы. Для этого создадим режим разработчика, активируемый клавишей "М" (почему "М"? да просто так).
В этом режиме мы будем видеть текущие координаты курсора мыши, а также сможем располагать на карте объекты-метки разного типа с отображением их координат. Правая кнопка мыши будет менять тип метки, а левая ее ставить. Также добавим метку для удаления других меток.
Долго тупила, пока делала метку для удаления меток, потому что не присвоила объекту изначальный спрайт, а без него не работают маски для столкновений, которые в спрайтах и задаются. Если задать объекту отрисовку спрайта в событии рисования, то это перекрывает изначальный спрайт при отображении, но маску для фиксации столкновений не задает.
На этом сделаем перерыв, дальше будем уже заниматься объектом локацией и ее заполнением.