Как я могу создать градиентный туман войны?


14

Я создаю 2D RTS игру сверху вниз для образовательных целей. В настоящее время я просто копирую дизайн / идеи Starcraft. Я решил, что, возможно, мне следует внедрить Fog Of War.

Мои ожидания:

  • Области, в настоящее время исследуемые (единицы есть), должны быть освещены.
  • Области previsouly изучены (единицы были там) должны быть темнее , но показать , что вещи были там , когда ваш аппарат был там.
  • Области, не исследованные (области, в которых ваши юниты никогда не были) должны быть полностью черными.
  • Должно быть изменение градиента от каждого типа (например, исследовано до ранее исследованного). См. Рисунок ниже.

градиенты между областями видимости

Только грубые детали: как бы я это сделал?

Ответы:


11

Вы должны добавить больше информации о том, как вы реализуете игру, но вот несколько предложений:

  • Сохраняйте растровое изображение всей карты, каждый раз, когда исследуется новая область, просто переворачивайте соответствующие биты, когда они становятся видимыми. Вы можете сделать то же самое для выявленной области.
  • Вражеские отряды вытягиваются, только если они находятся в раскрытой области. Вам нужно будет сохранить состояние «последний раз видели» для зданий в зоне FOW.
  • Вам не нужно обновлять видимость каждого кадра - в зависимости от вашей максимальной скорости устройства, достаточно 5 или 10 кадров в секунду.
  • Предполагая, что вы используете квадратные плитки, вам понадобятся 4 маски, чтобы получить нужные вам результаты: одну для «сплошной» (затемненной) плитки, один «локоть» и один «угловой» градиент, а одну «прямой край» градиент. Вы можете получить все остальные из них, используя повороты и различные прозрачные пленки.

Надеюсь, это поможет.


Кроме того, используйте пространственный индекс для хранения игровых объектов, чтобы вы могли быстро запросить, какие объекты видны игроку.
Кай
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.