Чому я не можу прочитати .ttf файл під час роботи конфігурації Android?


9

Під час запуску або налагодження моєї гри на пристрої Android я отримую цю помилку в логкатах:

com.badlogic.gdx.utils.GdxRuntimeException: Помилка читання файлу: data / fonts / myFont.ttf (Internal)

Що створюється за допомогою цього рядка коду:

FreeTypeFontGenerator generator = new FreeTypeFontGenerator(fontFile);

де fontFileвизначено так:

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

Це не відбувається, коли я запускаю конфігурацію робочого столу.

Я знаю, що для конфігурації робочого столу вам потрібно визначити робочий каталог свого проекту, але я не бачу такої опції в конфігурації Android, і це також не має сенсу, тому я не думаю, що це проблема, пов'язана з "робочим каталогом". .

Очевидно, що файл іде правильним шляхом.

Також зауважте, що в моєму попередньому проекті все працювало чудово. Я створив цей новий проект, створивши новий пустий prj, використовуючи libgdx-setup, а потім скопіювавши всі класи та пакети зі старого проекту. То може, це проблема, пов’язана з якимсь файлом Gradle?


1
ви отримуєте FileNotFoundException? Файлова система Android відрізняється від регістру, переконайтесь, що ви її правильно написали, "myFont.ttf" відрізняється від "myFont.TTF"
Alex Sifuentes

Так, я не читав його в logcat, ось інша частина повідомлення logcat: Викликано: java.io.FileNotFoundException: дані / шрифти / myFont.ttf at android.content.res.AssetManager.openAsset (Native Метод) на android.content.res.AssetManager.open (AssetManager.java:359) на com.badlogic.gdx.backends.android.AndroidFileHandle.read (AndroidFileHandle.java:75) Я впевнений, що файл правильний, він знаходиться всередині активи / дані / шрифти / myFont.ttf Я думаю, чомусь Android не шукає правильної папки ... Але запуск конфігурації робочого столу працює нормально
Davide Cattani

Можливо, краще звернутися до технічної служби Android?
Wow_mentor

Відповіді:


1

Якщо ваша файлова система тестового робочого столу працює на Windows NTFS, а файлова система пристрою Android працює на Android, різниця полягає в драйверах файлової системи.

Драйвери файлової системи Windows не відрізняються від регістру, але Android використовує Linux, залежно від регістру.

Переконайтесь, що у файлі вказано правильне використання великих літер.

Крім того, я помітив, що ви використовуєте абсолютний шлях без змінної екології. Це динамічно для вашого поточного робочого каталогу на Android. Отже, якщо додаток запускається з іншого каталогу, воно буде виглядати в іншому місці для файлу. Це може спричинити проблеми між різними переглядами системи. Завжди надайте абсолютні шляхи в Android. Це означає починати з змінної навколишнього середовища або з кореневою директорією (тобто "/"). Для того, щоб мати можливість перемістити додаток на SD-карту, краще використовувати змінні середовища.

Крім того, ви не повинні використовувати динамічний каталог даних для свого шрифту. Ви повинні зв’язати його в пакет свого додатка.


0

Я вважаю, що для android вам потрібно мати папку активів із усіма завантаженими в неї активами, ця папка активів буде в проекті Android, а не в основному проекті. Настільний, HTML та інше використовують основні активи проекту, щоб вони працювали нормально, але Android потребує власної папки активів. у вас є його для цього?


2
Настільний HTML та основні програми використовують папку активів Android, яка є єдиною папкою активів у проекті.
Девіде Каттані

0

Параметри:

1) Спробуйте верхній регістр TTF замість ttf у всьому своєму коді - якщо ваш оригінальний файл має суфікс TTF, оскільки андроїд чутливий до регістру.

2) У файлі build.gradle під модулем Android переконайтесь, що:

assets.srcDirs = ['assets']

І ні:

assets.srcDirs = ['assetManager']

Іншими словами, переконайтеся, що папка активів вашого Android. цей працював на мене. потім очистіть проект збірки та видаліть старий додаток із пристрою Android.


[DMGregory] отримав це, відповідь відредаговано.
Ян.Ф

-1

Спробуйте скопіювати файли шрифтів безпосередньо у папку активів.


-1

Просто зробіть одне, що ви зможете змінити метод, який ви слідуєте зараз. ви можете використовувати інструмент "hiero" для створення шрифту. Просто завантажте файл jar "hiero" за наступним посиланням

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

за допомогою hiero ви зможете отримати доступ до майже всіх шрифтів. після створення шрифтів збережіть його у папці «android» файли проекту Android та додайте наступний код.

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

просто спробуйте цей метод. це спрацює.


Вибачте, доведеться спростувати це. За допомогою FreeTypeFontGeneratorдавайте ви імпортуєте будь-який шрифт і пишете ним будь-якого розміру. Де Hiero вимагає від вас генерувати растрові карти для кожного шрифту та розміру. Я погоджуюся, що hiero - чудовий інструмент, але це не дає відповіді на питання.
Мадменьо

@Madmenyo Привіт, я просто даю альтернативний спосіб вирішити його проблему. Вищеописана концепція не є помилковою. Яке альтернативне вирішення його проблеми. Я не знаю, яка точна причина відмови.
Гокуль Среенівасан

Звідки ти знаєш? Можливо, йому потрібно багато динамічно генерованого тексту, ієро в цьому не допомагає.
Мадменйо

@Madmenyo Привіт, ви можете прочитати його питання спочатку. Я дав альтернативне рішення.
Гокул Сріенівасан

Він хоче завантажити ttf, який ви пропонуєте створити шрифт растрової карти.
Мадменьо

-1

Переконайтеся, що файли знаходяться всередині / android / активів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.