Wie gehe ich mit der isometrischen Kollisionserkennung um?

14

Ich möchte einen isometrischen Run-Jump-Stil-Plattformer erstellen. Der Spieler sollte in der Lage sein, auf Plattformen über dem Boden zu springen, gegen Gegenstände usw. zu stoßen.

Ich verwende eine 2D-Game-Engine, damit ich keine vollständige 3D-Kollision für Dimensionen emulieren möchte, die ich nicht verwende.

Ich denke, Objekte im Spiel sollten mit den folgenden Zeichen platziert werden: X, Y, Breite, Höhe und Z für die Tiefe.

Wie kann ich anhand dieser Werte Kollisionen erkennen?

jdeseno
quelle
Ich weiß, dass dies eine allgemeine Frage ist, aber ich hätte gerne detailliertere Antworten oder Links zu guten Lernressourcen.
Jdeseno

Antworten:

19

2 Optionen:

  • Sie könnten es als 3D-Spiel mit einer festen orthografischen Kamera behandeln. Dann können Sie alle Standard-3D-Spiele-Ressourcen / Bücher / Tutorials / Bibliotheken verwenden. Selbst wenn es in 2D mit Sprites gerendert würde, wäre die Mathematik für Bewegung usw. immer noch 3D hinter den Kulissen. Dies würde Ihnen die genauesten Ergebnisse liefern.

  • Sie können es als 2D-Spiel von oben nach unten mit einer zusätzlichen Eigenschaft height behandeln. Stellen Sie sich zum Beispiel ein 2D-Raster vor, in dem jede Kachel einen Höhenwert hat. Wenn Sie von einem Plättchen auf ein anderes wechseln, lassen Sie einen Charakter nur dann auf ein bestimmtes Plättchen übergehen, wenn die Füße des Charakters über oder gleich der Höhe dieses Plättchens sind, aber wenn sie springen und die Schwerkraft sie auf ein Plättchen fallen lässt lass sie dort bleiben. Mit ein bisschen mehr Arbeit könnten Sie es schaffen, so dass Sie unter Brücken usw. gehen können.

Iain
quelle
4

Es gibt viele Möglichkeiten, dies zu vereinfachen. Wenn Sie beispielsweise keine Ebenen zulassen (z. B. eine Brücke, über und unter der Sie gehen können), können Sie alle Kollisionserkennungen in X / Y-Dimensionen durchführen, wobei Sie die Kollisionsmenge nach Höhe und Tiefe filtern oder höher.

ironfroggy
quelle
2

Wenn das Spiel auf einem rechteckigen Gitter basiert, definiert dieses Gitter Ihre X / Y-Achsen. Und Z kann für die Höhe verwendet werden.

Kollisionen sind dann mehr oder weniger so einfach wie bei jedem 2D-Spiel.

Dann müssen Sie zum Rendern nur noch vom Raster zurück in isometrische Bildschirmkoordinaten konvertieren. Dies ist ziemlich einfach - aber Sie müssen möglicherweise über die Berechnung von Tiefenwerten nachdenken, um sie zu sortieren (Rendern der isometrischen Szene von hinten nach vorne).

Bluescrn
quelle
Die Verwendung von Z für die Größe ist instinktiv, bei 2D-Top-Down-Spielen ist dies jedoch die richtige Vorgehensweise. Dann können Sie den Code zwischen Side-On- und Top-Down-Spielen wiederverwenden.
Iain
2

Beim googeln finde ich diese Demo: http://planetskill.com/iso/

WASD sich zu bewegen. Leertaste zum Springen

Es implementiert nur eine Kollision mit der Auf- / Ab-Achse, aber das Hinzufügen der anderen Kollision sollte einfach sein:

Wenn die Auf- / Ab-Position des nächsten Schritts höher als Ihre Maximalposition ist, bewegen Sie sich einfach nicht. Dies sollte es Ihnen auch ermöglichen, das Springen auf einfache Weise zu implementieren.

Beispielcode hier: http://gist.github.com/478997

NocturnDragon
quelle
2

Alles das oben Genannte. Isometrisch ist nur ein abgeschertes 2D-Raster. Behandeln Sie es also als 2D-Tilemap und überlegen Sie, wie Sie die Tiefe codieren können. Wie würdest du das in einem normalen 2D-Spiel machen (in der Lage sein, hinter oder vor Blöcke zu springen, wenn du springst)? Du würdest entweder eine Tiefe pro Kachel speichern (Tiefenpuffer-> Z-Puffer) oder du würdest mehrere Ebenen verwenden , oder, wenn Sie Lust auf mehr haben, implementieren Sie einen Rückruf per Tiltyp (oder Mapposition) und sind in der Lage, alles zu tun, was Sie wollen, die Tiefe zu überprüfen, die Ausrüstung zu überprüfen, den Player zu bewegen, den Player langsam nach oben zu bewegen und HD zu formatieren.

Kaj
quelle
Gute Antwort, Kaj - das ist der springende Punkt, ich bin überrascht, dass niemand anders darauf eingegangen ist. Dies ist immer das, was Neulinge in Bezug auf die Isometrie in Bezug auf die Physik verwirrt.
Ingenieur
1

Nun, Sie könnten eine separate Kollisionsebene über Ihrem Level haben, die nicht sichtbar ist, und diese verwenden, um nach Kollisionen zu suchen. Sie können diese Ebene auch für mehrere Ebenen verwenden, sofern Sie wissen, auf welcher Ebene sich der Player befindet.


quelle