mardi 31 mars 2015

Input/Output Tilemap effizient speichern als Textdatei

Hallo, liebe Java-Menschen! :)



Wie speichert man die Tilemap, das Level eines tile-based Games, effizient?



Das Level in meinem Spiel besteht aus drei Arrays:

- byte[][] blocks,

- byte[][] backgrounds und

- short[][] lights (Beleuchtungswerte von 0 - 255).





Der naive Ansatz war, Savedateien nach folgendem Muster zu erstellen. (Jede Zeile entspricht einer Reihe.)



Muster:

[Block-ID],[Background-ID],[Light-Value]_[Block-ID],[Background-ID],[Light-Value]_ usw.

[Block-ID],[Background-ID],[Light-Value]_[Block-ID],[Background-ID],[Light-Value]_ usw.

Beispiel:

0,1,255_0,1,255_4,2,100_4,2,100

10,5,0_8,1,50_9,5,0_12,5,200



Das ist vom Umfang her natürlich riesig, da jeder Wert als eigentlicher Zahlwert gespeichert wird. Es dauert so natürlich auch Ewigkeiten, Millionen von Tiles in die Textdateien auszugeben.

An einem Versuch, die byte- und short-Werte als chars zu speichern, bin ich gescheitert; es konnten nie die richtigen, vorigen Werte wieder herausgelesen werden. Womöglich lag das an non-printable Characters?





Welche Möglichkeiten der datenverlust-freien Kompression gibt es für solche Form von Levels stattdessen?





Input/Output Tilemap effizient speichern als Textdatei

0 commentaires:

Enregistrer un commentaire