Sie könnten stattdessen eine Datenbank verwenden - PostgreSQL verfügt über einige spezielle Indizierungsfunktionen, die für diese Art von Daten optimiert sind, die sich anhand der X- und Y-Koordinaten befinden. Sie können auch festlegen, dass sich die zurückgegebenen Daten nicht in einem quadratischen oder rechteckigen Bereich, sondern in einem bestimmten Radius befinden.
PostgreSQL (kostenlos und Open Source)
http://www.postgresql.org/
Es gibt auch andere Datenbanken, und für die Client-Seite sind bestimmte Typen möglicherweise besser geeignet, da sie eigenständig ausgeführt werden können (initiiert von Ihrer Game-Client-Anwendung) oder als Teil einer Codebibliothek enthalten sein können dass Sie "nur verwenden können." Der Vorteil ist, dass Sie kein Indizierungsschema entwerfen müssen, da die meisten SQL-Datenbank-Engines dies bereits recht gut können.
Ein Vorteil des Datenbankansatzes besteht darin, dass Sie Ihre Blöcke verkleinern können (oder Blöcke vollständig entfernen und nur Kacheln direkt verwenden, aber die Verwendung von mindestens kleinen Blöcken / Gruppen von vielen Kacheln kann je nach Ihrem Design effizienter sein). Verwenden Sie dann die SQL-Abfrage, um einen größeren Bereich einzublenden, als angezeigt werden kann. Durch das Vorladen, um nicht sichtbare Bereiche in der Nähe zu überlappen, können die Kacheln vorbereitet werden, bevor der Spieler seinen Charakter bewegt, was zu einem besseren (hoffentlich reibungsloseren) Spielerlebnis führt.
Ich habe bemerkt, dass einige Spiele einen "Cache" der Kartendaten auf der lokalen Festplatte speichern, nachdem sie diese zum ersten Mal abgerufen haben (dies ist zweifellos dazu gedacht, die Netzwerk-E / A zu reduzieren), wie zum Beispiel Ashen Empires:
Ashen Empires (kostenlos spielbar, wunderschöne 2D-Implementierung)
http://www.ashenempires.com/
Das Verfolgen von "zuletzt aktualisierten" Zeitstempeln mit jedem Block / jeder Kachel ist auch hilfreich, da die SQL-Abfrage, wenn lokal gespeicherte Daten verfügbar sind, eine zusätzliche Klausel "WHERE timestamp_column> $ local_timestamp" enthalten könnte, sodass nur aktualisierte Blöcke / Kacheln abgerufen werden heruntergeladen (zwei Vorteile, die durch das Einsparen von Bandbreite entstehen, sind geringere Verbindungskosten und eine geringere Verzögerung für Ihre Spieler, was sich mit zunehmender Beliebtheit Ihres Spiels noch deutlicher bemerkbar macht).
Ein Screenshot von Ashen Empires (ein paar Charaktere sind in einer örtlichen Bank und so wie diese Knochen auf dem Boden aussehen, sehen sie aus, als wären ein paar Skelettmonster hereingewandert und wurden wahrscheinlich von den Wachen der örtlichen Stadt geschlachtet):