Grosse Tilemaps
Übersicht

![]() |
amonBetreff: Grosse Tilemaps |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie hält man am besten grosse Tilemaps im Speicher?
Paar Eckdaten: - Daten kommen aus einem Browsergame, werden aus html Files die im IE Cache liegen herausgeparsed. - Pro tile gibt es einen Typ der folgende Daten speichert: - x, y - bildpfad und name layer 1 (string) - bildpfad und name layer 2 (string) - letzter zeitpunkt der aufnahme (wxDateTime) - Dimension: ca. 5000 x 5000 Felder wobei aber nur ein Bruchteil wirklich belegt ist. Frühere Implementierungen haben mir einen relativ hohen Speicherverbrauch gezeigt in dem ich einfach so ein großes Array initialisiert habe. Mein jetziger Ansatz ist der, dass ich einen TMap verwende - und aus den beiden short x,y koordinaten einen int key generiere, den in einen string caste und als key für die TMap verwende. Meint ihr das wird effizient genug sein? (speichersparender und trotzdem relativ schnell im zugriff?) |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Statt den Bildpfad für jeden Tile extra zu speichern und womöglich das Bild zu laden, würde ich eher alle bilder ein mal global laden und dann nur noch anzeigen (wenn es im sichbereich ist). Für Leere Felder in der Map müsste man noch nicht mal einen neuen Type erzeugen. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
amon |
![]() Antworten mit Zitat ![]() |
---|---|---|
dazu hätte ich mir gedacht, dass ich zuerst die map lade. aus den daten der tilemap generiere ich eine weiter tmap welche die einzelnen bilder drinnen hat - value ist dann das timage, key ist dann der jeweilige pfad - so bin ich dann flexibel gegenüber grafikänderungen (da kommt ab und an was dazu und weg)
was mich noch ein wenig stört ist, dass short unsigned ist - ich aber kooridinaten haben die auch ins negative gehen. werd ich mir wohl einfach einen offset festlegen |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn du 5000 x 5000 x 2 Layer = 50 Mio. mal einen Pfad zum Bild speichern willst, find ich die Methode etwas fragwürdig. Beim einlesen würde ich eine Liste von allen Bildern anlegen und in den Types dann nur eine Zahl als Verweis darauf speichern. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Eben ... bau Dir eine Hilfs-Funktion, um die Bilder zu laden ..
![]() ![]() ![]() ![]() ![]() ![]() ![]() und fertisch... ![]() [/edit] anstatt mit einem Extra-Objekt, kannst Du das natürlich auch mit zwei Arrays machen ... ist dann aber etwas umständlicher zu verwalten ... [/edit2] ich verstehe übrigens nicht, wozu Du die Position extra speichern willst. Wenn Du die Karte in einem Array speicherst, dann hast Du doch die Positionswerte doch bereits schon automatisch. Map[130,67] = Positon = 130, 67 ![]() ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group