Wie wird in einer 2D-Umgebung ein Schleimausbreitungseffekt angezeigt?

8

Hier ist ein Beispiel für eine solche Schleimausbreitung. Die Substanz ist um die Quelle verteilt (in diesem Beispiel wäre die Quelle das wichtigste außerirdische Gebäude).

Geben Sie hier die Bildbeschreibung ein

Das Spiel ist Starcraft, die lila Substanz heißt Creep.

Wie würde diese Art der Substanzverbreitung in einer 2D-Umgebung von oben nach unten erreicht werden? Berechnen Sie das Fortschreiten der Substanz neu und regenerieren Sie die Wirkung auf die Fliege in jedem Frame oder verwenden Sie lieber eine große Sammlung von Kacheln oder etwas anderes?

Nathan
quelle
Es ist schwer zu sagen, wonach Sie genau suchen. Um eine Vermutung zu riskieren, würde ich alle Kacheln durchlaufen. Wenn die Kachel leer ist, aber N Kacheln an eine Infektion grenzen, infizieren Sie die aktuelle Kachel.
Jari Komppa
3
Das gesuchte Schlüsselwort lautet "zellulare Automaten".
Marton
@ Byte56 tolle Antwort, ziemlich klar. Danke für das Teilen.
Nathan

Antworten:

7

Gemäß Ihrem Kommentar in den anderen Antworten ist Ihr Problem nicht der Kriechwachstumsalgorithmus, sondern der Algorithmus, der die zu verwendende Kriechkachel auswählt.

Welche Kachel verwendet werden soll, hängt davon ab, ob:

  1. Die obere Kachel ist infiziert oder nicht
  2. Die richtige Kachel ist infiziert oder nicht
  3. Die untere Kachel ist infiziert oder nicht
  4. Die linke Kachel ist infiziert oder nicht

Das bedeutet, dass Sie insgesamt 16 Kacheln benötigen. Sie können sie leicht mit einem Bitfeld ansprechen. Hier ist ein Pseudocode, der für jede mögliche Kriechkonstellation eine andere Kachel auswählt:

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]

Beachten Sie, dass bei jeder Änderung des Infektionsstatus einer Kachel alle infizierten benachbarten Kacheln neu bewertet werden müssen, da sich ihre Nachbarschaft jetzt geändert hat.

Wie man die 16 Kachelgrafiken so gestaltet, dass sie gut zusammenpassen, ist eine (neue) Frage für einen Grafikdesigner.

Philipp
quelle
1
@nathan Suchen Sie auch nach Cellular Automata.
Ingenieur
2

Vor einiger Zeit habe ich einen Strategie-Artikel gelesen, in dem ausführlich erklärt wurde, wie sich Creep in Starcraft 2 ausbreitet. Ich habe Probleme, ihn jetzt zu finden, aber ich erinnere mich, dass er ziemlich einfach ist und ein bisschen so funktioniert

  • Die Starcraft 2-Karte ist in Kacheln unterteilt
  • Für jede Kriechquelle wählt jedes "Häkchen" eine zufällige Kachel, auf die sich das Kriechen ausbreiten kann, und verteilt das Kriechen auf diese Kachel
  • Das Kriechen kann sich auf jede Fliese ausbreiten
    • Angrenzend an eine andere Fliese mit Kriechen oder neben der Quelle des Kriechens
    • Innerhalb eines bestimmten Bereichs der Kriechquelle
    • Keine Klippe

Der einfachste Weg, um zu verfolgen, auf welche Kacheln sich das Kriechen ausgebreitet hat, ist wahrscheinlich nur eine Flagge für jede Kachel - versuchen Sie nicht, sie in jeder Runde neu zu berechnen.

Die Zeit zwischen "Zecken" kann verwendet werden, um die Ausbreitungsrate des Kriechens zu steuern. Alternativ können Sie zulassen, dass sich das Kriechen bei jedem "Häkchen" auf mehrere Kacheln ausbreitet, oder sogar die Zeit zwischen den Zecken zufällig bestimmen.

Der obige Algorithmus hat den Effekt, dass sich das Kriechen schneller ausbreitet, wenn es auf beiden Seiten von Klippen blockiert wird. Sie können jedoch stattdessen ein zufälliges Plättchen innerhalb des Bereichs der Kriechquelle auswählen und das Kriechen nur dann auf dieses Plättchen ausbreiten, wenn es keine Klippe ist .

Justin
quelle
Schön, aber was ist mit dem Kriechen einer Kachel? Der Algorithmus ist einfach richtig, wenn auch etwas Ähnliches. Aber wie kann man diesen natürlichen , unvollkommenen Effekt mit Fliesen erzielen?
Nathan
@ Nathan Wie meinst du? Da die kriechende Fliese zufällig ausgewählt wird, ist die Ausbreitung nicht perfekt (im Gegensatz zur Ausbreitung in einem perfekten Kreis). Der Rest wird in der grafischen Engine erledigt, indem ausgewählt wird, welche Texturen für jede Kachel angezeigt werden sollen.
Justin
Ja, meine Frage war eher, wie man die Kachel auswählt, um einen kohärenten Effekt zu erzielen.
Nathan
1
@nathan Sie haben höchstwahrscheinlich viele vorgerenderte Sprites, die, wenn sie in der richtigen Kombination nebeneinander platziert werden, den gewünschten visuellen Effekt erzeugen.
Panda Pyjama
1
@nathan Hätte wahrscheinlich fragen sollen, wie man es anzeigt, anstatt wie man es produziert.
MichaelHouse