Android yapılandırmasını çalıştırırken neden .ttf dosyasını okuyamıyorum?


9

Oyunumu Android cihazında çalıştırırken veya hata ayıklarken, logcat'te bu hatayı alıyorum:

com.badlogic.gdx.utils.GdxRuntimeException: Dosya okuma hatası: veri / yazı tipleri / myFont.ttf (Dahili)

Bu kod satırı tarafından oluşturulan:

FreeTypeFontGenerator generator = new FreeTypeFontGenerator(fontFile);

nerede fontFileşöyle tanımlanır:

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

Masaüstü yapılandırmasını çalıştırdığımda bu gerçekleşmiyor.

Masaüstü yapılandırması için projenizin çalışma dizinini tanımlamanız gerektiğini biliyorum, ancak android yapılandırmasında böyle bir seçenek görmüyorum ve ayrıca bir anlamı da yok, bu yüzden bunun bir "çalışma dizini" ile ilgili sorun olduğunu düşünmüyorum .

Açıkçası, dosya doğru yolda.

Ayrıca önceki projemde her şeyin yolunda gittiğine dikkat edin. Bu yeni projeyi libgdx-setup kullanarak yeni bir boş prj oluşturarak ve daha sonra eski projeden tüm sınıfları ve paketleri kopyalayarak oluşturdum. Belki de bu bazı Gradle dosyası ile ilgili bir sorun?


1
anlıyor musun FileNotFoundException? Android dosya sistemi büyük / küçük harfe duyarlıdır, doğru yazdığınızdan emin olun "myFont.ttf" farklı "myFont.TTF"
Alex Sifuentes

Evet, logcat'te okumadım, burada logcat mesajının diğer kısmı: Neden: java.io.FileNotFoundException: android.content.res.AssetManager.openAsset (Yerel Yöntem) com.badlogic.gdx.backends.android.AndroidFileHandle.read (AndroidFileHandle.java:75) adresinde android.content.res.AssetManager.open'de (AssetManager.java:359) varlıklar / veri / yazı tipleri / myFont.ttf Bence Android neden doğru klasöre bakmıyor ... Ama masaüstü yapılandırmasını çalıştırmak iyi çalışıyor
Davide Cattani

Belki de Android teknik destekle iletişime geçmek daha iyidir?
Wow_mentor

Yanıtlar:


1

Test masaüstü dosya sisteminiz Windows NTFS üzerinde çalışıyorsa ve Android cihaz dosya sistemi yerel Android'de ise, fark dosya sistemi sürücülerindedir.

Windows dosya sistemi sürücüleri büyük / küçük harfe duyarlı değildir, ancak Android büyük / küçük harfe duyarlı Linux kullanır.

Büyük / küçük harf kullanımınızın dosyada doğru olduğundan emin olun.

Ayrıca çevresel değişken olmadan mutlak bir yol kullandığınızı fark ettim. Bu, Android'deki mevcut çalışma dizininiz için dinamiktir. Bu nedenle, uygulama farklı bir dizinden çalıştırılırsa, dosya için farklı bir yere bakacaktır. Bu, çeşitli sistem revizyonları arasında sorunlara neden olabilir. Android'de her zaman mutlak yollar verin. Bu, çevresel bir değişkenle veya kök dizinden (yani "/") başlamak anlamına gelir. Uygulamayı bir SD karta taşıyabilmek için çevresel değişkenleri kullanmak daha iyidir.

Ayrıca, yazı tipiniz için dinamik veri dizinini kullanmamalısınız. Uygulamanızın paketinde paketlemelisiniz.


0

Ben android için yüklü tüm varlıkları ile bir varlık klasörü olması gerektiğine inanıyorum, bu varlıklar klasörü çekirdek proje yerine android projede olacaktır. Masaüstü, HTML, vb. Tüm temel proje varlıklarını kullanır, böylece iyi çalışırlar, ancak android kendi varlık klasörüne ihtiyaç duyar. bunun için bir tane var mı?


2
Masaüstü HTML ve çekirdek, projedeki tek varlık klasörü olan Android varlıklar klasörünü kullanır.
Davide Cattani

0

Seçenekler:

1) Tüm kodunuzda ttf yerine TTF büyük harfini deneyin - orijinal dosyanızın TTF soneki olması durumunda, android büyük / küçük harfe duyarlıdır.

2) android modülünüz altındaki build.gradle dosyasında şunlardan emin olun:

assets.srcDirs = ['assets']

Ve yok:

assets.srcDirs = ['assetManager']

Başka bir deyişle onun android varlık klasörü emin olun. bu benim için çalıştı. sonra temiz inşa projesi ve android cihazdan eski uygulamayı kaldırın.


[DMGregory] anladı, cevap düzenledi.
Yan.F

-1

Yazı tipi dosyalarını doğrudan varlıklar klasörüne kopyalamayı deneyin.


-1

Sadece bir şey yapın, şimdi takip ettiğiniz yöntemi değiştirebilirsiniz. yazı tipi oluşturmak için "hiero" aracını kullanabilirsiniz. Sadece aşağıdaki bağlantıdan "hiero" jar dosyasını indirin

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

hiero kullanarak neredeyse tüm yazı tiplerine erişebileceksiniz. yazı tiplerini oluşturduktan sonra android proje dosyaları "varlık" klasörüne kaydedin ve aşağıdaki kodu ekleyin.

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

sadece bu yöntemi deneyin. Çalışacak.


Üzgünüm, bunu indirmek zorundayım. Kullanılması FreeTypeFontGeneratorlet Eğer herhangi bir boyutta onunla herhangi bir yazı tipi ve yazma içe bulunuyor. Hiero, her yazı tipi ve boyutu için bitmap oluşturmanızı gerektirir. Hiero'nun harika bir araç olduğunu kabul ediyorum, ancak bu soruya cevap vermiyor.
Madmenyo

@Madmenyo Merhaba, sadece problemini çözmek için alternatif bir yol veriyorum. Yukarıdaki konsept yanlış değildir. Bu onun sorununa alternatif bir çözümdür. Aşağı oylamanın kesin sebebinin ne olduğunu bilmiyorum.
Gokul Sreenivasan

Nereden biliyorsunuz? Belki dinamik olarak oluşturulmuş çok fazla metne ihtiyacı vardır, hiero buna yardımcı olmaz.
Madmenyo

@Madmenyo Merhaba, önce sorusunu okuyabilirsiniz. Alternatif bir çözüm verdim.
Gokul Sreenivasan

Bir bitmap yazı tipi oluşturmanızı önerdiğiniz ttf'yi yüklemek istiyor.
Madmenyo

-1

Dosyaların / android / varlıkların içinde olduğundan emin olun.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.