Pourquoi ne puis-je pas lire le fichier .ttf lors de l'exécution de la configuration Android?


9

Lors de l'exécution ou du débogage de mon jeu sur un appareil Android, j'obtiens cette erreur dans le logcat:

com.badlogic.gdx.utils.GdxRuntimeException: erreur de lecture du fichier: data / fonts / myFont.ttf (interne)

Qui est créé par cette ligne de code:

FreeTypeFontGenerator generator = new FreeTypeFontGenerator(fontFile);

fontFileest défini comme ceci:

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

Cela ne se produit pas lorsque j'exécute la configuration du bureau.

Je sais que pour la configuration du bureau, vous devez définir le répertoire de travail de votre projet, mais je ne vois pas une telle option dans la configuration Android et cela n'a pas de sens, donc je ne pense pas que ce soit un problème lié au "répertoire de travail" .

De toute évidence, le fichier est dans le bon chemin.

Notez également que tout a bien fonctionné dans mon projet précédent. J'ai créé ce nouveau projet en créant un nouveau prj vide à l'aide de libgdx-setup, puis en copiant toutes les classes et les packages de l'ancien projet. Alors peut-être que c'est un problème lié à un fichier Gradle?


1
obtenez-vous un FileNotFoundException? Le système de fichiers Android est sensible à la casse, assurez-vous que vous l'avez écrit correctement "myFont.ttf" est différent de "myFont.TTF"
Alex Sifuentes

Oui, je ne l'ai pas lu dans le logcat, voici l'autre partie du message logcat: causée par: java.io.FileNotFoundException: data / fonts / myFont.ttf sur android.content.res.AssetManager.openAsset (Native Method) sur android.content.res.AssetManager.open (AssetManager.java:359) sur com.badlogic.gdx.backends.android.AndroidFileHandle.read (AndroidFileHandle.java:75) Je suis sûr que le fichier est correct, il se trouve à l'intérieur actifs / données / polices / myFont.ttf Je pense que pour une raison quelconque, Android ne cherche pas dans le bon dossier ... Mais l'exécution de la configuration du bureau fonctionne bien
Davide Cattani

Peut-être vaut-il mieux contacter le support technique Android?
Wow_mentor

Réponses:


1

Si votre système de fichiers de bureau de test s'exécute sur Windows NTFS et que le système de fichiers du périphérique Android est natif Android, la différence réside dans les pilotes du système de fichiers.

Les pilotes du système de fichiers Windows ne sont pas sensibles à la casse mais Android utilise Linux qui est sensible à la casse.

Assurez-vous que votre capitalisation est correcte dans le fichier.

De plus, j'ai remarqué que vous utilisiez un chemin absolu sans variable environnementale. Ceci est dynamique pour votre répertoire de travail actuel sur Android. Par conséquent, si l'application est exécutée à partir d'un répertoire différent, elle cherchera un emplacement différent pour le fichier. Cela pourrait provoquer des problèmes entre les différentes révisions du système. Donnez toujours des chemins absolus dans Android. Cela signifie commencer par une variable d'environnement ou par le répertoire racine (c'est-à-dire "/") Pour pouvoir déplacer l'application vers une carte SD, il est préférable d'utiliser les variables d'environnement.

De plus, vous ne devez pas utiliser le répertoire de données dynamiques pour votre police. Vous devez l'intégrer dans le package de votre application.


0

Je crois que pour Android, vous devez avoir un dossier d'actifs avec tous les actifs chargés, ce dossier d'actifs serait dans le projet Android plutôt que dans le projet principal. Le bureau, le HTML, etc. utilisent tous les actifs du projet de base afin qu'ils fonctionnent correctement, mais Android a besoin de son propre dossier d'actifs. en avez-vous un?


2
Le bureau HTML et le noyau utilisent le dossier d'actifs Android, qui est le seul dossier d'actifs du projet.
Davide Cattani

0

Les options sont les suivantes:

1) Essayez TTF majuscule au lieu de ttf dans tout votre code - dans le cas où votre fichier d'origine a le suffixe TTF, car Android est sensible à la casse.

2) Dans le fichier build.gradle sous votre module Android, assurez-vous que:

assets.srcDirs = ['assets']

Et pas:

assets.srcDirs = ['assetManager']

En d'autres termes, assurez-vous que c'est votre dossier d'actifs Android. celui-ci a fonctionné pour moi. puis nettoyez le projet de construction et désinstallez l'ancienne application de l'appareil Android.


[DMGregory] l'a compris, la réponse a été modifiée.
Yan.F

-1

Essayez de copier les fichiers de polices directement dans le dossier des ressources.


-1

Faites juste une chose, vous pouvez changer la méthode que vous suivez maintenant. vous pouvez utiliser l'outil "hiero" pour la création de police. Téléchargez simplement le fichier jar "hiero" à partir du lien suivant

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

en utilisant hiero, vous pourrez accéder à presque toutes les polices. après avoir créé les polices, enregistrez-le dans le dossier "asset" des fichiers de votre projet Android et ajoutez le code suivant.

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

essayez simplement cette méthode. ça va marcher.


Désolé, je dois voter contre. En utilisant le FreeTypeFontGeneratornous allons importer n'importe quelle police et écrire avec elle dans n'importe quelle taille. Où Hiero vous oblige à générer des bitmaps pour chaque police et taille. Je suis d'accord que hiero est un excellent outil mais cela ne répond pas à la question.
Madmenyo

@Madmenyo Salut, je donne juste une autre façon de résoudre son problème. Le concept ci-dessus n'est pas faux. Quelle est la solution alternative à son problème. Je ne sais pas quelle est la raison exacte du vote négatif.
Gokul Sreenivasan

Comment le sais-tu? Peut-être qu'il a besoin de beaucoup de texte généré dynamiquement, hiero n'y aide pas.
Madmenyo

@Madmenyo Bonjour, vous pouvez d'abord lire sa question. J'ai donné une solution alternative.
Gokul Sreenivasan

Il veut charger ttf vous suggérez de créer une police bitmap.
Madmenyo

-1

Assurez-vous que les fichiers se trouvent dans / android / assets.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.