Come posso creare una nebbia sfumata di guerra?


14

Sto creando un gioco 2D RTS dall'alto verso il basso per scopi didattici. Attualmente, sto davvero copiando il design / le idee di Starcraft. Ho deciso che probabilmente dovrei implementare anche Fog Of War.

Le mie aspettative:

  • Le aree attualmente esplorate (le unità sono presenti) dovrebbero essere illuminate.
  • Le aree esplorate in precedenza (le unità erano lì) dovrebbero essere più scure ma mostrare quali fossero le cose lì quando l'unità era lì.
  • Le aree non esplorate (aree in cui le tue unità non sono mai state) dovrebbero essere completamente nere.
  • Dovrebbe esserci una variazione gradiente da ciascun tipo (ad esempio esplorato a esplorato in precedenza) Vedi foto sotto.

gradienti tra le regioni di visibilità

Solo i dettagli approssimativi: come farei questo?

Risposte:


11

Dovresti aggiungere ulteriori informazioni su come stai implementando il gioco, ma qui ci sono alcuni suggerimenti:

  • Mantenere una bitmap dell'intera mappa, ogni volta che viene esplorata una nuova area, capovolgere i bit corrispondenti non appena diventano visibili. Puoi fare lo stesso per l'area rivelata.
  • Le unità nemiche vengono pescate solo se si trovano nell'area rivelata. Dovrai mantenere uno stato "ultimo accesso" per gli edifici nell'area FOW.
  • Non è necessario aggiornare la visibilità di ogni fotogramma: a seconda della velocità massima dell'unità, 5 o 10 fps dovrebbero essere sufficienti.
  • Supponendo che tu stia utilizzando tessere quadrate, avrai solo bisogno di 4 maschere per ottenere i risultati di cui hai bisogno: una per una tessera "solida" (oscurata), una sfumatura "gomito" e una "curva" e una "linea diritta" pendenza. Puoi ottenere tutti gli altri da questi usando rotazioni e trasparenze diverse.

Spero possa aiutare.


Inoltre, usa un indice spaziale per memorizzare gli oggetti di gioco, in modo da poter interrogare rapidamente quali oggetti sono visibili al giocatore.
Kai,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.