Es gibt verschiedene Möglichkeiten, die Daten für ein Spiel mit Blöcken wie Minecraft zu speichern.
Ich glaube, Minecraft macht die Welt in den 16x16x256 Chunks. Die Blöcke um den Spieler werden in den Speicher geladen, wenn der Spieler das Spiel startet, und ein Hintergrund-Thread wird mehr geladen, wenn Sie herumlaufen. Hier ist ein Video, das es zeigt: http://www.youtube.com/watch?v=oR_ZdJH9eho .
Eine andere Möglichkeit besteht darin, die Welt in einen Octree zu zerlegen. Michael Goodfellow schrieb einen Blog über die Implementierung einer Cube-Welt mit dieser Datenstruktur: http://www.sea-of-memes.com/LetsCode1/LetsCode1.html . Das Octree ist schön, weil es Ihnen eine eingebaute Komprimierung bietet, aber es wird wahrscheinlich etwas schwieriger sein, mit einem Array zu arbeiten.
Über die "nur benötigten im Gedächtnis behalten?" Dies ist etwas schwieriger, da Sie fragen müssen, was "benötigt" wird. Wenn Sie NPCs haben, die in einem anderen Teil der Welt mit KI leben, die mit der Umgebung interagiert, dann "brauchen" Sie viel mehr von der Welt, um im Gedächtnis zu bleiben. Voxel-Weltdaten können sehr schnell sehr groß werden. Versuchen Sie daher am besten, die geringstmögliche Menge im Speicher zu behalten. (IE, haben nur NPCs in der Nähe des Spielers).
Die Grafik-Engine "benötigt" jeden Block, der nicht vollständig von anderen nicht transparenten Blöcken umgeben ist. Die übliche Methode zum Rendern der Welt besteht darin, ein einzelnes Netz zu erstellen, das die Eckpunkte für jeden sichtbaren Block enthält. Das Zeichnen ist viel schneller, da Sie nur einen Aufruf der Zeichenmethoden für 65.536 Blöcke (in Blöcken in Minecraft-Größe) ausführen. Da die Grafik-Engine dieses Netz erstellen muss, muss sie im Allgemeinen alle Würfel in einem Block kennen. Beachten Sie, dass aus diesem Grund ein Großteil der Welt unsichtbar ist, wenn Sie in Minecraft durch den Boden sehen. Dies liegt daran, dass jeder Block, der auf allen sechs Seiten umgeben ist, übersprungen wird. Ich glaube, Minecraft reduziert auch die Anzahl der Eckpunkte, indem horizontale Seiten derselben Art von Textur in einem Feld kombiniert werden, wobei sich die Textur wiederholt.
Mein Rat wäre, mit den 16x16x256 Brocken zu gehen. Speichern Sie sie in einem Array, da Sie aufgrund des Aufbaus der Netz- und Spiellogik (Kollisionserkennung, Hinzufügen / Entfernen von Blöcken usw.) eine schnelle Iteration und Bearbeitung benötigen. Laden Sie dann so viele Brocken wie möglich in einem Kreis um den Player. Skalieren Sie die Anzahl der Blöcke für bessere oder schlechtere Computer nach oben oder unten.
Das Laden von Chunks wird die Leistung erheblich beeinträchtigen. Fügen Sie es daher in einen Thread ein, der es im Laufe der Zeit ausführt. Stellen Sie sicher, dass Sie 3 neue Chunks vollständig laden können, während ein Spieler von einem Ende eines Chunks zum anderen läuft.