2013-02-25 4 views
8

Dies ist eher eine Frage, um einen Rat zu fragen, welches Muster/welchen Ansatz ich verwenden soll. Ich habe einige Untersuchungen zu diesem Problem durchgeführt - mit schlechten Ergebnissen.XNA - Simulierter Schnee

Eigentlich habe ich eine Idee für ein Spiel, in dem die Schlüsselmechanik auf fallendem Schnee - oder, im Falle dieses Ideenspiels - fallenden Partikeln basiert.

Der Schnee/Partikel müssen auf den Bildschirm fallen - aber in Haufen ansammeln. Das Problem ist, ich muss schneien, um die Seiten der Pfähle zu "rinnen", wenn sie bestimmten Winkel sind, und weiter akkumulieren. Es ist möglich, dass sich Löcher unter Schneehaufen öffnen und der Schnee herausfallen muss - denke wie Sand, der durch eine Sanduhr fällt.

Ich habe versucht, das ist Box2d - es ist klar, dass Box2d nicht die richtige Wahl für 10.000 von kleinen Teilchen ist - die für lange Zeit dauern. Box 2D tuckerte ziemlich schnell zu Tode.

Ich habe versucht, 1px Bitmaps auf den Bildschirm zu zeichnen, aber die Verarbeitung von 10.000 Kollisionen jedes Update erwies sich auch als schlecht.

Irgendwelche Ideen würden geschätzt.

Prost

+0

Sie werden wahrscheinlich mit einem 3dMark-Konkurrenten enden ... 10000 persistente Partikel klingen wie ein Job für CUDA trotzdem – Alex

+0

können Sie klären - ist es 2D oder 3D, fällt der Schnee nur durch fallende von oben und welche größe, wenn du bereich spielst? – Stuart

+0

Ich mache ein Kachel-basiertes 2D-Jump'n'Run-Spiel, und wenn ich 200'000 Sprites bei FullHD zeichne gibt es mir 60 Frames pro Sekunde auf dem mittelmäßigen Desktop 2008, also glaube ich nicht, dass 10'000 Sprites davon sein sollten Besorgnis, Sorge. Die Kollisionslogik könnte fehlerhaft sein, was zu schlechten Ergebnissen führt, wie zum Beispiel das OP kann Überprüfungen zwischen allen Schneeflocken durchführen, wenn einige von ihnen zu weit weg sind, um sich für Überprüfungen zu qualifizieren. – user1306322

Antwort

1

Nun, wie Sie gerade entdeckt, wird keine der vorhandenen Bibliothek, die Sie helfen, es sei denn, es ist sehr speziell auf Ihr Szenario ausgerichtet ist. Bei XNA gibt es leider nicht viele Möglichkeiten, und es sieht so aus, als ob keine der vorhandenen Partikelsystembibliotheken die Teilchenphysik unterstützt.

Also müssen Sie selbst eine Menge Arbeit erledigen. In erster Linie müssen Sie an alle Optimierungen denken, die Sie möglicherweise tun können. Wie ein Kommentar sagte, sollten Sie keine Prüfungen zwischen allen Partikeln in jedem Frame ausführen. Sie sollten eine punktbasierte Kollisionsprüfung anstelle der schickeren Sachen verwenden, die normalerweise von Physik-Engines verwendet werden. Sie sollten sicherstellen, dass die Partikel immer die gleiche Größe haben, in diesem Fall (relativ zu einem Referenzkoordinatensystem bedeutet das nicht, dass Sie keinen Zoom haben könnten). Und natürlich müssen Sie so viele Kollisionsschecks wie möglich überspringen - die Partikel, von denen Sie wissen, dass sie in Ruhe sind, sollten nie überprüft werden, wie diejenigen, die benachbarte Partikel auf allen Seiten haben - was mich zu Gittern führt. Vielleicht könnten Sie die gesamte "Welt" als Gitter darstellen und die Logik von diesem Standpunkt aus vereinfachen - so wie es bei Minecraft der Fall ist, würden Sie mir nicht zustimmen?

Wie auch immer, ich weiß, ich bin ein wenig weitschweifig, aber es ist so ein offenes Thema ... :)

1

Ist es möglich zu überwachen, welche Partikel tatsächlich von der Physik-Engine verarbeitet werden? Wenn ja, gibt es eine Möglichkeit, mit der Sie aufhören können, ihre Physik zu verarbeiten, oder streng begrenzen, was verarbeitet wird, wenn ihre Geschwindigkeit weniger als 0,01 oder etwas Ähnliches ist?

Wenn Sie nur die Partikel verarbeiten, die bearbeitet werden müssen, können Sie so viele haben, wie Sie möchten, vorausgesetzt, sie bewegen sich nicht alle gleichzeitig!

Wenn das immer noch ein Problem ist, klingt es nach einer fluiddynamischen Lösung, die passender ist, da die Fluiddynamik im Grunde eine ganze Menge kleiner, sich bewegender Teilchen ist.

Hier finden Sie einige interessante Informationen über 2D-Fluiddynamik:

http://www.ibiblio.org/e-notes/webgl/gpu/fluid.htm

Ihr Physik-Engine bereits enthalten, was Sie brauchen.

+0

Leider - der Schnee ist benutzerinteraktiv - danke für Ihre Antwort :) –

+0

OK, ich habe meine Antwort entsprechend aktualisiert. – rhughes

+0

@DaveBish Wie bist du gekommen? – rhughes