Ich erstelle ein Spiel in Flash AS3, in dem der Spieler das Land ändern muss, um das Wasser in die richtige Richtung zu lenken.
Die Wassersimulation ist jedoch ein neues Thema für mich und ich stecke irgendwie fest. Es muss nicht wie realistisches Wasser sein, mit Wellen und Dingen, aber es muss fließen, und wenn es genug Wasser gibt, muss es steigen.
Ich habe mir zwei verschiedene Arten von Wasser ausgedacht:
- Eine Quelle: Unendliche Wasserquelle. Wird zur Simulation von Meeren und anderen Dingen verwendet.
- Wasserblock: Nur eine Einheit Wasser.
Meine aktuelle Implementierung zeigt, wie sich das Wasser ausbreiten soll, aber es steigt nicht an und lässt kein endliches Wasser zu. Außerdem berücksichtigt die Ausbreitung keine Wassermenge, sondern dupliziert nur, anstatt tatsächlich Wassereinheiten zu bewegen.
Ich bin gespannt, wie ihr dieses Problem lösen würdet. Alle Beispiele / Pseudocode werden immer geschätzt.
Aktuelle Version: http://dl.dropbox.com/u/319897/ProjectWater.swf Sie können das Land bearbeiten, indem Sie die linke Maustaste drücken. Und kann durch Drücken von A jeweils einen Schritt Wasser simulieren.
Quelle des Wasserteils: http://pastebin.com/Js2kYt4y
Antworten:
Sie müssen zellulare Automaten und möglicherweise die Fluiddynamik überprüfen. Tarn Adams hat in Dwarf Fortress ein zellbasiertes Flüssigkeitssystem implementiert. Dies sind die Werkzeuge, die er angeblich in einem Interview verwendet hat, das ich vor einiger Zeit gelesen habe (und auch in drei Dimensionen gemäß Ihrem Anwendungsfall). Ich denke für Ihre Zwecke werden zelluläre Automaten (Selbstreplikation / Vermehrung von Wasserzellen) ausreichen. Zelluläre Automaten sind im Grunde das, was Sie im klassischen Spiel des Lebens von John Conway sehen.
Die schurkenhafte Entwicklergemeinde hat eine Menge Informationen über diese Art von Dingen, da diese Spiele von Natur aus zellbasiert sind. Ich glaube, es gibt irgendwo im Web eine rec.games.roguelike-Mailingliste, auf der Sie detaillierte Informationen erhalten können.
Schlagen Sie außerdem vor, dass Sie sich die Voxeltron-Videos auf Youtube ansehen. Eines davon (es gibt nur etwa 2 oder 3) zeigt flüssige Lava in Bewegung. Wenn Sie ausreichend kleine Subwürfel in Ihrem kubischen Hauptgitter verwenden, können Sie ziemlich kühles, nicht blockierendes Wasser in Gang bringen, indem Sie Sinuswellen und dergleichen für die Oberflächenbewegung verwenden. Noch einmal, für die Verbreitung würden Sie zellulare Automatentechniken verwenden.
Eine Einführung in CAs, überprüfen Sie diese aus.
quelle
Ein guter Ansatz könnte eine Flutfüllung sein .
Eine Zeitdimension kann einfach hinzugefügt werden, indem die nominelle Wassermenge in jeder Zelle verfolgt wird und nur die Übertragung eines bestimmten Wasseranteils mit jedem Zeitschritt der Simulation ermöglicht wird. Dieser Anteil könnte gleichmäßig auf benachbarte Zellen auf Wasserbasis in einer Atemzugfüllung aufgeteilt werden. Dieser einfache Ansatz würde bedeuten, dass sich Wasser über Ebenen und Becken und dergleichen füllt.
Wenn Sie als Nebeneffekt hoher Wassertransferraten mit dem Schnitzen von Kanonen oder Flüssen spielen möchten, können Sie auf der Seite eine unterhaltsame Pseudo-Physik-Sim erstellen, die den Spielern gefällt.
Künstlerisch würde dies Ihnen die Möglichkeit geben, Wasserfallblöcke einzubauen, wenn Wasser in Geländehöhe und dergleichen übertragen wird.
Sie könnten es so machen, dass es sowohl Senken als auch Federn gibt, und vielleicht ist der Rand des Bretts eine natürliche Spüle, sonst würde eine Feder schließlich die Karte überfluten.
quelle