Perché non riesco a leggere il file .ttf quando eseguo la configurazione di Android?


9

Quando eseguo o eseguo il debug del mio gioco su un dispositivo Android, visualizzo questo errore nel logcat:

com.badlogic.gdx.utils.GdxRuntimeException: errore durante la lettura del file: data / fonts / myFont.ttf (interno)

Che viene creato da questa riga di codice:

FreeTypeFontGenerator generator = new FreeTypeFontGenerator(fontFile);

dove fontFileè definito in questo modo:

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

Questo non succede quando eseguo la configurazione desktop.

So che per la configurazione desktop devi definire la directory di lavoro del tuo progetto, ma non vedo tale opzione nella configurazione Android e non ha senso, quindi non penso che sia un problema relativo alla "directory di lavoro" .

Ovviamente, il file si trova nel percorso corretto.

Si noti inoltre che tutto ha funzionato bene nel mio progetto precedente. Ho creato questo nuovo progetto creando un nuovo prj vuoto usando libgdx-setup e quindi copiando tutte le classi e i pacchetti dal vecchio progetto. Quindi forse è un problema relativo ad alcuni file Gradle?


1
stai ricevendo un FileNotFoundException? Il file system Android fa distinzione tra maiuscole e minuscole, assicurati di averlo scritto correttamente "myFont.ttf" è diverso da "myFont.TTF"
Alex Sifuentes,

Sì, non l'ho letto nel logcat, ecco l'altra parte del messaggio logcat: Causato da: java.io.FileNotFoundException: data / fonts / myFont.ttf su android.content.res.AssetManager.openAsset (Native Metodo) su android.content.res.AssetManager.open (AssetManager.java:359) su com.badlogic.gdx.backends.android.AndroidFileHandle.read (AndroidFileHandle.java:75) Sono sicuro che il file sia corretto, è all'interno assets / data / fonts / myFont.ttf Penso che per qualche motivo Android non stia cercando nella cartella corretta ... Ma l'esecuzione della configurazione desktop funziona bene
Davide Cattani,

Forse è meglio contattare l'assistenza tecnica Android?
Wow_mentor,

Risposte:


1

Se il file system desktop di prova è in esecuzione su Windows NTFS e il file system del dispositivo Android è nativo di Android, la differenza sta nei driver del file system.

I driver del filesystem di Windows non fanno distinzione tra maiuscole e minuscole ma Android usa Linux che distingue tra maiuscole e minuscole.

Assicurati che la tua maiuscola sia corretta sul file.

Inoltre ho notato che stavi usando un percorso assoluto senza variabili ambientali. Questo è dinamico alla tua attuale directory di lavoro su Android. Pertanto, se l'app viene eseguita da una directory diversa, il file verrà visualizzato in una posizione diversa. Ciò potrebbe causare problemi tra le varie revisioni del sistema. Dai sempre percorsi assoluti in Android. Ciò significa iniziare con una variabile ambientale o con la directory principale (ad es. "/") Per poter spostare l'app su una scheda SD, è meglio utilizzare le variabili ambientali.

Inoltre, non dovresti utilizzare la directory dei dati dinamici per il tuo carattere. Dovresti inserirlo nel pacchetto della tua app.


0

Credo che per Android sia necessario avere una cartella delle risorse con tutte le risorse caricate al suo interno, questa cartella delle risorse sarebbe nel progetto Android piuttosto che nel progetto principale. Desktop, HTML, ecc. Utilizzano tutti le risorse del progetto principale in modo che funzionino bene, ma Android ha bisogno della propria cartella delle risorse. ne hai uno per questo?


2
HTML desktop e core utilizzano la cartella delle risorse Android, che è l'unica cartella delle risorse nel progetto.
Davide Cattani,

0

Le opzioni sono:

1) Prova maiuscole / minuscole TTF invece di ttf in tutto il tuo codice - nel caso in cui il file originale abbia il suffisso TTF, perché Android fa distinzione tra maiuscole e minuscole.

2) Nel file build.gradle sotto il tuo modulo Android assicurati che:

assets.srcDirs = ['assets']

E non:

assets.srcDirs = ['assetManager']

In altre parole, assicurati che sia la cartella delle tue risorse Android. questo ha funzionato per me. quindi pulire il progetto di compilazione e disinstallare la vecchia app dal dispositivo Android.


[DMGregory] ha capito, risposta modificata.
Yan.F

-1

Prova a copiare i file dei caratteri direttamente nella cartella delle risorse.


-1

Fai solo una cosa per cambiare il metodo che segui ora. puoi usare lo strumento "hiero" per la creazione del font. Basta scaricare il file jar "hiero" dal seguente link

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

usando hiero sarai in grado di accedere a quasi tutti i caratteri. dopo aver creato i caratteri salvarlo nella cartella "asset" dei file di progetto Android e aggiungere il codice seguente.

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

prova questo metodo. Funzionerà.


Siamo spiacenti, devo sottovalutare questo. Usando il FreeTypeFontGeneratorti importare qualsiasi carattere e scrivere con esso in qualsiasi dimensione. Dove Hiero richiede di generare bitmap per ciascun carattere e dimensione. Sono d'accordo che hiero sia un ottimo strumento ma questo non risponde alla domanda.
Madmenyo,

@Madmenyo Ciao, do solo un modo alternativo per risolvere il suo problema. Il concetto sopra riportato non è sbagliato. Qual è la soluzione alternativa al suo problema. Non so quale sia il motivo esatto del voto contrario.
Gokul Sreenivasan,

Come lo sai? Forse ha bisogno di un sacco di testo generato dinamicamente, hiero non aiuta a farlo.
Madmenyo,

@Madmenyo Ciao, potresti leggere prima la sua domanda. Ho dato una soluzione alternativa.
Gokul Sreenivasan,

Vuole caricare ttf suggerisci di creare un carattere bitmap.
Madmenyo

-1

Assicurati che i file siano all'interno di / android / assets.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.