Comment créer un brouillard de guerre dégradé?

14

Je crée un jeu RTS 2D descendant à des fins éducatives. Actuellement, je ne fais que copier les designs / idées de Starcraft. J'ai décidé que je devrais probablement aussi implémenter Fog Of War.

Mes attentes:

  • Les zones actuellement explorées (les unités sont là) doivent être éclairées.
  • Les zones précédemment explorées (les unités étaient là) devraient être plus sombres mais montrer quelles étaient les choses lorsque votre unité était là.
  • Les zones non explorées (les zones où vos unités n'ont jamais été) doivent être complètement noires.
  • Il devrait y avoir un changement de gradient de chaque type (par exemple exploré à précédemment exploré) Voir l'image ci-dessous.

dégradés entre régions de visibilité

Juste les détails: comment pourrais-je faire cela?

Freesnöw
la source

Réponses:

11

Vous devriez ajouter plus d'informations sur la façon dont vous implémentez le jeu, mais voici quelques suggestions:

  • Gardez une image bitmap de la carte entière, chaque fois qu'une nouvelle zone est explorée, il suffit de retourner les bits correspondants à mesure qu'ils deviennent visibles. Vous pouvez faire de même pour la zone révélée.
  • Les unités ennemies ne sont tirées que si elles se trouvent dans la zone révélée. Vous devrez conserver un état «dernière vue» pour les bâtiments dans la zone FOW.
  • Vous n'avez pas besoin de mettre à jour la visibilité à chaque image - selon votre vitesse unitaire maximale, 5 ou 10 images par seconde devraient suffire.
  • En supposant que vous utilisez des carreaux carrés, vous aurez juste besoin de 4 masques pour obtenir les résultats dont vous avez besoin: un pour une tuile «solide» (noirci), un dégradé «coude» et un «coin», et un «bord droit» pente. Vous pouvez en obtenir tous les autres à l'aide de rotations et de transparents différents.

J'espère que cela pourra aider.

SkimFlux
la source
Utilisez également un index spatial pour stocker vos objets de jeu, afin de pouvoir rapidement interroger les objets visibles par le joueur.
Kai