Saat menjalankan atau men-debug game saya di perangkat Android, saya mendapatkan kesalahan ini di logcat:
com.badlogic.gdx.utils.GdxRuntimeException: Kesalahan saat membaca file: data / fonts / myFont.ttf (Internal)
Yang dibuat oleh baris kode ini:
FreeTypeFontGenerator generator = new FreeTypeFontGenerator(fontFile);
di mana fontFile
didefinisikan seperti ini:
FileHandle fontFile = Gdx.files.internal("data/fonts/myFont.ttf");
Ini tidak terjadi ketika saya menjalankan konfigurasi desktop.
Saya tahu bahwa untuk konfigurasi desktop Anda harus menentukan direktori kerja proyek Anda, tetapi saya tidak melihat opsi seperti itu dalam konfigurasi android dan itu juga tidak masuk akal, jadi saya tidak berpikir itu adalah "direktori kerja" yang berhubungan dengan masalah .
Jelas, file berada di jalur yang benar.
Perhatikan juga bahwa semuanya bekerja dengan baik di proyek saya sebelumnya. Saya membuat proyek baru ini dengan membuat prj kosong baru menggunakan libgdx-setup dan kemudian menyalin semua kelas dan paket dari proyek yang lebih lama. Jadi mungkin itu masalah yang terkait dengan beberapa file Gradle?
FileNotFoundException
? Sistem file Android peka huruf besar-kecil, pastikan Anda menulisnya dengan benar "myFont.ttf" berbeda dengan "myFont.TTF"Jawaban:
Jika sistem file desktop pengujian Anda berjalan pada Windows NTFS dan sistem file perangkat Android pada Android asli, perbedaannya ada pada driver sistem file.
Driver sistem file Windows tidak peka huruf besar kecil tetapi Android menggunakan Linux yang peka huruf besar kecil.
Pastikan kapitalisasi Anda benar pada file.
Selain itu saya perhatikan Anda menggunakan jalur absolut tanpa variabel lingkungan. Ini dinamis untuk direktori kerja Anda saat ini di Android. Karenanya, jika aplikasi dijalankan dari direktori yang berbeda, ia akan mencari di tempat yang berbeda untuk file tersebut. Ini dapat menyebabkan masalah di antara berbagai revisi sistem. Selalu berikan jalur absolut di Android. Ini berarti memulai dengan variabel lingkungan atau direktori root (yaitu "/") Demi bisa memindahkan aplikasi ke kartu SD, lebih baik menggunakan variabel lingkungan.
Selain itu, Anda tidak boleh menggunakan direktori data dinamis untuk font Anda. Anda harus menggabungkannya ke dalam paket aplikasi Anda.
sumber
Saya percaya untuk android Anda perlu memiliki folder aset dengan semua aset dimuat ke dalamnya, folder aset ini akan berada di proyek android daripada proyek inti. Desktop, HTML, dll semua menggunakan aset proyek inti sehingga mereka akan berfungsi dengan baik, tetapi android membutuhkan folder aset sendiri. apakah kamu punya satu untuk itu?
sumber
Opsinya adalah:
1) Coba huruf besar TTF alih-alih ttf dalam semua kode Anda - jika file asli Anda memiliki akhiran TTF, karena android peka huruf besar-kecil.
2) Dalam file build.gradle di bawah modul android Anda pastikan bahwa:
Dan tidak:
Dengan kata lain pastikan itu folder aset Android Anda. ini bekerja untuk saya. kemudian bersihkan proyek pembangunan, dan hapus instalasi aplikasi lama dari perangkat android.
sumber
Coba salin file font langsung ke folder aset.
sumber
Lakukan saja satu hal yang dapat Anda ubah metode yang Anda ikuti sekarang. Anda dapat menggunakan alat "hiero" untuk pembuatan font. Cukup unduh file jar "hiero" dari tautan berikut
https://libgdx.badlogicgames.com/tools.html
dengan menggunakan hiero Anda akan dapat mengakses hampir semua font. setelah membuat font simpan di file proyek "folder" file android Anda dan tambahkan kode berikut.
coba saja metode ini. ini akan bekerja.
sumber
FreeTypeFontGenerator
membiarkan Anda mengimpor font apa pun dan menulis dengannya dalam ukuran apa pun. Di mana Hiero mengharuskan Anda untuk menghasilkan bitmap untuk setiap font dan ukuran. Saya setuju bahwa hiero adalah alat yang hebat tetapi ini tidak menjawab pertanyaan.Pastikan file ada di dalam / android / aset.
sumber