Frage von hdhdhddedede, 45

wie lese ich eine leveldatei aus den assets bei libgdx?

ich moechte ein rpg mit libgdx fuer android programmieren und wollte die leveldaten in den assets ordner speichern z.B. als .txt datei fine aber im internet nur tutorials fuer zb bilder aber nicht fuer andere dateien (wollte die datei in einen string schreieben und von dort aus dan die welt laden

danke im vorraus

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von Springrbua, 25

In Libgdx gibt es die sogenannten FileHandles. Diese werden in verschiedene Typen unterteilt:

- Classpath: Werden direkt in das Jar/Apk gepackt und sind read-only

- Internal: Pfad im Root-Ordner der Applikation (Desktop) bzw. innerhalb der Assets (Android). Fallback auf Classpath Filehandle. Files sind read-only.

- Local: Pfad im Root-Ordner der Applikation (Desktop) bzw. privater Applikationsspeicher (Android). Sollte beschreibbar sein, soweit ich weiß.

- External: SD-Card-Root (Android) bzw. Benutzer Home Verzeichnis (Desktop).

- Absolute: Voll Qualifizierter Pfad. Da die Pfade aber vom System, auf welchem das Game läuft abhängig sind, wird davon abgeraten, diesen FileHandle zu verwenden.

Für dich wäre dann wohl Internal der richtige FileHandle. Im Prinzip ist es Libgdx egal, was für Dateien du ausließt, auswerten musst du die Dateien letztendlich selbst.

Antwort
von keksklauer4, 19

Ich programmiere auch zurzeit Spiele mit LibGdx und versuche die Levels nachtürlich dynamisch (also variable) zu gestalten und wenn du eine Datei auslesen willst, würde ich dir einfach mal empfehlen den BufferedReader von Java zu benutzen. Libgdx wird ja mit Java genutzt also kannst du das sicher einbinden. Es funktioniert wie folgt:

  1. BufferedReader reader=new BufferedReader(new FileReader(Pfad));
  2. String content=reader.readLine();

Dabei kann eventuell eine IOException gethrowt werden, welche du mit try{} catch(IOException io){} abfangen kannst. In dem Fall würde nur die erste Zeile gelesen werden (also bis zum ersten newline \n). Wenn du aber alle Zeilen lesen willst musst du das in eine Schleife packen oder du  machst alles in eine Zeile ohne Newlines, was zwar für das menschliche Auge doof wäre, aber durchaus für den Computer lesbar ist.

MFG keksklauer4 ;)

Kommentar von Springrbua ,

Ich würde da nicht auf BufferedReader zurückgreifen, da Libgdx eigene Methoden dafür vorsieht. Diese Methoden haben dann den Vorteil, dass sie auf die verwendete Plattform (Android, Desktop, HTML...) richtig reagieren. Um Daten aus Files auszulesen kannst du, wie in meiner Antwort erwähnt, auf die FileHandles zurückgreifen. Hier (https://github.com/libgdx/libgdx/wiki/File-handling#reading-from-a-file) wird beschrieben wie.

Lg

Kommentar von hdhdhddedede ,

danke werde ich sowieso in der Entwicklungsphase machen da die Map etwas größer werden soll habe ich einen Editor für die Map gemacht... aber wenn ich die APP irgendwie veröffentliche kann ich ja den User nicht auffordern sich eine extra Datei runterzuladen das er die Map hat deswegen dachte ich das ich wenn die map fertig ist sie einfach in eine .txt Datei in den Assets Folder packe

Antwort
von androhecker, 21

Ich kenne mich mit libGDX nicht so gut aus, und werde deswegen auf die Frage auch nicht richtig Antworten, aber du solltest solche Fragen bei StackOverflow posten, da bekommst du gute Antworten.

Keine passende Antwort gefunden?

Fragen Sie die Community