Mengapa saya tidak bisa membaca file .ttf saat menjalankan konfigurasi Android?


9

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 fontFiledidefinisikan 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?


1
Anda mendapatkan sebuah FileNotFoundException? Sistem file Android peka huruf besar-kecil, pastikan Anda menulisnya dengan benar "myFont.ttf" berbeda dengan "myFont.TTF"
Alex Sifuentes

Ya, saya tidak membacanya di logcat, berikut adalah bagian lain dari pesan logcat: Disebabkan oleh: java.io.FileNotFoundException: data / fonts / myFont.ttf di android.content.res.AssetManager.openAsset (Asli) Metode) di android.content.res.AssetManager.open (AssetManager.java:359) di com.badlogic.gdx.backends.android.AndroidFileHandle.read (AndroidFileHandle.java:75) Saya yakin file ini benar, ada di dalam aset / data / font / myFont.ttf Saya pikir karena alasan tertentu Android tidak mencari di folder yang benar ... Tapi menjalankan konfigurasi desktop berfungsi dengan baik
Davide Cattani

Mungkin lebih baik untuk menghubungi dukungan teknologi Android?
Wow_mentor

Jawaban:


1

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.


0

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?


2
Desktop HTML dan inti menggunakan folder aset Android, yang merupakan satu-satunya folder aset dalam proyek.
Davide Cattani

0

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:

assets.srcDirs = ['assets']

Dan tidak:

assets.srcDirs = ['assetManager']

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.


[DMGregory] mengerti, jawab diedit.
Yan.F


-1

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.

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

coba saja metode ini. ini akan bekerja.


Maaf, harus mengundurkan diri ini. Dengan FreeTypeFontGeneratormembiarkan 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.
Madmenyo

@ Madmenyo Hai, saya hanya memberikan cara alternatif untuk menyelesaikan masalahnya. Konsep di atas tidak salah. Yang merupakan solusi alternatif untuk masalahnya. Saya tidak tahu apa alasan yang tepat untuk memilih.
Gokul Sreenivasan

Bagaimana Anda tahu? Mungkin dia membutuhkan banyak teks yang dihasilkan secara dinamis, hiero tidak membantu dengan itu.
Madmenyo

@ Madmenyo Hai, Anda dapat membaca pertanyaannya terlebih dahulu. Saya telah memberikan solusi alternatif.
Gokul Sreenivasan

Dia ingin memuat ttf yang Anda sarankan untuk membuat font bitmap.
Madmenyo

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.