2016-05-06 3 views
-2

Mein Spiel ist eine riesige offene Welt, (arbeiten daran schließlich unendlich), und ich alle Spielobjekte in quadratischen Abschnitten der Karte speichern. Dies ist nur um die Objekte zu ticken/rendern, wenn sich der Spieler in diesem Bereich befindet.Was könnte eine bessere Datenstrukturlösung für meinen Zweck sein? (3rd ArrayList of HashSets)

Um dies zu erreichen ich eine „3D“ bin mit arraylist von hashsets, die erste Liste der „Reihe“, die zweite Liste ist die „Spalte“ und die dritte Liste ist die Liste aller verschiedenen Arten von hashsets sein für die verschiedenen Spielobjekte.

Ich hatte ursprünglich nur eine 2d Arraylist von Hash-Sets mit den Hash-Sets als generische Klasse, und um die Objekte in der richtigen Reihenfolge zu rendern/ankreuzen, würde ich instanceof hinzufügen und sie dann zu einer temporären Liste hinzufügen. Das war sehr langsam.

Ich habe gehört, dass mehrdimensionale Listen verpönt sind. Gibt es einen besseren Weg, um all dies zu erreichen? Bäume, usw.? Ich kann keine regulären Arrays verwenden, da sie in der Größe wachsen müssen.

+0

Ich verstehe nicht genug von Ihren Anforderungen, aber vielleicht hilft es, ein Grif von Arrays zu verwenden? Wenn das aktuelle Array nicht ausreicht, fügen Sie ein weiteres Array hinzu. Verwalten Sie alle Arrays in einer erweiterbaren äußeren Struktur (wie eine Liste). EDIT: Denken Sie daran, die 'ArrayList' könnte Ihnen helfen. Es wächst automatisch und verwendet intern Arrays. –

+0

Ich würde sagen, eine Art Liste oder 'ArrayList', obwohl es keine Möglichkeit gibt, Ihnen wirklich einen Qualitätsratschlag zu geben, ohne mehr über das Spiel zu wissen/was Sie brauchen. – Turtle

+0

@Turtle es wird nicht viel mehr über das Spiel benötigt. Nur Abschnitte der Map, die nur gerendert werden müssen, wenn sich der Player in ihnen befindet, daher die multidimensionalen Listen. Ich kann nicht "nur ein" HashSet "für die Sektion haben, da bestimmte Dinge übereinander gerendert werden müssen (zB müssen Kacheln vor allem gerendert werden). Ich frage mich nur, ob eine 3D-Array-Liste von Hash-Sets viel zu kompliziert für etwas ist, das mit einer anderen Datenstruktur einfacher ausgeführt werden könnte. –

Antwort

1

Klingt so, als müssten Sie auf die aktuelle Position des Players zugreifen.

Ich denke, ein effizienter Weg wäre die Verwendung einer multidimensionalen Karte. Eine gute Implementierung einer multidimensionalen Karte ist Google Guava Table. Suche danach.

Verwandte Themen