Недельный отчет №1 Миникарта и "умные" мобы
Снова привет, Pikabu! Как и обещал ранее, выпускаю первый недельный отчет по разработке. Чтобы не выпускать кучу лишних постов без надобности, я решил разбавлять патчноут информацией о том, как я делал ту или иную вещь в игре. Тогда и читать будет интереснее да и текста будет поболее, а если попадется обширная тема - то сделаю отдельный пост. Традиционно передаю привет моим уже 23-м подписчикам
И по порядку начну с изменений:
1) Добавлена миникарта
Теперь в игре есть работающая (а раньше лагающая) миникарта. Во вроде бы простой задаче всегда найдется свой подводный камень, а я нашел там целый мешок. Изначально я хотел все сделать через жопу просто и топорно - у нас есть массив всех обьектов на карте, так почему бы не взять те, которые входят в зону видимости и не отрисовать как маленький спрайт вверху справа? И это работало. Только вот одна проблема. На первом скрине вы видите фпс без отрисовки карты:
А на втором вместе с отрисовкой:
Возникает логичный вопрос:
Проблема заключается в том, что метод Draw, который отвечает за отрисовку обьектов и его приблуд, вызывается очень часто. Вернее, не просто часто, а тысячи раз в секунду, или даже больше. С учетом того, что моя матрица не таких уж и маленьких размеров, процессор пытается пробежать её от начала до конца для поиска новых обьектов отрисовки на карте каждый из этих тысяч раз. Из-за этого возникает большая нагрузка, и даже мой i7 смотрит косо и говорит, мол, "дядя, ты дурной?". Приходится прибегать к хитростям, и на этот раз хитрость выглядит следующим образом - вместо того чтобы пробегать тысячи клеток, я пробегаю всего десяток комнат, и, если эта комната рядом со мной - рисую квадрат её размеров, относительно уменьшая его в несколько раз и перемещая в правый верхний угол. Просто? Проще репы. И выглядит, вроде, похоже:
Помимо этого, можно посмотреть всю открытую карту зажав "shift":
Чего пока нет - так это отрисовки туннелей. Все из-за того, что туннели, как обьекты, нигде не хранятся. Все что мы о них знаем - это то, что клетка со значением 0 в массиве принадлежит туннелю. Поэтому сейчас я пытаюсь выделить их из матрицы как обьекты, чтобы не спрашивать у Лебовски снова куда он дел мой ФПС. По этой же причине работает, но не до конца, следующая вещь:
2) Туман войны (или просто скрытые комнаты)
В прошлых постах я задался вопросом скрывания от игрока тех комнат, которые он не посетил. В принципе, это работает и выглядит как-то так:
Комнаты, которые игрок не посетил, зарисовывают свою область фоновым цветом поверх тайлов окружения. Немного криво, но суть ясна. Если исправить тайлы рядом с дверьми - будет даже симпатично. После перехода комната выглядит как обычно:
Проблема только в отрисовке тех же туннелей - они не обьекты, а значит, если мы будем искать их через массив, снова сьедим свои 3к ФПС.
Третьей и заключительной вещью, которую я реализовал на этой неделе, было:
3) Поиск пути от мобов к игроку
Раньше мобы действовали так: если на линии между игроком и мобом нет стены, значит нужно бежать в его сторону. В течении недели я совершил маленькую тайловую революцию и теперь каждая стена в игре - это не обьект, а просто картинка. Благодаря этому я увеличил тот же ФПС до 3к, но потерял возможность проверки столкновения. Недавно от одного из разработчиков на GMS2 (а именно, того парня что создал "Space ship Looter") был стрим по разработке новой игры, на котором я и поинтересовался, как у него мобы ищут путь до цели. Все оказалось довольно просто: в GMS есть такая вещь как mp_grid, это такой массив, который может хранить в себе "твердые предметы". Добавляя функцию path к мобу, мы можем указать ему условие, чтобы он искал путь от точки 1 до точки 2 избегая этих самых препятствий с указанной скоростью. В GMS2 mp_grid может не только учитывать твердые обьекты, но и заполнять сетку столкновений тайлами, от чего я упал в оргазмическом припадке с радостью взял данную фичу на вооружение, ведь это и сохранит мой ФПС, и позволит мобам "поумнеть". Примерно так смотрится все это действо на примере туповатых скелетов:
Вроде бы сделано и немного, но потихоньку игра идет к своей цели. Базовые вещи практически дописаны, сейчас нужно будет заниматься генерацией и обдумыванием общей концепции - какое будет вооружение, какие будут мобы.. В общем, помаленьку, но уже веселее. Так что, если у кого есть идеи на этот счет - смело пишите в комментах. А пока что, на следующей неделе я планирую:
- Доработать отображение туннелей в тумане войны и на карте
- Добавить освещение, как общее, так и локальное
- Поиграться с методом path чтобы сделать плавное покачивание предметов и прочих вещей
- Поиграться с мобами и настроить пару видов поведения
- Добавить возможность телепортации между зелеными комнатами, если эти комнаты открыты
Надеюсь, пост был не скучным и информативным)
P.S. Все думаю, делать ли туннели 3 клетки шириной вместо 1. Как вы считаете? И стоит ли увеличить высоту стен на один блок?