Por que não consigo ler o arquivo .ttf ao executar a configuração do Android?

9

Ao executar ou depurar meu jogo no dispositivo Android, recebo este erro no logcat:

com.badlogic.gdx.utils.GdxRuntimeException: Erro ao ler o arquivo: data / fonts / myFont.ttf (interno)

Que é criado por esta linha de código:

FreeTypeFontGenerator generator = new FreeTypeFontGenerator(fontFile);

onde fontFileé definido assim:

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

Isso não acontece quando executo a configuração da área de trabalho.

Eu sei que para a configuração da área de trabalho, você precisa definir o diretório de trabalho do seu projeto, mas não vejo essa opção na configuração do Android e isso também não faz sentido; portanto, não acho que seja um problema relacionado ao "diretório de trabalho" .

Obviamente, o arquivo está no caminho correto.

Observe também que tudo funcionou bem no meu projeto anterior. Eu criei esse novo projeto criando um novo prj em branco usando libgdx-setup e copiando todas as classes e pacotes do projeto mais antigo. Talvez seja um problema relacionado a algum arquivo Gradle?

Davide Cattani
fonte
11
você está recebendo um FileNotFoundException? Arquivo-sistema Android é sensível a maiúsculas, certifique-se que você escreveu corretamente "myfont.ttf" é diferente que "myfont.ttf"
Alex Sifuentes
Sim, eu não li no logcat, aqui está a outra parte da mensagem do logcat: Causada por: java.io.FileNotFoundException: data / fonts / myFont.ttf em android.content.res.AssetManager.openAsset (Native Método) em android.content.res.AssetManager.open (AssetManager.java:359) em com.badlogic.gdx.backends.android.AndroidFileHandle.read (AndroidFileHandle.java:75) Tenho certeza que o arquivo está correto, está dentro ativos / dados / fonts / myfont.ttf Eu acho que por algum motivo Android não está olhando na pasta correta ... Mas correr a configuração do desktop fina funciona
Davide Cattani
Talvez seja melhor entrar em contato com o suporte técnico do Android?
Wow_mentor 18/02

Respostas:

1

Se o sistema de arquivos da área de trabalho de teste estiver em execução no Windows NTFS e o sistema de arquivos do dispositivo Android estiver no Android, a diferença estará nos drivers do sistema de arquivos.

Os drivers do sistema de arquivos do Windows não diferenciam maiúsculas de minúsculas, mas o Android usa Linux, que diferencia maiúsculas de minúsculas.

Verifique se sua capitalização está correta no arquivo.

Além disso, notei que você estava usando um caminho absoluto sem variável ambiental. Isso é dinâmico no seu diretório de trabalho atual no Android. Portanto, se o aplicativo for executado em um diretório diferente, ele procurará em um local diferente o arquivo. Isso pode causar problemas entre várias revisões do sistema. Sempre forneça caminhos absolutos no Android. Isso significa começar com uma variável de ambiente ou o diretório raiz (ou seja, "/"). Para poder mover o aplicativo para um cartão SD, é melhor usar as variáveis ​​de ambiente.

Além disso, você não deve usar o diretório de dados dinâmicos para sua fonte. Você deve agrupá-lo no pacote do seu aplicativo.

Robert Wm Ruedisueli
fonte
0

Acredito que para o Android você precisa ter uma pasta de ativos com todos os ativos carregados nela, essa pasta de ativos estaria no projeto android em vez do projeto principal. Desktop, HTML, etc, todos usam os principais recursos do projeto para que funcionem bem, mas o Android precisa de sua própria pasta de ativos. você tem um para isso?

Praefervidus
fonte
2
O HTML e o núcleo da área de trabalho usam a pasta de ativos do Android, que é a única pasta de ativos no projeto.
Davide Cattani
0

As opções são:

1) Tente TTF maiúsculo em vez de ttf em todo o seu código - caso o arquivo original tenha sufixo TTF, porque o Android diferencia maiúsculas de minúsculas.

2) No arquivo build.gradle no seu módulo Android, verifique se:

assets.srcDirs = ['assets']

E não:

assets.srcDirs = ['assetManager']

Em outras palavras, verifique se é sua pasta de ativos do Android. este funcionou para mim. limpe o projeto de compilação e desinstale o aplicativo antigo do dispositivo Android.

Yan.F
fonte
[DMGregory] entendeu, resposta editada.
Yan.F
-1

Tente copiar os arquivos de fonte diretamente na pasta de ativos.

jobr97
fonte
-1

Basta fazer uma coisa que você pode alterar o método que você está seguindo agora. você pode usar a ferramenta "hiero" para a criação da fonte. Basta baixar o arquivo jar "hiero" no link a seguir

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

usando hiero, você poderá acessar quase todas as fontes. Depois de criar as fontes, salve-o na pasta "asset" dos arquivos de projeto do Android e adicione o código a seguir.

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

apenas tente este método. vai funcionar.

Gokul Sreenivasan
fonte
Desculpe, tenho que reduzir isso. Usando o FreeTypeFontGeneratorvamos importar qualquer fonte e escrever com ela em qualquer tamanho. Onde o Hiero exige que você gere bitmaps para cada fonte e tamanho. Concordo que o hiero é uma ótima ferramenta, mas isso não está respondendo à pergunta.
Madmenyo
@ Madmenyo Oi, eu apenas dou uma maneira alternativa de resolver o problema dele. O conceito acima não está errado. Qual é a solução alternativa para o seu problema. Não sei qual é o motivo exato do voto negativo.
Gokul Sreenivasan
Como você sabe? Talvez ele precise de muito texto gerado dinamicamente, o hiero não ajuda nisso.
Madmenyo
@ Madmenyo Oi, você pode ler sua pergunta primeiro. Eu dei uma solução alternativa.
Gokul Sreenivasan
Ele quer carregar o ttf, você sugere criar uma fonte de bitmap.
precisa saber é o seguinte
-1

Verifique se os arquivos estão dentro de / android / assets.

kwantuM
fonte