Dies ist eher eine Frage, um einen Rat zu bekommen, welches Muster / welchen Ansatz ich verwenden soll. Ich habe einige Untersuchungen zu diesem Problem durchgeführt - mit schlechten Ergebnissen.
Im Wesentlichen habe ich eine Idee für ein Spiel, bei dem die Schlüsselmechanik auf fallendem Schnee - oder bei diesem Ideenspiel - auf fallenden Partikeln basiert.
Der Schnee / die Partikel müssen über den Bildschirm fallen - sich 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 winzigen Teilchen ist - die für längere Zeit dauern. Box 2D tuckerte ziemlich schnell zu Tode.
Ich habe versucht, 1px-Bitmaps auf den Bildschirm zu ziehen, aber bei der Verarbeitung von 10.000 Kollisionen erwies sich auch jedes Update als schlecht.
Irgendwelche Ideen würden geschätzt werden.
Prost
Nun, genau wie du herausgefunden hast, wird keine existierende Bibliothek dir helfen, wenn sie nicht speziell auf dein Szenario zugeschnitten 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.
Sie müssen also viel selbst arbeiten. 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önntest du die gesamte "Welt" als Gitter darstellen und die Logik von diesem Standpunkt aus vereinfachen - so wie es Minecraft tut, stimmst du mir nicht zu?
Wie auch immer, ich merke, dass ich ein bisschen herumwühle, aber es ist so ein offenes Thema ...:)
Ist es möglich zu überwachen, welche Partikel tatsächlich von der Physik-Engine verarbeitet werden? Wenn ja, gibt es einen Weg, auf dem Sie die Verarbeitung ihrer Physik stoppen oder die Verarbeitung stark einschränken können, 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 Fluiddynamik im Grunde eine ganze Menge kleiner, sich bewegender Teilchen ist.
Hier finden Sie einige interessante Informationen zur 2D-Fluiddynamik:
Ihre Physik-Engine enthält möglicherweise bereits, was Sie brauchen.
Tags und Links c# xna game-physics