При запуске или отладке моей игры на устройстве Android я получаю эту ошибку в logcat:
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?
FileNotFoundException
? Файловая система Android чувствительна к регистру, убедитесь, что вы написали ее правильно, «myFont.ttf» отличается от «myFont.TTF»Ответы:
Если тестовая файловая система настольного компьютера работает в Windows NTFS, а файловая система устройства Android - в нативном Android, разница заключается в драйверах файловой системы.
Драйверы файловой системы Windows не чувствительны к регистру, но Android использует Linux, который чувствителен к регистру.
Удостоверьтесь, что ваша прописная буква в файле правильная.
Кроме того, я заметил, что вы используете абсолютный путь без переменных среды. Это динамически для вашего текущего рабочего каталога на Android. Следовательно, если приложение запускается из другого каталога, оно будет искать файл в другом месте. Это может вызвать проблемы между различными ревизиями системы. Всегда указывайте абсолютные пути в Android. Это означает, что нужно начинать с переменной среды или с корневого каталога (т. Е. «/»). Чтобы можно было переместить приложение на SD-карту, лучше использовать переменные среды.
Кроме того, вы не должны использовать динамический каталог данных для вашего шрифта. Вы должны поместить его в пакет вашего приложения.
источник
Я считаю, что для Android вам нужно иметь папку активов со всеми загруженными в нее ресурсами, эта папка ресурсов будет в проекте Android, а не в основном проекте. Рабочий стол, HTML и т. Д. Все используют основные ресурсы проекта, чтобы они работали нормально, но для android нужна собственная папка ресурсов. у вас есть один для этого?
источник
Варианты:
1) Попробуйте использовать верхний регистр TTF вместо ttf во всем вашем коде - в случае, если ваш исходный файл имеет суффикс TTF, потому что android чувствителен к регистру.
2) В файле build.gradle под вашим модулем Android убедитесь, что:
И не:
Другими словами, убедитесь, что это ваша папка для Android. этот работал для меня. затем очистите проект сборки и удалите старое приложение с устройства Android.
источник
Попробуйте скопировать файлы шрифтов прямо в папку ресурсов.
источник
Просто сделайте одну вещь, которую вы можете изменить метод, который вы используете сейчас. Вы можете использовать инструмент "hiero" для создания шрифта. Просто скачайте файл "hiero" jar по следующей ссылке
https://libgdx.badlogicgames.com/tools.html
с помощью hiero вы сможете получить доступ почти ко всем шрифтам. После создания шрифтов сохраните его в папке «актив» файлов вашего проекта Android и добавьте следующий код.
просто попробуйте этот метод. это будет работать.
источник
FreeTypeFontGenerator
давайте импортируем любой шрифт и напишем в нем в любом размере. Где Hiero требует, чтобы вы генерировали растровые изображения для каждого шрифта и размера. Я согласен, что hiero - отличный инструмент, но это не ответ на вопрос.Убедитесь, что файлы находятся внутри / android / assets.
источник