Geeignete Leveldarstellung / Datenstruktur für ein 2D-Platfrom-Spiel?

9

Ich bin dabei, eine Kopie von Mario in Java zu programmieren. Ich denke über 2 Darstellungen / Datenstrukturen für die Ebenen nach, bin mir aber nicht sicher, welche ich wählen soll:

  • Ein 2D-Integer-Array.
  • Ein Quadtree, um das Level in Stücke zu teilen.

Was sind ihre Vor- und Nachteile?

Rama
quelle

Antworten:

9

Der Zweck eines Quadtree besteht darin, große Datenblöcke effizient zu entfernen, sodass Sie nur in unmittelbarer Nähe Zeit mit den Daten verbringen. Ein 2D-Array bietet Ihnen jedoch bereits einen ortsspezifischen Direktzugriff, sodass für ein 2D-Spiel ein Quadtree möglicherweise überflüssig wird. In einem 3D-Spiel können Sie nicht mit einem Array alles lokalisieren, und hier sind Quadtrees (oder besser noch Octrees) praktisch.

Jetzt spreche ich hier über die zugrunde liegende Datendarstellung für die Ebene. Abhängig davon, wie Ihre Grafikarchitektur eingerichtet ist (z. B. 2D-Grafiken mit Ebenen in einer 3D-Engine erstellen), möchten Sie möglicherweise Quadtrees im Szenendiagramm verwenden, um grafische Inhalte effizient zu entfernen.

Und dann vergiss nicht verschiedene Feinde und andere interaktive Objekte in deinem Level. Vielleicht verwenden Sie ein 2D-Array, um die Kacheln des Levels zu verwalten, aber verwenden Sie Quadtrees, um alle interaktiven Elemente zu organisieren (z. B. für eine Physik-Engine).


Stellen Sie sich das so vor: Wählen Sie einen Punkt in Ihrem Level nach dem Zufallsprinzip aus und überlegen Sie, wie viel Arbeit erforderlich ist, um alles innerhalb eines Radius von 1000 Pixel um diesen Punkt herauszufinden. Wenn Sie dies schnell tun können, weil alles nach Standort in einem 2D-Array organisiert ist, benötigen Sie keinen Quadtree. Wenn Sie jedoch alles durchlaufen und die Entfernung jedes Objekts einzeln überprüfen müssten, könnten Sie die Suche mithilfe eines Quadtrees wesentlich effizienter gestalten.

jhocking
quelle