Grosse Tilemaps

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

amon

Betreff: Grosse Tilemaps

BeitragFr, Aug 15, 2008 20:08
Antworten mit Zitat
Benutzer-Profile anzeigen
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?)

Xeres

Moderator

BeitragFr, Aug 15, 2008 21:47
Antworten mit Zitat
Benutzer-Profile anzeigen
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

amon

BeitragSa, Aug 16, 2008 11:38
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Xeres

Moderator

BeitragSa, Aug 16, 2008 14:33
Antworten mit Zitat
Benutzer-Profile anzeigen
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Ava

Gast

BeitragSa, Aug 16, 2008 14:50
Antworten mit Zitat
Eben ... bau Dir eine Hilfs-Funktion, um die Bilder zu laden ..

Arrow map_image:TImage[x, y] = add_map_image:TImage(file:string)

Arrow die Funktion geht nun eine Liste durch, in der (in einem entsprechenden Type dafür) file und image gespeichert sind
Arrow die Funktion vergleicht die Einträge mit dem File-String
Arrow findet die Funktion einen passenden Eintrag Arrow gibt sie das Image zurück
Arrow wird kein passender Eintrag gefunden Arrow image laden und zusammen mit dem File-String in einem Objekt speichern, in die Liste einfügen ... und dieses neugeladene Image zurückgeben

und fertisch... Cool


[/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 Rolling Eyes ... und mit einem Offset musst Du ohnehin arbeiten, wenn die Tile-Positionen in den Minusbereich gehen, da ein Array-Index nicht im negativen Bereich liegen kann ... Exclamation

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group