Implementierung der Draufsichtphysik mit box2D

7

Wie können Physikspiele von oben in Box2D ausgeführt werden? Eine Idee, die ich habe, ist, die Lineargeschwindigkeit eines Objekts manuell einzustellen oder die Linear- und Winkeldämpfung zu ändern, wenn sich mein Objekt über verschiedene Oberflächen bewegt. Befindet sich mein Objekt beispielsweise über einer nassen Oberfläche, wird es weniger linear gedämpft, und wenn es sich über einer rauen Oberfläche befindet, wird es stärker gedämpft. Und um zu sehen, ob mein Objekt über eine Kante gefallen ist, werde ich versuchen, ein zu verwenden AABBund zu überprüfen, ob es noch im Inneren ist, oder manuell zu prüfen, ob object.x > boundary.xusw. Gibt es einen besseren Weg?

Astromaz3
quelle

Antworten:

5

Schauen Sie in b2FrictionJoint nach, um "raue Oberflächen" von oben nach unten zu simulieren. Bewegungsdämpfung sieht nicht so realistisch aus.

Grundsätzlich können Sie Ihre Objekte mit einem Reibungsgelenk an allem befestigen, damit es funktioniert. (Ich befestige sie alle an einem Bodenobjekt, aber es spielt keine Rolle, wie groß oder wo es ist.)

whooops
quelle
3

Wenn Sie einfach die Schwerkraft auf Null setzen, funktioniert die Physiksimulation gut für ein Top-Down-Spiel.

jhocking
quelle
2
Durch Deaktivieren der Gravitation wird Box2D nicht zu einer Top-Down-Physiksimulation. Wie würden Sie Bodenreibung simulieren? Was ist mit einem Auto, das durch Schlamm fährt?
Bummzack
Ich würde das tun, indem ich die Dichte oder Reibung des Autos oder etwas anderes mithilfe von Sensoren für den Schlammbereich ändere. Zugegeben, das ist semantisch hackig, weil dies nicht der beabsichtigte Zweck dieser Funktionen ist, aber es ist eine einfache Möglichkeit, Box2D weiterhin die ganze Arbeit für Sie erledigen zu lassen.
Schockieren
1

Box2D wurde entwickelt, um mit zweidimensionalem Raum zu arbeiten. In einem 2D-Plattformspiel konnten wir unsere Objekte anhand der Basis XY beschreiben:

--------- X
|
|
|
Y

In diesem Spiel gibt es keine Tiefe, ok? Wenn wir dasselbe Spiel mit einer Draufsicht sehen wollen, braucht unser Raum eine dritte neue Dimension Z, um die Tiefe zu beschreiben. Was geschieht? Jetzt haben wir drei Dimensionen, aber Box2D ist in zwei Dimensionen ausgelegt.

Das Spiel kann visuell zweidimensional sein, aber die Logik ist in diesem Fall dreidimensional. (Draufsicht).

Ich denke, das ist besser, wenn Sie eine andere 3D-Physikbibliothek verwenden oder selbst implementieren.

Ich habe noch nie ein Top-View-Spiel mit Box2D gesehen und wäre sehr dankbar, wenn jemand eines kennt.

Momboco
quelle
2
Ich bin nicht der Meinung, dass die "Logik" notwendigerweise 3D sein würde. Bei einem 2D-Spiel ist Z normalerweise nur die Reihenfolge, in der Objekte für visuelle Zwecke gezeichnet werden. Dies muss überhaupt nicht simuliert oder an die Physik gebunden werden.
Brian Ortiz
Ich habe gesagt, dass wir in "diesem Fall" eine dreidimensionale Logik brauchen. Das Z, das Sie gesagt haben, ist keine neue Dimension, es ist nur eine Form, um die relative Reihenfolge zu beschreiben, in der die Sprites gezeichnet werden müssen. (Maler-Algorithmus)
Momboco
In Box2D ist die Y-Koordinate die Höhe (und die, auf die die Schwerkraft angewendet wird). Ich weiß nicht, wie ich das ändern soll, wenn Sie ein Spiel mit Draufsicht wollen. Denn wenn Sie die Schwerkraft verwenden, verlieren Sie eine Dimension und es wird eine dritte Dimension benötigt.
Momboco
3
Hier ist ein Top-Down-Spiel, das Box2D verwendet: Sevengames.com/nitro-racers . Ich weiß das zufällig, weil ich beim Programmieren geholfen habe: P Die Fahrzeugbewegungen sind etwas hackig, mit manueller Einstellung der Rotation, und die Reibung über Gras erfolgt ebenfalls manuell, der Rest (Beschleunigen, Stoßen und Hüpfen, Kollision mit der Umgebung) ) ist reine Box2D.
Bart van Heukelom
Vielen Dank. Ich habe ein paar Fragen. Die Kollision mit der Umwelt führt nur dazu, dass das Auto anhält. Denken Sie, dass der Rebound mit Box2D erreicht werden kann? Die Reibung über dem Gras wird aufgrund einer gewissen Einschränkung von Box2D manuell implementiert. Wenn ich Spiele mit Draufsicht entwickelt habe, habe ich manchmal 3D-Logik mit z für die Höhe verwendet und diesen Wert dann einer Skala zugeordnet (z. B. einem Gehäuse, das von einer Pistole aus gestartet wird). Mit Box2D habe ich nicht gefunden, wie ich damit umgehen soll.
Momboco
0

Wie jhocking sagte, ist es dasselbe mit Box2D für eine Seiten- oder Draufsicht.

Deaktivieren Sie einfach die Schwerkraft und spielen Sie mit den Tiefen mithilfe der Kolisionsfilterung im box2D-Handbuch.

Da es keine Schwerkraft gibt, sind die Objekte beim Schieben "leichter" als normal. Spielen Sie mit den Massen und den Kräften, um gleichwertige Ergebnisse zu erzielen.

Was Sie als Dämpfung bezeichnet haben, sollte die übliche Reibung in Box2D sein, denke ich. und zur Überprüfung der Grenzwerte Ihrer Füllstände gibt es Sensoren. Formen, die dir sagen, wann etwas übergeht :)

Grimshaw
quelle
2
"Da es keine Schwerkraft gibt, sind die Objekte beim Schieben" leichter "als normal": Warum? Ihre Masse hat sich nicht geändert, nur weil die Schwerkraft fehlt.
Alxx
1
Ihre Masse wird sich nicht ändern. Die Schwerkraft hält sie jedoch nicht mehr am Boden. Wenn sie also keine Oberfläche berühren, können sie leichter bewegt werden.
AttackingHobo