Warum kann ich die .ttf-Datei nicht lesen, wenn die Android-Konfiguration ausgeführt wird?

9

Beim Ausführen oder Debuggen meines Spiels auf einem Android-Gerät wird im Logcat der folgende Fehler angezeigt:

com.badlogic.gdx.utils.GdxRuntimeException: Fehler beim Lesen der Datei: data / fonts / myFont.ttf (Intern)

Welches wird durch diese Codezeile erstellt:

FreeTypeFontGenerator generator = new FreeTypeFontGenerator(fontFile);

wo fontFileist so definiert:

FileHandle fontFile = Gdx.files.internal("data/fonts/myFont.ttf");

Dies passiert nicht, wenn ich die Desktop-Konfiguration ausführe.

Ich weiß, dass Sie für die Desktop-Konfiguration das Arbeitsverzeichnis Ihres Projekts definieren müssen, aber ich sehe eine solche Option in der Android-Konfiguration nicht und es macht auch keinen Sinn, daher denke ich nicht, dass es sich um ein Problem im Zusammenhang mit dem "Arbeitsverzeichnis" handelt .

Offensichtlich befindet sich die Datei im richtigen Pfad.

Beachten Sie auch, dass in meinem vorherigen Projekt alles gut funktioniert hat. Ich habe dieses neue Projekt erstellt, indem ich mit libgdx-setup ein neues leeres prj erstellt und dann alle Klassen und Pakete aus dem älteren Projekt kopiert habe. Vielleicht ist es ein Problem im Zusammenhang mit einer Gradle-Datei?

Davide Cattani
quelle
1
bekommst du eine FileNotFoundException? Android-Dateisystem unterscheidet zwischen Groß- und Kleinschreibung. Stellen Sie sicher, dass Sie es richtig geschrieben haben. "MyFont.ttf" unterscheidet sich von "myFont.TTF"
Alex Sifuentes
Ja, ich habe es nicht im Logcat gelesen. Hier ist der andere Teil der Logcat-Nachricht: Auslöser: java.io.FileNotFoundException: data / fonts / myFont.ttf unter android.content.res.AssetManager.openAsset (Native) Methode) unter android.content.res.AssetManager.open (AssetManager.java:359) unter com.badlogic.gdx.backends.android.AndroidFileHandle.read (AndroidFileHandle.java:75) Ich bin sicher, dass die Datei korrekt ist und sich darin befindet Assets / Data / Fonts / MyFont.ttf Ich denke, aus irgendeinem Grund sucht Android nicht im richtigen Ordner ... Aber das Ausführen der Desktop-Konfiguration funktioniert einwandfrei
Davide Cattani
Vielleicht ist es besser, den technischen Support von Android zu kontaktieren?
Wow_mentor

Antworten:

1

Wenn Ihr Test-Desktop-Dateisystem unter Windows NTFS ausgeführt wird und das Android-Gerätedateisystem auf Android nativ ist, liegt der Unterschied in den Dateisystemtreibern.

Die Windows-Dateisystemtreiber unterscheiden nicht zwischen Groß- und Kleinschreibung, Android verwendet jedoch Linux, bei dem zwischen Groß- und Kleinschreibung unterschieden wird.

Stellen Sie sicher, dass Ihre Groß- und Kleinschreibung in der Datei korrekt ist.

Außerdem habe ich festgestellt, dass Sie einen absoluten Pfad ohne Umgebungsvariable verwenden. Dies ist dynamisch für Ihr aktuelles Arbeitsverzeichnis unter Android. Wenn die App in einem anderen Verzeichnis ausgeführt wird, sucht sie an einer anderen Stelle nach der Datei. Dies kann zu Problemen zwischen verschiedenen Systemrevisionen führen. Geben Sie in Android immer absolute Pfade an. Dies bedeutet, dass Sie entweder mit einer Umgebungsvariablen oder dem Stammverzeichnis (dh "/") beginnen. Um die App auf eine SD-Karte verschieben zu können, ist es besser, die Umgebungsvariablen zu verwenden.

Außerdem sollten Sie das dynamische Datenverzeichnis nicht für Ihre Schriftart verwenden. Sie sollten es in das Paket Ihrer App bündeln.

Robert Wm Ruedisueli
quelle
0

Ich glaube, für Android müssen Sie einen Assets-Ordner haben, in den alle Assets geladen sind. Dieser Assets-Ordner befindet sich eher im Android-Projekt als im Kernprojekt. Desktop, HTML usw. verwenden alle Kernprojekt-Assets, damit sie einwandfrei funktionieren, aber Android benötigt einen eigenen Assets-Ordner. hast du eins dafür

Praefervidus
quelle
2
Desktop-HTML und Core verwenden den Android-Assets-Ordner, der der einzige Assets-Ordner im Projekt ist.
Davide Cattani
0

Die Optionen sind:

1) Versuchen Sie TTF-Großbuchstaben anstelle von ttf in Ihrem gesamten Code - falls Ihre Originaldatei das TTF-Suffix hat, da bei Android zwischen Groß- und Kleinschreibung unterschieden wird.

2) Stellen Sie in der Datei build.gradle unter Ihrem Android-Modul Folgendes sicher:

assets.srcDirs = ['assets']

Und nicht:

assets.srcDirs = ['assetManager']

Mit anderen Worten, stellen Sie sicher, dass es sich um Ihren Android-Assets-Ordner handelt. Dieser hat für mich gearbeitet. Bereinigen Sie dann das Build-Projekt und deinstallieren Sie die alte App vom Android-Gerät.

Yan.F
quelle
[DMGregory] hat es verstanden, Antwort bearbeitet.
Yan.F
-1

Versuchen Sie, die Schriftdateien direkt in den Assets-Ordner zu kopieren.

jobr97
quelle
-1

Tun Sie einfach eine Sache, Sie können die Methode ändern, die Sie jetzt folgen. Sie können das "Hiero" -Tool für die Erstellung von Schriftarten verwenden. Laden Sie einfach die JAR-Datei "Hiero" über den folgenden Link herunter

https://libgdx.badlogicgames.com/tools.html

Mit Hiero können Sie auf fast alle Schriftarten zugreifen. Nachdem Sie die Schriftarten erstellt haben, speichern Sie sie im Ordner "Asset" Ihrer Android-Projektdateien und fügen Sie den folgenden Code hinzu.

     private BitmapFont font;
     font = new BitmapFont(Gdx.files.internal("myNewFontCreatedByHiero.fnt"));

Probieren Sie einfach diese Methode aus. es wird klappen.

Gokul Sreenivasan
quelle
Sorry, muss das ablehnen. Mit können FreeTypeFontGeneratorSie eine beliebige Schriftart importieren und in beliebiger Größe damit schreiben. In Hiero müssen Sie Bitmaps für jede Schriftart und Größe generieren. Ich stimme zu, dass Hiero ein großartiges Werkzeug ist, aber dies beantwortet die Frage nicht.
Madmenyo
@ Madmenyo Hallo, ich gebe nur einen alternativen Weg, um sein Problem zu lösen. Das obige Konzept ist nicht falsch. Welches ist die alternative Lösung für sein Problem. Ich weiß nicht, was genau der Grund für die Ablehnung ist.
Gokul Sreenivasan
Woher weißt du das? Vielleicht braucht er viel dynamisch generierten Text, hiero hilft das nicht.
Madmenyo
@ Madmenyo Hallo, du kannst zuerst seine Frage lesen. Ich habe eine alternative Lösung gegeben.
Gokul Sreenivasan
Er möchte ttf laden, wenn Sie vorschlagen, eine Bitmap-Schriftart zu erstellen.
Madmenyo
-1

Stellen Sie sicher, dass sich die Dateien in / android / Assets befinden.

kwantuM
quelle