Dlaczego nie mogę odczytać pliku .ttf podczas uruchamiania konfiguracji Androida?


9

Podczas uruchamiania lub debugowania mojej gry na urządzeniu z systemem Android pojawia się ten błąd w logcat:

com.badlogic.gdx.utils.GdxRuntimeException: Błąd odczytu pliku: data / fonts / myFont.ttf (wewnętrzny)

Który jest tworzony przez ten wiersz kodu:

FreeTypeFontGenerator generator = new FreeTypeFontGenerator(fontFile);

gdzie fontFilejest zdefiniowane w ten sposób:

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

Nie dzieje się tak, gdy uruchamiam konfigurację pulpitu.

Wiem, że w przypadku konfiguracji pulpitu musisz zdefiniować katalog roboczy swojego projektu, ale nie widzę takiej opcji w konfiguracji Androida i to też nie ma sensu, więc nie sądzę, że jest to problem związany z „katalogiem roboczym” .

Oczywiście plik znajduje się we właściwej ścieżce.

Zauważ też, że wszystko działało dobrze w moim poprzednim projekcie. Stworzyłem ten nowy projekt, tworząc nowy pusty plik prj przy użyciu libgdx-setup, a następnie kopiując wszystkie klasy i pakiety ze starszego projektu. Więc może jest to problem związany z plikiem Gradle?


1
dostajesz FileNotFoundException? W systemie plików Android rozróżniana jest wielkość liter, upewnij się, że poprawnie napisałeś „myFont.ttf” różni się od „myFont.TTF”
— Alex Sifuentes

Tak, nie przeczytałem go w logcat, oto druga część komunikatu logcat: Spowodowane przez: java.io.FileNotFoundException: data / fonts / myFont.ttf at android.content.res.AssetManager.openAsset (Native Metoda) w android.content.res.AssetManager.open (AssetManager.java:359) w com.badlogic.gdx.backends.android.AndroidFileHandle.read (AndroidFileHandle.java:75) Jestem pewien, że plik jest poprawny, jest w środku asset / data / fonts / myFont.ttf Myślę, że z jakiegoś powodu Android nie szuka odpowiedniego folderu ... Ale uruchomienie konfiguracji pulpitu działa dobrze
— Davide Cattani

Być może lepiej jest skontaktować się z pomocą techniczną Androida?
— Wow_mentor

Odpowiedzi:


1

Jeśli testowy system plików pulpitu działa w systemie Windows NTFS, a system plików urządzenia z Androidem działa w systemie Android, różnica występuje w sterownikach systemu plików.

Sterowniki systemu plików Windows nie rozróżniają wielkości liter, ale system Android używa systemu Linux, który rozróżnia małe i duże litery.

Upewnij się, że wielkość liter w pliku jest poprawna.

Dodatkowo zauważyłem, że używasz ścieżki bezwzględnej bez zmiennej środowiskowej. Jest to dynamiczne w stosunku do bieżącego katalogu roboczego na Androidzie. Dlatego jeśli aplikacja jest uruchomiona z innego katalogu, będzie szukać pliku w innym miejscu. Może to powodować problemy między różnymi wersjami systemu. Zawsze podawaj bezwzględne ścieżki w Androidzie. Oznacza to, że zaczynam od zmiennej środowiskowej lub katalogu głównego (tj. „/”). Aby przenieść aplikację na kartę SD, lepiej jest użyć zmiennych środowiskowych.

Ponadto nie należy używać dynamicznego katalogu danych dla czcionki. Powinieneś dołączyć to do pakietu aplikacji.


0

Uważam, że w przypadku Androida musisz mieć folder zasobów z załadowanymi wszystkimi zasobami, ten folder zasobów byłby w projekcie Androida, a nie w projekcie głównym. Komputer stacjonarny, HTML itp. Używają podstawowych zasobów projektu, aby działały dobrze, ale Android potrzebuje własnego folderu zasobów. masz na to jeden?


2
Desktop HTML i core używają folderu zasobów Androida, który jest jedynym folderem zasobów w projekcie.
— Davide Cattani,

0

Dostępne są następujące opcje:

1) Wypróbuj wielkie litery TTF zamiast ttf w całym kodzie - w przypadku, gdy oryginalny plik ma przyrostek TTF, ponieważ w systemie Android rozróżniana jest wielkość liter.

2) W pliku build.gradle w module Androida upewnij się, że:

assets.srcDirs = ['assets']

I nie:

assets.srcDirs = ['assetManager']

Innymi słowy, upewnij się, że jest to folder zasobów Androida. ten działał dla mnie. następnie wyczyść projekt kompilacji i odinstaluj starą aplikację z urządzenia z Androidem.


[DMGregory] to rozumie, odpowiedź jest edytowana.
— Yan.F,

-1

Spróbuj skopiować pliki czcionek bezpośrednio do folderu zasobów.


-1

Po prostu zrób jedną rzecz, którą możesz zmienić teraz. możesz użyć narzędzia „hiero” do tworzenia czcionek. Wystarczy pobrać plik jar „hiero” z następującego łącza

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

za pomocą hiero będziesz mieć dostęp do prawie wszystkich czcionek. po utworzeniu czcionek zapisz go w folderze „zasobów” plików projektu systemu Android i dodaj poniższy kod.

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

po prostu spróbuj tej metody. to będzie działać.


Przepraszam, muszę to zagłosować. Za pomocą FreeTypeFontGeneratorlet importujemy dowolną czcionkę i piszemy nią w dowolnym rozmiarze. Gdzie Hiero wymaga generowania map bitowych dla każdej czcionki i rozmiaru. Zgadzam się, że hiero to świetne narzędzie, ale to nie odpowiada na pytanie.
— Madmenyo,

@Madmenyo Cześć, podam tylko alternatywny sposób rozwiązania jego problemu. Powyższa koncepcja nie jest błędna. Co jest alternatywnym rozwiązaniem jego problemu. Nie wiem, jaki jest dokładnie powód odrzucenia głosu.
— Gokul Sreenivasan

Skąd wiesz? Może potrzebuje dużo dynamicznie generowanego tekstu, hiero nie pomaga w tym.
— Madmenyo,

@Madmenyo Cześć, najpierw możesz przeczytać jego pytanie. Podałem alternatywne rozwiązanie.
— Gokul Sreenivasan,

Chce załadować tf, jeśli sugerujesz utworzenie czcionki bitmapowej.
— Madmenyo,

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.