Como posso criar um Fog of War com gradiente?


14

Estou criando um jogo RTS 2D de cima para baixo para fins educacionais. Atualmente, estou apenas copiando o design / idéias de Starcraft. Eu decidi que provavelmente deveria implementar o Fog Of War também.

Minhas expectativas:

  • As áreas atualmente exploradas (unidades estão lá) devem ser iluminadas.
  • Áreas materialização explorado (unidades foram lá) deve ser mais escura, mas mostrar o que as coisas estavam lá quando a sua unidade estava lá.
  • As áreas não exploradas (áreas em que suas unidades nunca foram) devem estar completamente pretas.
  • Deve haver uma mudança de gradiente de cada tipo (por exemplo, explorado para explorado anteriormente) Veja a figura abaixo.

gradientes entre regiões de visibilidade

Apenas os detalhes aproximados: como eu faria isso?

Respostas:


11

Você deve adicionar mais informações sobre como está implementando o jogo, mas aqui estão algumas sugestões:

  • Mantenha um bitmap de todo o mapa, sempre que uma nova área for explorada, basta inverter os bits correspondentes à medida que se tornam visíveis. Você pode fazer o mesmo para a área revelada.
  • As unidades inimigas são sorteadas apenas se estiverem na área revelada. Você precisará manter um estado de "última vista" para edifícios na área FOW.
  • Você não precisa atualizar a visibilidade em todos os quadros - dependendo da velocidade máxima da unidade, 5 ou 10fps devem ser suficientes.
  • Supondo que você esteja usando ladrilhos quadrados, precisará de apenas 4 máscaras para obter os resultados necessários: um para um ladrilho 'sólido' (escurecido), um gradiente de 'cotovelo' e um 'canto' e um 'canto reto' gradiente. Você pode obter todos os outros usando rotações e transparências diferentes.

Espero que ajude.


Além disso, use um índice espacial para armazenar os objetos do jogo, para que você possa consultar rapidamente quais objetos são visíveis para o jogador.
22412 Kai
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.