Probleme mit ner kleinen TileEngine
-
Im Prinzip lautet die Antwort genauso wie letztes Mal.
Wofuer genau benoetigt jedes Tile denn ueber 200 Bytes?
-
Das würde mich auchmal interessieren, und wieso sind es eigentlich soviele? ich meine 5000x5000 das wäre selbst bei meiner Auflösung fast 149 Bildschirme in die Breite und 238 in die Höhe, erscheint mir für ein Spielfeld etwas sehr groß.
-
fuer die oberwelt von einem rpg ist das nicht so unglaublich.
-
Müssen es eigentlich Sprites sein? Wenn du nur die Logik-Daten speichern würdest, könntest du den Speicherbedarf sicher enorm reduzieren.
-
Xebov: 5000 mal 5000 Pixel, nicht Tiles
Bei mir hat jedes Sprite automatisch ohne Textur 500KB, muss ich mal ueberpruefen
-
Das macht die Sache ansich noch schlimemr, wenn du 500kb für 50x50 Pixel hast und damit nur 100x100Tiles dann läuft bei dir gewaltig was schief. Wenn man das richtig anstellt kommt man mit den 500kb für alle 10.000 Tiles hin, und zwar Dicke.
-
Wenn du eine begrenzte Auswahl von 50x50-Tiles hast, mit denen du deine Spielwelt zusammensetzt, muust du nur die Indexes von diesen speichern. Ohne Zusatzinformationen kommst du also auf ~40 KB für die Spielwelt (bei einem 16 bit-Typ für den Index).
Beim Anzeigen kommen noch ~10 KB für jedes unterschiedliche Tile dazu.Falls jedes deiner Tiles wirklich einzigartig ist, solltest du immer nur den sichtbaren Teil der Spielwelt (und ein bisschen Rand, damit keine Verzögerungen beim Scrollen auftreten) im RAM halten.
-
Ich kann mir immer noch nicht vorstellen, dass da keine redundanten Informationen gespeichert werden. Versuch wie gesagt, eine Reduktion auf die unmittelbar relevanten Daten vorzunehmen. Sprites nimmst du dann nur für die aktuell gezeichneten Tiles. So sind die meisten Tiles leichtgewichtig.
-
du kannst die menge der Tiles die du im speicher halten musst durch Space Partitioning Algorithmen ganz gut unter kontrolle halten
BSP oder Quadtree sind für zweidimensionelle karten gedacht (karteninfos in 2 dimensionen, 3d karten mit heightmaps sind da z.b. auch enthalten)
Das prinzip von den dingern ist eigentlich sehr simpel, man teilt die karte immer wieder in 2 bzw 4 teile auf bis man eine mindestgröße erreicht hat (oder ein anderes kriterium greift) damit kann man dann ganz leicht die zu ladenden Bereiche minimieren, Kollisionsabfragen machen usw.
Zumindest würde mir jetzt spontan so ein ansatz einfallen
Wiki Quelle:
http://de.wikipedia.org/wiki/Quadtree
http://de.wikipedia.org/wiki/BSP_Tree
-
wenn es nur 5000*5000 pixel sind und er auf 4.8GB kam, hat er sich vermutlich einfach nur verrechnet.
-
5000 mal 5000 = 100 mal 100 Tiles - 10000 Tiles, pro Tile 512 KB macht 4,8GB
Ich hab jetzt mal mit der Engine aus dem Buch von Christian Rousselle ein Sprite erstellt, mit einem Pixel als Textur: 512 KB hatte das Sprite
-
Dann wird den Mist weg und such Dir ne vernünftige Engine. Welche Information an diesem Pixel benötigt denn bitte schön ein halbes Megabyte???
-
512 KB hatte das Sprite
Wie hast Du das festgestellt?
-
ich wuerde mal tippen: taskmanager
-
ich vermute mal stark, dass er für jedes tile eine bitmap, png oder sonstwas neu läd, anstatt nen resource manager zu verwenden.
edit: achso, du hast das gar nich ausprobiert, sondern nur aus diesem einem tile geschlussfolgert? nunja, wenn die engine nicht total stümperhaft ist, verwaltet die iwie, welche bilddateien schon geladen wurden und benutzt nur eine für alle sprites / tiles, die die selbe brauchen. das reduziert die tilemapgröße drastisch.
-
OK, jetzt hab ich das Sprite per "Hand" erstellt, ebenfalls 512 KB
Und es gibt einen Resource Manager
-
kannst du vielleicht hellihjb's frage beantworten?
-
Wenn es einen ResourceManager gibt was ist denn dann alles in deinem Sprite drin? Und vor allem bist du dir sicher das die 500kb nur der Sprite ist und nicht andere Programmteilen davon das eine doer andere Stück gehört?
-
Du hast sie schon erraten, rapso
Ich lad euch morgen mal den Code hoch, dann könnt ihr nachschauen, was da schiefgeht, wenn ihr wollt.
Hab den Code jetzt leider nicht, bin gerade nicht daheim
-
Also wenn er mit Task Manager richtig lag wieso haste dann nicht ein paar Hundert Sprites erstellt und dann mal ne Hochrechnung gemacht wieviel es wirklich ist?