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.