Welche chunks im vorraus laden?

A

AS3

Gast
Hallo.
Ich habe eine Welt,
welche aus Chunks besteht.

Jetzt habe ich verschiedene Rechtecke und die Chunks in den Rechtecken sollten immer geladen sein.
Bei den rechtecken, handelt es sich um den Teil der Welt,
den verschiedene Spieler gerade sehen.

Qzbd0


Das rote sind die 'views'.

Das klappt auch wunderbar.
Gerne würde ich jetzt chunks im voraus laden.
Und da weiß ich nicht, wie ich das ganze speichern soll und wie ich raus bekomme,
welche chunks ich schon mal laden soll und welche ich wider freigeben kann.
Momentan speicher ich die geladenen chunks in einer Hashmap, und entlade erst wider, wenn platz gebraucht wird.
Soll heißen ich setze mir eine maximal grenze von 5 geladenen chunks,
und wenn ich den 6. lade, gebe ich den der am weitesten von sämtlichen Views entfernt ist wider frei.

Also, zwei fragen:
1. Wie bekomme ich raus, welche chunks ich im voraus laden kann.
2. Wie sieht am besten meine interne Speicherstruktur aus.

Zu 1. ich habe mir gedacht, quasi 'kreise' um die views zu ziehen, und dann, aus diesen kreisen immer 'random' ein paar chunks zu laden, oder wenn die Performance es zulässt (was sie sollte) immer die nächsten.(Ich überlege schon längere Zeit, und so etwas banales fällt mir natürlich erst beim schreiben ein. Ich als Grafikexperte habe jetzt ~10 Minuten gebraucht, die obere Skizze anzufertigen *grummel* aber eventuell kann mir jemand eine bessere Idee sagen. Ein objektives Auge ist immer gut ;))

AS3
 
F

Firephoenix

Gast
Sinnvoll wäre vermutlich der komplette View-Bereich (kein Spieler will eingefrorene Bereiche ohne irgendwas sehen) und einen Puffer-Bereich um die Views (z.b. noch ein zusätzlicher Chunk in jede Richtung). Hängt aber davon ab wie gut das für dein konkretes Spiel funktioniert und wie schnell du Chunks laden und freigeben kannst, bzw was in den Chunks passiert.

Wie du das intern speicherst ist dann dir überlassen, ich denke eine beste Lösung gibt es bei sowas nicht.
Denkbar wäre besagtes Hashset, oder auch eine Listenstruktur oder eine Verteilung pro Spieler oder vielleicht auch irgend eine Baumstruktur.

Gruß
 

sophismo

Mitglied
Minecraft macht 9x9 um den Spieler, es kommt halt sehr darauf an, wie groß deine Chunks sind und vor allem natürlich auch, wie schnell ein Spieler einen durchwandern kann..
Chunk ? Minecraft Wiki.

Allgemein kannst du alles von Nutzern erreichbares vorladen, oder? Was nicht erreichbar ist, brauchst du im Moment nicht. Unter der Annahme, dass Spieler nicht "springen" können, ist also jeder angrenzende Bereich interessant. - Manchmal sieht man den Wald vor Bäumen nicht, hoffe das hilft irgendwie.
 
A

AS3

Gast
Hm,
da hatte ich wohl gestern ein Brett vorm Kopf.
Vielen Dank für eure Beiträge.
Jetzt ist das Brett weg :D

AS3
 

Empire Phoenix

Top Contributor
Ich empfehle noch WeakReferences / bzw deren hashmaps anzugucken. Warum chunks entladen solange noch ram da ist, kann ja durchaus sein das da nen spieler mal wieder reinwill?
 
F

Firephoenix

Gast
Ich empfehle noch WeakReferences / bzw deren hashmaps anzugucken. Warum chunks entladen solange noch ram da ist, kann ja durchaus sein das da nen spieler mal wieder reinwill?

Eine Alternative dazu wäre eine Art "überlauf" für Chunks einzurichten und Chunks vor dem Dereferenzieren erstmal dort "aufzuheben". Beim Laden schaut man dann einfach vorher nach ob der Chunk bereits im Überlauf vorhanden ist was entsprechend schnell gehen sollte.
Und durch die größe des Überlaufs begrenzt man die Anzahl nicht direkt mit dem Ram sondern kann das ganze schon auf Programmebene steuern.

Gruß
 

Marco13

Top Contributor
Hat mich ein bißchen an http://www.java-forum.org/codeschni...-asynccache-asynchron-nachladender-cache.html erinnert - aber passt wohl nicht ganz.

In Guava sind aber auch die Sachen, die man braucht, wenn man NICHT per Hand mit WeakReferences (bzw. in diesem Fall vielleicht auch SoftReferences) rumhantieren will: Eben der Cache, der auch Einträge "vergessen" kann - und das automatisch (!) macht, sobald der Speicher knapp wird, oder auf Basis anderer Kriterien. Aber man kann auch (eventuell eben aufbauend auf einen Guava Cache) die Verwaltung selbst in die Hand nehmen, um sicherzustellen, dass immer die benötigten Tiles geladen sind. Auf jeden Fall kann man mit den Guava Caches sehr elegant solche Sachen machen, die etliche hundert oder tausend Zeilen (und vieeel debugging ;) ) erfordern würden, wenn man sie selbst machen wollte.

Um rauszufinden, was demnächst geladen werden muss ... wüßte ich jetzt kaum etwas anderes, als die Bewegungsrichtung des Spielers zu betrachten, und schonmal die Tiles zu laden, die in dem "Kegel" liegen, der durch die aktuelle Bewegungsrichtung und leichte Abweichungen davon beschrieben wird.
 
A

AS3

Gast
Ich habt mir sehr geholfen.
Wenn man jetzt zur laufzeit ein 'Bild' macht, sieht das ungefähr so aus:
nisw2wyc.png

(4px = 1chunk)

Das rote sind die aktuell gebrauchten chunks.
Das blaue die, welche im 'buffer' liege.
Die grünen die, welche im Catch liegen.
Ich werde den Catch aber noch verkleinern, denn so groß macht er keinen Sin.

(ich würde das ganze gerne veröffentlichen, aber... wie das so ist. Tut mir Leid)

AS3
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Welche packages aus der java api doku ist hilfreich zur Android Spieleprogrammierung Spiele- und Multimedia-Programmierung 2
D Java Webgame, welche Frameworks oder Techs sind von Nöten? Spiele- und Multimedia-Programmierung 5
P [Spiel]Welche Bilder sind gleich Spiele- und Multimedia-Programmierung 2
V welche vorgehensweise beforzieht ihr bei einfachem Quizz Spiel ? Spiele- und Multimedia-Programmierung 4
T Welche OpenGL-Version soll ich verwenden? Spiele- und Multimedia-Programmierung 2
R Savegame als Datei, welche API-Klasse benutzen Spiele- und Multimedia-Programmierung 8
J Welche Tutorials, Projekte, Libraries, etc? Spiele- und Multimedia-Programmierung 7
P Erkennen auf welche Objekte gezeigt wird in JoGL Spiele- und Multimedia-Programmierung 6
morkuzz Grafische Oberfläche für Schachprogramm - Welche? Spiele- und Multimedia-Programmierung 6
F Welche middleware? Spiele- und Multimedia-Programmierung 6
G Welche Game Api Spiele- und Multimedia-Programmierung 9
Y Applet für "Vier Gewinnt": Welche Klassen verwende Spiele- und Multimedia-Programmierung 10
X Welche 3D-Software Spiele- und Multimedia-Programmierung 6
Quaxli Welche Grafiksoftware nutzt Ihr für 2D-Spiele? Spiele- und Multimedia-Programmierung 6
S Welche Klassen für ein 4 Gewinnt? Spiele- und Multimedia-Programmierung 6
M Welche ist die beste Java3D-Engine Spiele- und Multimedia-Programmierung 15
I 2D-Side-Scrolling-Game in Chunks splitten Spiele- und Multimedia-Programmierung 9

Ähnliche Java Themen

Neue Themen


Oben