Platzsparende Alternative zu .txt-Dateien

Faberix

Mitglied
Hallo

Ich suche ein passendes Dateiformat um Levels für mein Jump and Run zu speichern. Im Moment benutze ich Textdateien, aber die fressen ziemlich viel Speicherplatz und ich will die Anwendung möglichst klein halten.

Die Level-Textdateien sind wie folgt aufgebaut:
[Abkürzung für das Objekt]:[x],[y],[optionale zusätzliche Parameter]

Das Dateiformat sollte auch auf Android lesbar sein, da ich später eine Android-Version des Spiels programmieren will.

Danke im Voraus für die Antworten
MFG, Faberix
 

Major_Sauce

Bekanntes Mitglied
Txt-Dateien sollten normalerweise nicht all zu groß sein, du solltest dir auf jeden Fall Methoden anschauen wie man Maps verpacken kann.
Da gibt es so ziemlich viele platzsparende Möglichkeiten. (Zumindest bei bestimmten "Map-Arten".

mfg Major_Sauce
 

InfectedBytes

Top Contributor
Falls du die die einzelnen Einträge als Strings formatiert in die Datei schreibst, könntest du dir überlegen ein Binärformat zu nutzen.
Dann kann man die Textdateien zwar nicht mehr in einem einfachen Texteditor lesen, aber dafür sparst du halt platz.

Falls deine "Abkürzung für das Objekt" ein String ist, könntest du diesen auch noch durch eine ID ersetzen (ob short oder int hängt davon ab wieviele IDs du benötigst)
 

RalleYTN

Bekanntes Mitglied
du kannst deine x und y koordinaten in einem ASCII buchstaben speichern, dass machst du mit (char)x.
wenn x jetzt 34 wäre, dann würde in der Datei " stehen. wenn du viele x und y koordinaten hast, dann sollte das extrem viel platz sparen.
 

CSHW89

Bekanntes Mitglied
Wie groß sind denn die Levels so durchschnittlich, und wie viele Objekte sind pro Level vorhanden. Vor allem auf das Verhältnis kommt es an. Sagen wir b ist die Breite und l ist die Länge des Levels. Wenn die Anzahl der Objekte sehr hoch ist, also nah an b*l, dann sollte man eine andere Speicherart versuchen. Statt immer ObjektID,x,y zu speichern, kann man die Koordinaten weglassen, indem man der Reihe nach nur die ObjektID speichert. Also ObjektID_an_0_0, ObjektID_an_0_1, ObjektID_an_0_2 usw. bis ObjektID_an_b_l. Dann gibts noch ne spezielle ObjektID für "kein Objekt". Zusätzlich kann man dann die ID binär speichern, wie es meine Vorredner bereits erklärt haben.

lg Kevin
 

Faberix

Mitglied
Die Levels haben normalerweise eine Breite von 50000 Pixeln. Für jeden soliden Pixel und jede Entity wird ein Eintrag gemacht. Es sind also ziemlich grosse Textdateien. Früher speicherte ich die Levels als PNG, es ging allerdings sehr lange, bis ein Level geladen war. Wenn ich also die Methode von CSHW89 anwenden würde, hätte mein Spiel wieder zu lange Ladezeiten, da ja jeder einzelne Pixel vermerkt werden müsste. Wahrscheinlich würde die Datei wegen der vielen zusätzlichen Einträgen eher grösser werden als kleiner.

@RalleYTN: Für die Levelbreite reichen die ASCII-Zeichen leider nicht.
@Major_Sauce: Kannst du ein Beispiel für ein Map-Dateiformat machen? Man sollte nicht jeden einzelnen Pixel durchgehen müssen.
@InfectedBytes: IDs für die Objektarten ist eine gute Idee. Mit Binärformaten kenne ich mich leider nicht so aus, könnte mir das jemand erklären oder einen Link zu einem guten Tutorial geben?
@MrTrouble: Es wäre etwas umständlich, jede einzelne Datei in eine eigene Zip-Datei zu packen, aber ich könnte mir überlegen, den ganzen Levelordner in ein Zip zu packen, allerdings nur, wenn es keine bessere Lösung gibt.

Ich habe gerade gemerkt, dass die Dateien in der jar komprimiert werden. Weiss jemand, ob die Dateien bei einer Android-App auch komprimiert werden?

mfg, Faberix
 

InfectedBytes

Top Contributor
Für jeden soliden Pixel machst du einen Eintrag? Ist das denn nötig?
Wenn ich jetzt mal von einem "normalen" Jump&Run ausgehe, besteht jedes Level aus verschiedenen Balken (auf die man Springen kann) und verschiedene Gegner.
In so einem Fall würde man einfach nur Position + Ausmaße der Balken, sowie Position und Typ der Gegner speichern.

Kann sein das ich dich falsch verstanden habe, aber für mich klingt es so, dass du jeden Pixel eines Balkens in der textdatei speicherst, das ist natürlich extrem verschwenderisch.
 

Faberix

Mitglied
Du hast mich falsch verstanden ;)
Ich speichere nur den obersten und den untersten Pixel für jede X-Koordinate der Balkens. Das ermöglicht es mir, die Levels frei zu zeichnen und somit habe ich so viel mehr Spielraum beim Leveldesign.
 

InfectedBytes

Top Contributor
Ok, schon etwas besser^^
Aber auch das ist noch etwas ineffizient. Für einen 100 Pixel langen Balken benötigst du auch hier schon 200 Einträge. Vermutlich hat ein Balken auch mal längere gerade Abschnitte. Wenn dem so ist, kannst du einen Balken auch einfach als Polygon auffassen.
D.h. du speicherst nur die signifikanten Punkte, welche anschließend mit Linien verbunden werden.

Außerdem ist die Frage ob du diesen Spielraum überhaupt benötigst. Vielleicht reichen dir ja auch einfach 20 verschiedene Balken.
In einer Datei speicherst du dann diese 20 verschiedenen Balken (zusammen mit eindeutigen IDs) ab und in deiner Leveldatei speicherst du nur Position und ID des zu nutzenden Balkens.
 

Faberix

Mitglied
Ich denke, auch wenn ich den Spielraum nicht ganz ausnütze, bin ich immer noch schneller beim Level erstellen, wenn ich einfach frei zeichnen kann, weil ich dann nicht so viel das Tool wechseln muss. Das mit den geraden Strecken werde ich mir mal überlegen. Falls die Levels in Android-Apps sowieso komprimiert werden hat sich das Problem erledigt, denn dann macht es ja nicht mehr so viel aus, wie viele Zeichen die Textdatei enthält.
 

RalleYTN

Bekanntes Mitglied
Du könntest auch 5000 ID's lange ketten in eine zeile packen. So hätte jede ID beispielsweise 3 oder 4 zeichen. Alles in der obersten zeile hat die y koordinate 0 und jeder 3 oder 4 zeichenblock in der zeile hätte dann die entsprechende x koordinate. Ich werde mal ein beispiel programmieren und es später verlinken.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T "Platzsparende" und "schnelle" Indizes erzeugen Allgemeine Java-Themen 10
F Gibt es mittlerweile eine Alternative zu DaisyDiff Allgemeine Java-Themen 2
F Streams als Alternative für dieses Problem ? Allgemeine Java-Themen 15
Zrebna Alternative Darstellung eines Codesnippets Allgemeine Java-Themen 33
W Alternative für Threads Allgemeine Java-Themen 6
Thallius Alternative für SwingWorker Allgemeine Java-Themen 5
J Suche Alternative zu Jasper Reports Allgemeine Java-Themen 4
M Suche Alternative zu JFreeChart Allgemeine Java-Themen 11
D Konstruktor - jedes Objekt einzeln erzeugen - alternative? Allgemeine Java-Themen 8
M DAOs veraltet - was ist die Alternative? Allgemeine Java-Themen 13
MiMa Array umbau oder Alternative? Allgemeine Java-Themen 5
C Alternative zu NetworkX in Java Allgemeine Java-Themen 1
M Alternative zur Serialisierung.. Protobuf? Allgemeine Java-Themen 9
B Alternative zu nebenläufigen Prozessen Allgemeine Java-Themen 4
BonoBoo Alternative zum endlosen Instanzieren Allgemeine Java-Themen 2
E Gewollte Endlosschleife unterbrechen oder Alternative gesucht Allgemeine Java-Themen 2
F Alternative sun.jdbc.odbc.JdbcOdbcDriver (Access Datenbank) Allgemeine Java-Themen 2
F alternative zu "JPEGImageDecoderImpl" Allgemeine Java-Themen 2
T Timer oder Alternative? Allgemeine Java-Themen 3
G Alternative zu .properties Dateien Allgemeine Java-Themen 20
S Alternative zu SortedMap? Allgemeine Java-Themen 8
H Alternative zu Stack Allgemeine Java-Themen 3
pikay Jar2Exe Alternative? Allgemeine Java-Themen 17
E javax.comm: Suche eine open source Alternative zu rxtx Allgemeine Java-Themen 8
H Alternative if Schreibweise mit ? Allgemeine Java-Themen 10
G suche Property alternative Allgemeine Java-Themen 4
H Wie schön oder unschön ist dieser code - alternative ? Allgemeine Java-Themen 5
E Viele if Abfragen auf viele Strings --> Alternative zu if Allgemeine Java-Themen 8
G libext Alternative? Allgemeine Java-Themen 5
S Alternative zu Robot (wegen Umlauten) Allgemeine Java-Themen 13
foobar Alternative zu JavaHelp gesucht Allgemeine Java-Themen 2
I Alternative zu getClass().getResourceAsStream() ? Allgemeine Java-Themen 9
D System.setProperty alternative Allgemeine Java-Themen 4
J alternative zu rsh ? Allgemeine Java-Themen 5
K KeyListener-Alternative ohne anfängliches Delay ? Allgemeine Java-Themen 5
G Alternative zu split() Allgemeine Java-Themen 3
K Alternative zu JNI Allgemeine Java-Themen 3
P Alternative zu replaceAll (jdk < 1.4) Allgemeine Java-Themen 14
M Alternative zu Thread : stop() ? Allgemeine Java-Themen 10
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
G Dateien lesen Allgemeine Java-Themen 3
OnDemand Unterschiedliche jar Dateien zusammen führen Allgemeine Java-Themen 8
A Sicheres Löschen von Dateien Allgemeine Java-Themen 7
O git ignore für Intellji braucht es die .idea Dateien? Allgemeine Java-Themen 8
Master3000 Dateien zwischen verschiedenen Netzwerken senden Allgemeine Java-Themen 17
L Jar Dateien in Classpath laden ab JDK 9+ Allgemeine Java-Themen 11
d.lumpi JDA eclipse dateien versenden Allgemeine Java-Themen 4
O Produziert das Tool "jpackage" (ab JDK 14) .exe Dateien, die auf einer Zielumgebung ohne JRE lauffähig sind ?` Allgemeine Java-Themen 7
O Wie kann ich in Apache POI (Excel Dateien schreiben) Datumszellen in Excel erzeugen Allgemeine Java-Themen 6
T Meine Frage lautet wie ich 2 CSV Dateien miteinander in Java verbinde und Spalten die zueinander gehören durch den gleichen Key zusammen ausgebe? Allgemeine Java-Themen 5
L Dateien richtig auslesen Allgemeine Java-Themen 6
L Eclipse Runnable Jar mit Dateien Allgemeine Java-Themen 8
W Server-Thread schreibt nicht alle Dateien Allgemeine Java-Themen 6
MiMa Logging mit log4j2 in verschiedene Dateien? Allgemeine Java-Themen 22
I Klassen aus Jar-Dateien aus anderem Ordner laden Allgemeine Java-Themen 3
O jar und EXE Dateien, Pfade zur Laufzeit Allgemeine Java-Themen 1
W Dateien werden nicht gelöscht - warum? Allgemeine Java-Themen 12
B Dateien / Bilder von "webapp" Ordner bekommen? Allgemeine Java-Themen 1
P Erste Schritte Dateien löschen Allgemeine Java-Themen 4
H Erste Schritte Ausführbare Dateien lassen sich nicht starten Allgemeine Java-Themen 5
I Java als exe veröffentlichen inkl. kompletter Dateien Allgemeine Java-Themen 4
M Drucken von Dateien Allgemeine Java-Themen 10
J jar Dateien unter Windows 7 mit spezifischer jdk öffnen Allgemeine Java-Themen 2
I Laden von Informationen aus Dateien: Austauschbarkeit: 2 Dateien sinnvoll? Allgemeine Java-Themen 2
N Temporäre Dateien Allgemeine Java-Themen 3
Bluedaishi Druck Probleme mit PDF dateien Allgemeine Java-Themen 4
M Dateien schneller kopieren Allgemeine Java-Themen 1
M Dateien nach kopieren vergleichen Allgemeine Java-Themen 9
Arif Input/Output Dateien im Jar-Programm speichern Allgemeine Java-Themen 12
D Collections.sort funktioniert nicht in exportierten .class Dateien Allgemeine Java-Themen 10
K Große JSON-Dateien schnell und effizient verarbeiten Allgemeine Java-Themen 16
J Programm zum Download von CSV-Dateien Allgemeine Java-Themen 4
V Eclipse .class Dateien Allgemeine Java-Themen 9
B Download von dateien Allgemeine Java-Themen 2
K Nicht alle class-Dateien im JRE? Allgemeine Java-Themen 2
MiMa Log4j in Dateien mit eigenem Namen schreiben Allgemeine Java-Themen 3
D Kopieren von Dateien aus einem Ordner in einen anderen Allgemeine Java-Themen 6
C Dateien in Jar aufrufen Allgemeine Java-Themen 14
X NetBeans Bilder und andere Dateien ins .jar schreiben und wieder aus .jar lesen Allgemeine Java-Themen 6
JavaWolf165 Externe .jar-Dateien in .jar-Datei intigrieren Allgemeine Java-Themen 0
X Dateien für Benutzer Sperren Allgemeine Java-Themen 4
D Dateien aus den Internet herunterladen Allgemeine Java-Themen 6
L Methoden Dateien älter als 30 Tage? Allgemeine Java-Themen 11
J .exe Dateien werden nicht gestartet obwohl Pfad richtig Allgemeine Java-Themen 6
RalleYTN Classpath Native Dateien(DLL, SO, JNILIB) Allgemeine Java-Themen 2
J Java .jar Dateien zusammenführen Allgemeine Java-Themen 1
L Best Practice Log Dateien analysieren und eventuell passende Daten am Chart darstellen Allgemeine Java-Themen 1
X Dateien von der Jar zum Ordner kopieren. Allgemeine Java-Themen 4
Ananaskirsche Input/Output Dateien im Ordner Allgemeine Java-Themen 8
A Input/Output Liste der Dateien in einem Ordner in einer Jar Datei erhalten Allgemeine Java-Themen 11
X Herunterladen von Dateien aus dem Internet Allgemeine Java-Themen 2
V Input/Output Sound Dateien aus Jar laden Allgemeine Java-Themen 18
M Dateien aus einem Verzeichnis auf einem Server auflisten Allgemeine Java-Themen 5
H PDFBox akzeptiert Dateien nicht Allgemeine Java-Themen 1
B Java - einlesen von Dateien und herausschneiden von XML Dokumenten Allgemeine Java-Themen 5
A Input/Output Spätes Schreiben von Dateien der JVM Allgemeine Java-Themen 3
M Zwei unterschiedliche JAR Dateien mit ANT erstellen Allgemeine Java-Themen 8
Thallius Dateien Zippen und wieder heraus lesen? Allgemeine Java-Themen 4
T Dateien zur Laufzeit in Java-Programm packen? Allgemeine Java-Themen 3
Maxim6394 Jar Dateien starten nicht Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben