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 fontFile
jest 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?
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”Odpowiedzi:
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.
źródło
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?
źródło
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:
I nie:
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.
źródło
Spróbuj skopiować pliki czcionek bezpośrednio do folderu zasobów.
źródło
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.
po prostu spróbuj tej metody. to będzie działać.
źródło
FreeTypeFontGenerator
let 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.Upewnij się, że pliki znajdują się w / android / asset.
źródło