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

14

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

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

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

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

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

Freesnöw
источник

Ответы:

11

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

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

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

SkimFlux
источник
Кроме того, используйте пространственный индекс для хранения игровых объектов, чтобы вы могли быстро запросить, какие объекты видны игроку.
Кай