Comment afficher un effet de «propagation du mucus» dans un environnement 2D?


8

Voici un exemple d'une telle propagation du mucus. La substance est répartie autour de la source (dans cet exemple, la source serait le principal bâtiment étranger).

entrez la description de l'image ici

Le jeu est starcraft, la substance violette est appelée fluage.

Comment ce type de diffusion de substances serait-il réalisé dans un environnement 2D descendant? Recalculer la progression de la substance et régénérer l'effet à la volée à chaque image ou plutôt utiliser une grande collection de carreaux ou autre chose?


Il est difficile de dire exactement ce que vous recherchez. Pour risquer une supposition, je ferais un passage à travers toutes les tuiles, et si la tuile est vide mais a N tuiles bordant l'infection, alors infecter la tuile actuelle.
Jari Komppa

3
Le mot-clé que vous recherchez est "automates cellulaires".
Marton


@ Byte56 excellente réponse, assez claire. Merci d'avoir partagé.
nathan

Réponses:


7

Selon votre commentaire dans les autres réponses, votre problème n'est pas l'algorithme de croissance de fluage, mais plutôt l'algorithme qui choisit la tuile de fluage à utiliser.

La tuile à utiliser dépend:

  1. la tuile supérieure est infectée ou non
  2. la tuile droite est infectée ou non
  3. la tuile inférieure est infectée ou non
  4. la tuile gauche est infectée ou non

Cela signifie que vous aurez besoin d'un total de 16 tuiles. Vous pouvez facilement les adresser avec un champ de bits. Voici un pseudocode qui choisira une tuile différente pour chaque constellation de fluage possible:

index = 0;
if left tile is creeped then index += 1
if lower tile is creeped then index += 2
if right tile is creeped then index += 4
if upper tile is creeped then index += 8    
creep_tile = creep_tiles[index]

Notez que chaque fois que vous modifiez le statut d'infection d'une tuile, toutes les tuiles adjacentes infectées doivent être réévaluées, car leur voisinage a maintenant changé.

Comment concevoir les 16 graphiques de tuiles afin qu'ils s'emboîtent bien est une (nouvelle) question pour un graphiste.


1
@nathan Recherchez également les automates cellulaires.
Ingénieur

2

Il y a quelque temps, j'ai lu un article de stratégie qui expliquait en détail comment le fluage se répand dans Starcraft 2, j'ai du mal à le trouver maintenant, mais je me souviens que c'est assez simple et fonctionne un peu comme ça

  • La carte Starcraft 2 est divisée en tuiles
  • Pour chaque source de fluage, chaque "coche" choisit une tuile aléatoire qui est élégante pour que le fluage se propage et se propage sur cette tuile
  • Le fluage peut se propager à n'importe quelle tuile qui est
    • Adjacent soit à une autre tuile avec fluage, soit adjacent à la source du fluage
    • Dans une plage donnée de la source de fluage
    • Pas une falaise

Le moyen le plus simple de suivre le fluage des tuiles est probablement un indicateur pour chaque tuile - n'essayez pas de le recalculer à chaque tour.

Le temps entre les "ticks" peut être utilisé pour contrôler la vitesse de propagation du fluage, vous pouvez également permettre au fluage de se propager à plusieurs tuiles à chaque "tick", ou même de randomiser le temps entre les tics.

L'algorithme ci-dessus a pour effet que le fluage se propage plus rapidement s'il est bloqué par des falaises de chaque côté, mais vous pouvez plutôt choisir une tuile aléatoire à portée de la source de fluage et ensuite ne propager le fluage à cette tuile que si ce n'est pas une falaise. .


Bien mais qu'en rampant une tuile , l'algorithme est simple à droite, je pense à quelque chose de similaire. Mais comment obtenir cet effet naturel et imparfait en utilisant des carreaux?
nathan

@nathan Comment ça? Parce que la tuile rampante est choisie au hasard, la propagation est imparfaite (par opposition à l'étalement dans un cercle parfait). Le reste se fait dans le moteur graphique en choisissant les textures à afficher pour chaque tuile.
Justin

ouais ma question était plus sur la façon de choisir quelle tuile utiliser pour obtenir un effet cohérent.
nathan

1
@nathan Ils ont probablement beaucoup de sprites pré-rendus qui, lorsqu'ils sont placés côte à côte dans la bonne combinaison, créent l'effet visuel souhaité.
Panda Pyjama

1
@nathan aurait probablement dû demander comment l'afficher, plutôt que comment le produire.
MichaelHouse
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.